Graças à sugestão de Horst, consegui analisar como fazer com que o Vim fizesse isso com qualquer linguagem que tivesse uma opção de linha de comando "evaluate". Para JavaScript, o comando que eu coloquei é o seguinte:
imap <F5> ^[_"ay$o//^[kJo^[!!node -e "^Ra"^MkJi
nmap <F5> _"ay$o//^[kJo^[!!node -e "^Ra"^MkJ
Para um detalhamento:
- Para o mapeamento no modo
INSERT
, Escape ( ^[
) retorna ao modo normal.
-
_"ay$
coloca toda a linha no registro a
.
-
o//^[kJ
adiciona o "//" para um comentário.
-
o^[
inicia outra nova linha.
-
!!node -e "^Ra"^M
executa o registrador (a linha) através do Node.js e retorna o resultado na linha atual.
- Finalmente,
kJ
puxa essa nova linha de volta para o primeiro para se tornar o comentário.
- (para o modo
INSERT
, i
retorna o modo de NORMAL
para INSERT
.)
O mesmo pode ser feito para o Python com algumas pequenas edições:
imap <F5> ^[_"ay$o#^[kJo^[!!python -c "import math; ^Ra"^MkJi
nmap <F5> _"ay$o#^[kJo^[!!python -c "import math; ^Ra"^MkJ
Para isso, o comentário //
é substituído pelo #
do Python. Além disso, importo automaticamente o módulo math
, pois ele pode ser muito útil para cálculos rápidos dessa maneira.
Minha recomendação é colocar cada um desses mapeamentos em seus respectivos arquivos ~/.vim/ftplugin/<language>.vim
e colocar set ftplugin on
no seu .vimrc
. Isso permite que o mapeamento seja alterado com base em qual idioma você está trabalhando!
Espero que qualquer pessoa que queira executar código de forma interativa no Vim possa encontrá-lo e, possivelmente, até melhorá-lo. Um enorme "Obrigado!" vai para Horst por responder a esta pergunta e dar o pontapé inicial neste pequeno projeto!