Hablando con vim desde afuera

12

¿Puedo cambiar una variable en una instancia de vim desde otro shell (sin enviar claves a través de tmux)?

Pregunto porque me gustaría usar las opciones compiling_cmd, success_cmd y failure_cmd de latexmk para mostrar el estado de compilación en la línea de estado.

¿Quizás podría hacer que vim busque la existencia o no existencia de ciertos archivos (usando archivos como variables booleanas)? Pero esto parece un poco sucio; Esperemos que haya una mejor manera.

Toothrot
fuente

Respuestas:

19

Si inicia su primera sesión de Vim con el argumento --servername VIM:

$ vim --servername VIM

entonces puede enviar cualquier comando desde cualquier otro shell con el argumento --remote-send.

Por ejemplo, si usa su línea de estado para mostrar el valor de alguna variable g:myvar, y tiene las siguientes líneas en su vimrc:

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

Luego puede cambiar su valor ( :let g:myvar = "bar") desde otro shell:

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

La línea de estado debe reflejar el cambio del valor.


Como lo dice su último comentario , si su instancia de Vim no está en modo normal, el comando anterior no funcionará como se esperaba. Puede ser más simple, pero aquí hay 2 posibles soluciones:

1) agregue la clave <esc>para estar en modo normal
2) use el argumento en --remote-exprlugar de --remote-sendevaluar una expresión y escriba una pequeña función auxiliar cuyo código asignará el nuevo valor a su variable

Primera solución

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

Segunda solución:

Defina la siguiente función en su vimrc:

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

Luego, en tu caparazón:

$ vim --remote-expr 'Myfunc("bar")'
usuario9433424
fuente
¡Gracias! Veo que no tengo esta característica compilada, así que recompilaré. Esperemos que sea lo mismo en neovim.
Toothrot
3
@Lawrence Puedo estar equivocado, pero creo que neovim no implementa la +clientserverfunción ( github.com/tpope/vim-dispatch/issues/163#issuecomment-175383047 ). Si ese es el caso, tal vez este complemento lo ayude: github.com/mhinz/neovim-remote
user9433424
Parece que esto tiene el mismo efecto que enviar claves con tmux, y depende de saber en qué modo se encuentra el servidor vim (el ejemplo asume el modo normal). Idealmente, me gustaría poder establecer una variable directamente.
Toothrot