Pregunta:
Normalmente tengo varias instancias de vim ejecutándose en la misma máquina. Cuando hago un cambio en mi vimrc, puedo simplemente :source ~/.vimrc
(con un mapeo fácil o un autocmd). Pero para que todas las instancias en ejecución reflejen el cambio, tengo que ejecutarlo en cada una de ellas por separado. ¿Puedo usar la función clientserver
para decirle a todas las instancias que recarguen mi vimrc?
También me interesarían las soluciones que no utilicen clientserver
.
Respuesta:
Puede decirle a un servidor Vim que vuelva a cargar el archivo vimrc así:
$ vim --servername MARTIN --remote-send '<Esc>:source $MYVIMRC<CR>'
Y puede obtener una lista de todos los servidores con:
$ vim --serverlist
MARTIN
CARPETSMOKER
Que se puede combinar con un bucle for
:
$ for s in $(vim --serverlist); do vim --servername "$s" --remote-send '<Esc>:source $MYVIMRC<CR>'; done
Dado que es mucho escribir, puede ponerlo en un script de shell en ~/bin/reload-vimrc
; por supuesto, también puede llamarlo desde Vim:
:!reload-vimrc
Si está ejecutando Linux y quiere volverse realmente loco, puede usar inotifywatch
de inotify-tools para monitorear sus archivos vimrc en busca de cambios, y ejecutar esto automáticamente en cada cambio (no probado, ejemplo adaptado de la página de manual)
$ inotifywatch -v -e modify -t 60 -r ~/.vimrc ~/.vim
Sin embargo, no recomendaría esto … Si guarda accidentalmente un archivo con un error de sintaxis, podría cerrar toda su sesión de vim …