¿Puedo compartir el historial de comandos de Vim entre instancias en tiempo real?
Con eso quiero decir lo que la gente hace en bash de esta manera:
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Es decir, cuando ejecuto un comando echo test1
en un shell y luego presiono Upen otro, veo echo test1
. (Para ser precisos, uno tiene que presionar Enterantes Uppara que funcione).
¿Es esto posible con Vim? Al principio pensé que usar la +clientserver
opción funcionaría. Pero eso parece ser otra cosa.
command-history
x-yuri
fuente
fuente
Respuestas:
El historial de comandos se almacena en el archivo viminfo (
:help viminfo
). Por lo general, eso se lee al inicio y se escribe al salir, pero puede persistir explícitamente y sincronizarse entre las instancias de Vim con una combinación de:wviminfo
y:rviminfo
. Tenga en cuenta que esto sincronizará toda la información; es decir, también registrar contenidos, marcas, listas de búfer, etc.fuente
En Vim, lo más cercano que puede obtener es (como se menciona en la respuesta de Ingo y en el comentario de Christian) es:
Es importante darse cuenta de que los
Focus*
comandos automáticos no siempre se ejecutan cuando usa Vim desde un terminal, especialmente no si está usando tmux o screen. Debe probar esto primero usando:au FocusLost :echoerr "Focus lost!"
.Hasta donde sé, no hay una buena solución si estos comandos automáticos no funcionan para usted. El uso de otros eventos (como
CursorHold
) me parece problemático debido a problemas de tiempo que seguramente surgirán.Neovim viene con "ShaDa", que es un reemplazo para el sistema viminfo de Vim. Un aspecto en el que es mejor es fusionar archivos de diferentes instancias, y aunque no admite directamente la sincronización entre varias instancias ( todavía ), esto parece funcionar bien para al menos un desarrollador de Neovim :
Consulte
:help shada-merging
para obtener detalles sobre el proceso de fusión.fuente
:h viminfo-timestamp