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!