Conversando com o vim de fora


12

Posso alterar uma variável em uma instância do vim de outro shell (sem enviar chaves pelo tmux)?

Eu pergunto porque gostaria de usar as opções compiling_cmd, success_cmd e fail_cmd do latexmk para mostrar o status da compilação na linha de status.

Talvez eu possa ter o vim procurar a existência ou não de certos arquivos (usando arquivos como variáveis ​​booleanas)? Mas isso parece um pouco sujo; espero que haja uma maneira melhor.

Respostas:


19

Se você iniciar sua primeira sessão do Vim com o argumento --servername VIM:

$ vim --servername VIM

então você pode enviar qualquer comando de qualquer outro shell com o argumento --remote-send.

Por exemplo, se você usar sua linha de status para exibir o valor de alguma variável g:myvare tiver as seguintes linhas no seu vimrc:

let g:myvar = "foo"
set stl+=%{g:myvar}

Então você pode alterar seu valor ( :let g:myvar = "bar") de outro shell:

$ vim --remote-send ':let g:myvar = "bar"<cr>'

A linha de status deve refletir a alteração do valor.


Como seu último comentário diz, se sua instância do Vim não estiver no modo normal, o comando anterior não funcionará conforme o esperado. Pode ser mais simples, mas aqui estão 2 soluções possíveis:

1) adicione a chave <esc>para estar no modo normal
2) use o argumento em --remote-exprvez de --remote-sendavaliar uma expressão e escreva uma pequena função auxiliar cujo código atribuirá o novo valor à sua variável

Primeira solução:

$ vim --remote-send '<esc>:let g:myvar = "bar"<cr>'

Segunda solução:

Defina a seguinte função no seu vimrc:

function! Myfunc(value)
    let g:myvar = a:value
endfunction

Então, no seu shell:

$ vim --remote-expr 'Myfunc("bar")'

Obrigado! Vejo que não tenho esse recurso compilado, então recompilaremos. Espero que seja o mesmo no neovim.
Toothrot

3
@ Lawrence Posso estar errado, mas acho que o neovim não implementa o +clientserverrecurso ( github.com/tpope/vim-dispatch/issues/163#issuecomment-175383047 ). Se for esse o caso, talvez este plugin iria ajudá-lo: github.com/mhinz/neovim-remote
user9433424

Parece que isso tem o mesmo efeito que o envio de chaves com o tmux e depende de saber em que modo o servidor vim está (o exemplo assume o modo normal). Idealmente, eu gostaria de poder definir uma variável diretamente.
Toothrot 24/03
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.