De vez en cuando mientras trabajo en múltiples proyectos, y / o lo que sea, me deja con (también) muchas instancias de Vim abiertas; como sucede, abro un archivo que ya está abierto en otro lugar, dejándome con la opción de:
[O]pen Read-only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort
¿Hay alguna forma integrada de elevar la instancia, como en GUI / terminal, que contiene el archivo abierto? Lo ideal es llevar el archivo en cuestión a primer plano (si hay varios buffers).
A partir de ahora estoy usando un script bash que extrae el PID del intercambio, verifica si ese PID pertenece a Vim y, si es así, se usa wmctrl
para elevar la ventana. Si bien esto funciona bien, al menos para GUI y en X11 Linux, estoy preguntando si hay una forma más nativa.
Respuestas:
Una solución sería utilizar una única instancia de vim por proyecto, lo que evitaría este problema a menos que sus proyectos múltiples tengan archivos superpuestos.
Sin embargo, voy a suponer que está buscando una solución automatizada, en lugar de una sugerencia para cambiar su comportamiento.
Existe la posibilidad de otra solución en FocusLost que sea más nativa de vim.
El evento de autocomando FocusLost funciona en GUI Vim y en algunos terminales de consola. Podría, en lugar de cambiar al archivo en la versión de vim que está abierto (que, si está utilizando múltiples ventanas de interfaz gráfica de usuario es desordenado), persistir los cambios que no se escribieron en la otra instancia de vim no se pierden (un separe la rama de git, guarde y deshaga para que esté en el árbol de deshacer, o simplemente guárdelo) y ábralo en la nueva instancia con una indicación de que se abrió antes.
Otro evento de autocomando potencialmente útil, disponible en vim 7, es SwapExists , que indica que existe un archivo de intercambio para el archivo, es decir, está abierto.
Si mantuvo todo en tmux o pantalla, probablemente haya una manera de cambiar a la ventana / panel apropiado.
Una breve búsqueda en github también muestra https://github.com/lynnard/editexisting.vim, que parece funcionar para gestores de ventanas específicos como Xmonad.
fuente
Largo perdido y casi olvidado.
Pretendía re-factorizar el código, etc. pero la publicación es como es. Este código se usa en un sistema de 32 bits. No estoy seguro de cómo se comportaría en 64 bits (u otro).
Tener un truco en el código C en algún lugar también (extracción de PID).
Déjalo como una publicación para que cualquiera pueda hackearlo y modificarlo. Mi script actual en su conjunto (usando
pid
como opción debería funcionar en cualquier GUI dado que es "GUI-PID / Program" y el uso dewmctrl -l -p
y así sucesivamente):fuente