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.

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")'

¡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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.