it-swarm-es.tech

Vim: ejecuta el script en el que estoy trabajando en una pantalla dividida

Estoy trabajando en un pequeño script python, que necesita una ejecución frecuente para poder depurar y desarrollar más.

¿Puedo dividir la pantalla de vim y ejecutar mi script en una parte con solo presionar una tecla?

16
Adam Matan

Agregue esta línea a su .vimrc:

command R !./%

Y luego puedes simplemente escribir ": R" mientras estás en Vim para ejecutar el script ( vim-run-current-file )

9
caleb

Vim no lo admite, y nunca admitirá un Shell integrado como emacs o kate (si te refieres a eso), consulta esta pregunta sobre el flujo de pila .

David Spillet tiene razón, puede ejecutar su vim dentro de la pantalla gnu:

$ screen vim foo.txt

Pero eso solo le dará algo remotamente parecido a un administrador de ventanas en una terminal - MUY útil cuando se usa sobre ssh o en una caja sin X, pero localmente también puede abrir otro xterm y cambiar entre ellos. *

De todos modos, si puede vivir con el hecho de que no verá el archivo que está editando mientras mira la salida que produce, el consejo de Jack M es bueno, pero podría ser más corto:

:map ;e :w<cr>:!python %<cr>

Con el mismo propósito, tengo esto en mi ~/.vimrc:

au BufEnter *
\if match( getline(1) , '^\#!') == 0 |
\ execute("let b:interpreter = getline(1)[2:]") |
\endif

fun! CallInterpreter()
    if exists("b:interpreter")
         exec ("!".b:interpreter." %")
    endif
endfun

map <F5> :call CallInterpreter()<CR>

Esto ejecuta cualquier archivo que tenga un Shebang (#!) en la primera línea. Utiliza el intérprete para ejecutar el archivo, por lo que no necesita tener permisos de ejecución.

* (la pantalla tiene algunas otras características muy interesantes como copiar y pegar desde la salida, monitorear ventanas ocultas para actividad/no actividad, poder usar la sesión desde diferentes terminales al mismo tiempo, poder cerrar sesión dejando todos los programas en ejecución, es una herramienta poderosa).

10
0x89

La forma menos detallada (que requiere que su script sea ejecutable) es probablemente:

 :!%
5
T.N.T.

El complemento Bexec vim hace exactamente lo que usted quiere. Se incluyen atajos de teclado.

2
jmetz

Puede que no sea de pantalla dividida, pero esto funciona bastante bien para mí:

map ;e :w<CR>:exe ":!python " . getreg("%") . "" <CR>

Esto mapea ;e para escribir el archivo actual y ejecutarlo usando python (asume que python está en su PATH).

2
Jack M.
1

Pon este pequeño fragmento en tu .vimrc para ejecutar el archivo actual con una pulsación de tecla (como F5) y mostrar el resultado en un nuevo búfer de panel dividido.

:! está bien, pero debe cambiar a su terminal para ver el resultado.

Si bien puedes hacer eso con ctrl-z y trae vim de vuelta con fg todavía significa que necesitas cambiar mucho de contexto.

La forma en que esto fragmento funciona es adivinando primero el ejecutable basado en filetype y luego ejecutándolo con el archivo actual como argumento.

A continuación, un método de utilidad útil toma la salida y la vuelca en un nuevo búfer.

No es perfecto, pero es muy rápido para los flujos de trabajo habituales.

Aquí está el fragmento copiado a continuación:

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""" RUN CURRENT FILE """""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Execute current file
nnoremap <F5> :call ExecuteFile()<CR>

" Will attempt to execute the current file based on the `&filetype`
" You need to manually map the filetypes you use most commonly to the
" correct Shell command.
function! ExecuteFile()
  let filetype_to_command = {
  \   'javascript': 'node',
  \   'coffee': 'coffee',
  \   'python': 'python',
  \   'html': 'open',
  \   'sh': 'sh'
  \ }
  let cmd = get(filetype_to_command, &filetype, &filetype)
  call RunShellCommand(cmd." %s")
endfunction

" Enter any Shell command and have the output appear in a new buffer
" For example, to Word count the current file:
"
"   :Shell wc %s
"
" Thanks to: http://vim.wikia.com/wiki/Display_output_of_Shell_commands_in_new_window
command! -complete=shellcmd -nargs=+ Shell call RunShellCommand(<q-args>)
function! RunShellCommand(cmdline)
  echo a:cmdline
  let expanded_cmdline = a:cmdline
  for part in split(a:cmdline, ' ')
     if part[0] =~ '\v[%#<]'
        let expanded_part = fnameescape(expand(part))
        let expanded_cmdline = substitute(expanded_cmdline, part, expanded_part, '')
     endif
  endfor
  botright new
  setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
  call setline(1, 'You entered:    ' . a:cmdline)
  call setline(2, 'Expanded Form:  ' .expanded_cmdline)
  call setline(3,substitute(getline(2),'.','=','g'))
  execute '$read !'. expanded_cmdline
  setlocal nomodifiable
  1
endfunction
0
Evan
map <F5> :w<CR>:exe ":!python " . getreg("%") . "" <CR> 

Es lo que usé con por favor (F5 ejecuta el script actual).

Para convertir vim en un poderoso python IDE recomiendo este tutorial:

0
Aymeric