Recentemente, houve um complemento para o NeoVim, que permite abrir o terminal em um buffer vim. Isso tem possibilidades atraentes de enviar texto de uma janela do vim para outra, replicando, por exemplo, um comportamento semelhante ao REPL.
No passado, eu estava usando o tmux para esse tipo de configuração. No entanto, agora eu gostaria de experimentá-lo usando apenas o NeoVim.
Minha pergunta é - como posso enviar um bloco de texto de um vim dividido para outro? Ou talvez - como posso automatizar a sequência de seleção de texto, puxando-o, alterando divisões e colando?
fonte
p
um buffer de terminal não entra no modo Terminal, portanto, o seguinte<C-\><C-N>
não deve ser necessário. (Dito isto, também é totalmente inofensivo.)Os buffers de terminal do Neovim sempre têm um ID de trabalho associado; portanto, uma maneira é usar a API de controle de trabalho para enviar o texto. Adicione isso ao seu vimrc:
O que salvará o ID do trabalho do último terminal criado na
g:last_terminal_job_id
variável. Então você pode criar algumas funções / comandos / mapeamentos que enviarão os dados usando ajobsend
função, aqui está um exemplo:O exemplo acima enviaria a linha atual, mas você pode estendê-la para enviar a seleção visual.
fonte
Neoterm é um plugin para o neovim desenvolvido para esse fim. Ele implementa um novo comando
:TREPLSend
que pega a linha atual e a envia para uma janela do terminal. Funciona bem para o bash básico e qualquer idioma que tenha um modo REPL.fonte
Além das respostas aqui, implementei um plugin para esse fim: vim-sendtowindow .
Ele fornece um operador de envio para janela que pode ser combinado com qualquer movimento do vim para selecionar o texto a ser enviado para a janela adjacente. Além disso, posiciona convenientemente o cursor após o texto enviado e é repetível em pontos.
Um pequeno exemplo abaixo:
fonte