Adicione esta linha ao seu .vimrc:
command R !./%
E então você pode simplesmente digitar ": R" enquanto estiver no Vim para executar o script ( vim-run- arquivo atual )
Estou trabalhando em um pequeno script python, que precisa de execução frequente para depurar e desenvolver ainda mais.
Posso dividir a tela do vim e executar meu script em uma parte com um pressionamento de tecla?
Adicione esta linha ao seu .vimrc:
command R !./%
E então você pode simplesmente digitar ": R" enquanto estiver no Vim para executar o script ( vim-run- arquivo atual )
O Vim não suporta e nunca suportará um shell incorporado como emacs ou kate (se você quiser dizer isso), consulte esta pergunta do stackoverflow .
David Spillet está certo, você pode rodar o seu vim dentro da tela do gnu:
$ screen vim foo.txt
Mas isso só lhe dará algo remotamente parecido com um gerenciador de janelas em um terminal - MUITO útil quando usado em ssh ou em uma caixa sem X, mas localmente você pode abrir outro xterm e alternar entre eles. *
De qualquer forma, se você pode viver com o fato de que você não verá o arquivo que está editando enquanto observa a saída que produz, a dica de Jack M é boa, mas pode ser mais curta:
:map ;e :w<cr>:!python %<cr>
Para o mesmo propósito, eu tenho isso no meu ~/.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>
Isso executa qualquer arquivo que tenha um shebang ( #!
) na primeira linha. Ele usa o interpretador para executar o arquivo, portanto, não precisa ter permissões de execução.
* (a tela tem alguns outros recursos muito interessantes, como copiar e colar da saída, monitorar janelas ocultas para atividade / não atividade, ser capaz de usar a sessão de diferentes terminais ao mesmo tempo, podendo efetuar logout deixando todos os programas em execução - é uma ferramenta poderosa).
A maneira menos detalhada (que requer que seu script seja executável) é provavelmente:
:!%
Pode não ser em tela dividida, mas isso funciona muito bem para mim:
map ;e :w<CR>:exe ":!python " . getreg("%") . "" <CR>
Isso mapeia ;e
para escrever o arquivo atual e executá-lo usando python (ele supõe que o python está no seu PATH
).
O plugin Bexec faz exatamente o que você deseja. Atalhos de teclado incluídos.
Existe uma pergunta StackOverflow semelhante .
map <F5> :w<CR>:exe ":!python " . getreg("%") . "" <CR>
É o que eu usei com por favor (F5 executa o script atual).
Para transformar o vim em um poderoso IDE python, eu recomendo este tutorial:
Coloque este pequeno snippet no seu .vimrc para executar o arquivo atual com um pressionamento de tecla (como F5
) e exibe o resultado em um novo buffer de painel dividido.
:!
está bem, mas você precisa mudar para o seu terminal para ver o resultado.
Embora você possa fazer isso com ctrl-z
e trazer o vim de volta com fg
, isso significa que você precisa mudar muito o contexto.
A maneira como esse snippet funciona é imaginar o executável com base em o filetype
e, em seguida, executá-lo com o arquivo atual como seu argumento.
Em seguida, um método utilitário útil pega a saída e a coloca em um novo buffer.
Não é perfeito, mas muito rápido para fluxos de trabalho comuns.
Veja o snippet copiado abaixo:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""" 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
Eu não sei sobre o vim diretamente, mas você pode dividir a tela desta maneira geralmente com o utilitário screen
. ctrl + a , S (note que é um S maiúsculo) irá dividir o display e você pode alternar entre os dois com ctrl + a , a aba (se a janela estiver vazia, use ctrl + a , < kbd> n para mover para outra janela aberta ou ctrl + a , c para criar uma nova).
Você pode dividir a exibição em mais de dois também e alterar o tamanho dos grupos com ctrl-a: redimensionar. Eu uso a tela dessa maneira com frequência e, embora não seja a solução de chave única que você pede, pode ser muito conveniente.
Tags vim python keyboard-shortcuts