¿Cómo se resuelve el historial de comandos entre varias instancias de Vim?

15

Vim mantiene un historial de comandos ex (accesible a través de :y q:), y ese historial persiste después de salir.

Si ejecuto varias instancias de Vim (mismo usuario, mismo directorio de inicio), ¿cómo arbitra Vim entre los historiales de comandos? Parece que el último proceso para salir gana. ¿Hay alguna manera de mantener el historial de comandos de todas las instancias?

200_success
fuente
1
De Verdad? Esta historia no persiste después de dejar de fumar por mí. (Vim 4.7.52, Ubuntu 14.04)
Pomo
3
@Doorknob Asegúrese de que su ~/.viminfopropiedad sea suya . Un error común es que la gente ejecute lo sudo vim ...que, si no ha ejecutado vim como su propio usuario antes, se creará ~/.viminfocomo root. Si ese es el problema, sugeriría aprender a usar sudoedito sudo -eeditar archivos privilegiados.
jamessan
@jamessan Huh, parece que ese fue realmente el problema; chownMe devolví mi .viminfo a mí mismo y lo arreglé. (No sabe cómo su propiedad se cambió a raíz, ya que siempre he usado sudoedit, pero bueno.)
Pomo

Respuestas:

10

La respuesta a su pregunta sobre el título es lo que observó. Del manual de usuario de vim:help 21.3

Cuando ejecuta Vim varias veces, el último que salga almacenará su información. Esto puede causar que se pierda información que anteriormente se había almacenado en Vims. Cada elemento se puede recordar solo una vez.

Sin embargo, el nombre de archivo del archivo viminfo (donde se almacena el historial de comandos, entre otras cosas, como marcas globales y contenido de registro, si está configurado) es modificable. Esto significa que puede configurar diferentes 'historias' para diferentes proyectos o instancias de vim. Suponiendo que no ejecute más de una instancia de vim por proyecto, administrar el nombre de archivo de viminfo a través de vimrc (u otro complemento de configuración del proyecto) es una excelente manera de manejar esto.

Configurar archivos alternativos de viminfo

Para la gestión a nivel de proyecto, queremos configurar vim para guardar su viminfo en un archivo diferente. Esto se puede hacer dentro de un vim en ejecución antes de salir, o por su vimrc, por ejemplo, podría tener líneas en su vimrc que detecten un directorio particular como perteneciente a un proyecto.

:set viminfo+=nPath/to/custom/viminfofile

Un ejemplo de tener vimrc establece automáticamente esto basado en el directorio:

 if getcwd() == "/projects/projA"
     set viminfo+=n~/.viminfo-projA
 endif

El resultado de lo anterior es que el historial específico del proyecto se cargará al inicio y se guardará al salir, si vim se inicia en el directorio / projects / projA.

Cargue una información alternativa alternativa durante el inicio

Esto es bueno para el caso en el que desea guardar su historial a un lado y cargarlo más tarde, sin administrarlo a nivel de proyecto.

Primero, para guardar el historial, agregue a la opción viminfo como se indicó anteriormente antes de salir. Luego, para cargar el historial, inicie vim con la opción -i

vim -i Path/to/custom/viminfofile

Si no desea salir de vim para guardar el archivo viminfo, puede usar :wv( :wviminfo). Esto guarda el archivo viminfo sin salir de vim de acuerdo con la configuración n anterior. Y también puede hacer :wv SomeOtherFilepara guardar en una ubicación que no es la misma que la configuración en la opción viminfo. Esto puede ser más conveniente que configurar el nombre de archivo para usar al salir, pero no impide que vim use el archivo predeterminado una vez que sale.

Por ejemplo, en primer vim:

:wv ~/customInfo

y en la segunda terminal:

vim -i ~/customInfo

O, si ya se está ejecutando un segundo vim y desea cargar el viminfo:

:rv ~/customInfo

Tenga en cuenta que :wvy :rvno cambie el nombre del archivo vim se guardará al salir ni el nombre del archivo leído durante el inicio.

Información Adicional

Descripción de set viminfo+=nSomePath: Usamos el comando set para ajustar la opción nombrada viminfo. El +=indica que queremos agregar a la opción, no cambiar todo. Anexamos la nopción que especifica el nombre de archivo para viminfo. Inmediatamente después de nque tengamos SomePathcuál será el nombre de archivo utilizado para guardar viminfo.

La documentación para wv( :help wv) indica que este comando primero leerá el archivo viminfo, luego combinará entre información antigua y nueva. Hasta ahora no tengo información sobre cómo funciona la fusión en este caso, pero supongo que mantiene marcas para archivos y registros desconocidos que no están establecidos en la sesión actual.

John O'M.
fuente