Que tal adicionar um autocmd
ao seu ~/.vimrc
-arquivo, criando um mapeamento:
autocmd FileType python map <buffer> <F9> :w<CR>:exec '!python3' shellescape(@%, 1)<CR>
autocmd FileType python imap <buffer> <F9> <esc>:w<CR>:exec '!python3' shellescape(@%, 1)<CR>
então você pode pressionar <F9>
para executar o buffer atual compython
Explicação:
autocmd
: comando que o Vim executará automaticamente {event}
(aqui: se você abrir um arquivo python)
[i]map
: cria um atalho de teclado para <F9>
o modo de inserção / normal
<buffer>
: Se vários buffers / arquivos estiverem abertos: basta usar o ativo
<esc>
: saindo do modo de inserção
:w<CR>
: salva seu arquivo
!
: executa o seguinte comando em seu shell (tente :!ls
)
%
: é substituído pelo nome do arquivo de seu buffer ativo. Mas, uma vez que pode conter coisas como espaços em branco e outras coisas "ruins", é melhor não escrever :python %
, mas usar:
shellescape
: escapar dos caracteres especiais. O 1
meio com uma barra invertida
TL; DR: A primeira linha funcionará no modo normal e, uma vez pressionada <F9>
, primeiro salva seu arquivo e, em seguida, executa o arquivo com o python. O segundo faz a mesma coisa, mas sai do modo de inserção primeiro
autocmd FileType python nnoremap <buffer> ....
nnoremap <buffer> <F9> :!python %<cr>
parece funcionar no Vim 7.4.1689. Para que serve a shellescape?Basta ir para o modo normal pressionando
<esc>
e digite:fonte
Eu tenho isso em meu arquivo .vimrc:
Quando termino de editar um script Python, simplesmente pressiono
<F5>
. O script é salvo e executado em uma tela em branco.fonte
m
tecla mais,
tecla em vez deF5
tecla?Insert
modo. Para execução noNormal
modo, use emnmap
vez deimap
.Eu prefiro a saída do Python redirecionada para uma nova janela do Vim (e se essa janela for deixada aberta, atualize seu conteúdo na próxima vez que você executar o código Python com esta função):
fonte
.vimrc
? Se não, como devo dar este script ao vim? (Noob aqui)Com base nas respostas anteriores, se você gosta de ver o código enquanto observa sua saída, o comando find
:ter
(:terminal
) pode ser útil.Usar
vert
na segunda linha executa o código em divisão vertical em vez de horizontal.O negativo disso é que, se você não fechar a janela dividida onde o código foi executado, você terá muitas divisões após várias execuções (o que não acontece no IDLE original do python, onde a mesma janela de saída é reutilizada).
(Eu mantenho essas linhas dentro
/home/user/.vimrc
)fonte
Lembre-se de que você pode repetir o último comando usado com
@:
, portanto, tudo o que você precisa repetir são esses dois caracteres.Ou você pode salvar a string
w !python
em um dos registradores (como"a
por exemplo) e então clicar:<C-R>a<CR>
para inserir o conteúdo do registradora
na linha de comando e executá-lo.Ou você pode fazer o que faço e mapear
<leader>z
para:!python %<CR>
executar o arquivo atual.fonte
Se você não quiser ver "
:exec python file.py
" impresso todas as vezes, use isto:Não bagunçou minha barra de status powerline / vim-flight também.
fonte
Plugin: jupyter-vim
Assim, você pode enviar linhas (
<leader>E
), seleção visual (<leader>e
) para uma execuçãojupyter-client
(a substituição deipython
)Eu prefiro separar o editor e o interpretador (cada um em seu shell). Imagine que você envia um comando de leitura de entrada incorreto ...
fonte
Para uso genérico (execute python / haskell / ruby / C ++ ... do vim baseado no
filetype
), há um bom plugin chamado vim-quickrun . Ele suporta muitas linguagens de programação por padrão. Também é facilmente configurável, portanto, é possível definir comportamentos preferenciais para qualquer tipo de arquivo, se necessário. O repo github não tem um leia-me sofisticado, mas está bem documentado com o arquivo doc.fonte
A resposta aceita funciona para mim (no Linux), mas eu queria que esse comando também salvasse o buffer antes de executar, então modifiquei um pouco:
O
:w <bar>
salva o buffer ENTÃO executa o código nele.fonte
Um método simples seria digitar
:
no modo normal e, em seguida, pressionar a tecla de seta para cima no teclado e pressionar Enter. Isso repetirá os últimos comandos digitados no VIM.fonte
Se você quiser voltar rapidamente aos
:w
comandos, uma coisa legal é digitar:w
e pressionar a seta para cima. Só percorrerá os comandos que começam comw
.fonte
Eu tenho isso no meu .vimrc:
que salva o buffer atual e executa o código pressionando apenas Esc + F9
fonte
Você pode usar skywind3000 / asyncrun.vim também. É semelhante ao que @FocusedWolf listou.
fonte
Você pode estender para qualquer idioma com 1 atalho de teclado com o comando augroup, por exemplo:
fonte
Pense em usar a linha shebang, para que seja capaz de usá-la com qualquer linguagem, não apenas Python.
Adicionando shebang:
Adicione isto à primeira linha do seu script:
ou isto, se você estiver usando Python 2:
Mapa de teclado do Vim:
Adicione isto ao seu
~/.vimrc
:Tornar o arquivo executável:
Digite no Vim:
ou no terminal:
Explicação:
Quando F7 é pressionado no modo normal, o Vim tentará executar o arquivo atual como um script bash. Então o interpretador bash verá a linha shebang e entenderá que este arquivo deve ser passado para Python (ou qualquer outro programa, se necessário).
Além disso, você poderá executar seu script a partir do terminal usando seu nome:
em vez desta forma (isso também funcionará):
fonte
Este mapeamento .vimrc precisa do Conque Shell , mas replica o comportamento do Geany (e de outros editores X):
A janela fecha automaticamente na saída
:let dummy = conque_term#subprocess('gnome-terminal -e "bash -c \"python ' . expand("%") . '; answer=\\\"z\\\"; while [ $answer != \\\"q\\\" ]; do printf \\\"\nexited with code $?, press (q) to quit: \\\"; read -n 1 answer; done; \" "')
fonte
Coloque o cursor em algum lugar do código. Clique com o botão direito e escolha uma das opções "Selecionar" para destacar seu código. Em seguida, pressione Ctrl: e você verá o novo prompt '<,>'
Agora digite! Python e veja se funciona.
Passei dias tentando resolver o mesmo problema !!! Eu usei a codificação:
Depois de arrancar todo o meu cabelo, finalmente acertei!
fonte
:% !python
.%
significa apenas todas as linhas.Em vez de colocar o mapeamento de comando em seu
.vimrc
, coloque o mapeamento em seu~/.vim/ftplugin/python.vim
arquivo (Windows$HOME\vimfiles\ftplugin\python.vim
). Se você não tiver esse arquivo ou diretórios, basta criá-los. Desta forma, a chave só é mapeada quando você abre um.py
arquivo ou qualquer arquivo comfiletype=python
, uma vez que você só executará este comando em scripts Python.Para o mapeamento real, gosto de poder editar no Vim enquanto o script é executado. Saindo da resposta de @cazyas, tenho o seguinte no meu
ftplugin\python.vim
(Windows):Isso executará o script Python atual em segundo plano. Para Linux, basta alterá-lo para:
fonte
fonte