Guardar archivos en foco perdido en la consola Vim

He estado tratando de configurar la versión de consola de vim para guardar los archivos modificados cuando la ventana de Terminal pierde el foco.

Seguir estas instrucciones no funciona.

¿Debo suponer que tal vez la razón por la que esto no funciona para una versión de consola de vim es porque solo está diseñado para funcionar con versiones GUI, es decir, MacVim?

¿Hay alguna manera de hacer que esto funcione para una versión de consola de vim?

Estoy usando la última versión de vim disponible en homebrew.

Respuestas (1)

:help FocusLostdice:

… Solo para la versión GUI y algunas versiones de consola donde esto puede detectarse. …

Husmeando en el código se reveló la función ui_focus_changecuyo comentario dice:

Se usa para la GUI o para sistemas donde esto se puede hacer en la consola (Win32).

Según la búsqueda de personas que llaman, esa declaración parece precisa (solo se llama automáticamente (asincrónicamente) desde el código GUI para varias plataformas y (sincrónicamente) desde el código de Windows que no es GUI).


Una respuesta a una pregunta relacionada ("¿Puedo hacer que Tmux le diga a Vim cuando su panel pierde el foco?") en Unix y Linux señaló un nuevo complemento de Vim llamado Vitality . El complemento realiza una serie de configuraciones de Vim para habilitar los comandos automáticos FocusLost y FocusGained para instancias que se ejecutan bajo iTerm 2 :

  • Configura Vim para enviar secuencias de control especiales que hacen que iTerm 2 envíe secuencias de control de "enfoque hacia afuera" y "enfoque hacia adentro" cuando la ventana de iTerm 2 pierde/gana el foco (aunque aparentemente iTerm 2 actualmente pierde un poco estas secuencias cuando cambia de pestaña dentro una ventana).
  • Configura Vim para que reconozca las secuencias de "foco hacia afuera" y "enfoque hacia adentro" como teclas de uso poco frecuente (F24 y F25).
    Esto se hace en lugar de solo mapear las secuencias, por lo que es posible habilitar ttimeouty usar un corto ttimeoutlenpara evitar demoras al presionar Escape por sí mismo.
  • Asigna esas teclas para activar FocusLost y FocusGained (a través de doautocmd).

Vitality solo está diseñado para buscar iTerm 2 , pero otros emuladores de terminal también admiten las mismas secuencias de control de "notificación de enfoque":

  • xterm de 10.6 los admite (probablemente xterm de la mayoría de las otras plataformas también)
  • La terminal de 10.6 no soporta las secuencias
  • Desconozco la Terminal 10.7

Si tiene algún otro emulador de terminal que admita las mismas secuencias de control de enfoque que iTerm 2 /xterm (para obtener detalles, consulte doc/vitality.txt, o busque ctlseqs de "Focus" xterm ), entonces debería ser bastante fácil extender Vitality para detectar su emulador de terminal (o simplemente podría simular ser iTerm 2 configurando la variable de entorno ITERM_PROFILE ( export ITERM_PROFILE=not-really-iTerm); la variable de entorno es lo único que utiliza Vitality para verificar iTerm 2 )