Guardar archivos en foco perdido en la consola Vim

2

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

Seguir estas instrucciones no funcionan.

¿Debo suponer que tal vez la razón por la que esto no funciona para una versión de consola de vim se deba a que solo está pensado para trabajar con versiones de 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.

    
pregunta Diego Barros 19.03.2012 - 01:56

1 respuesta

2

:help FocusLost dice:

  

...   Solo para la versión GUI y algunas versiones de consola donde se pueda detectar esto.   ...

Hurgando en el código reveló la función ui_focus_change cuyo comentario dice:

  

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

Sobre la base de 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? ") sobre Unix & Linux señaló un nuevo complemento de Vim llamado Vitality . El complemento realiza una serie de configuraciones Vim para habilitar las autocomandas FocusLost y FocusGained para las instancias que se ejecutan en iTerm 2 :

  • Configura a Vim para que envíe secuencias de control especiales que hacen que iTerm 2 envíe “focus out” y “focus in” cuando la ventana iTerm 2 pierde / se enfoca (aunque aparentemente, iTerm 2 hace un poco de torpeza en estas secuencias al cambiar de pestaña dentro de una ventana).
  • Configura Vim para que reconozca las secuencias "enfocar hacia afuera" y "enfocar hacia adentro" como teclas que rara vez se usan (F24 y F25).
    Esto se hace en lugar de simplemente mapear las secuencias, por lo que es posible habilitar ttimeout y usar un corto ttimeoutlen para evitar causar retrasos al presionar Escape por sí mismo.
  • Asigna esas claves 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)
  • Terminal de 10.6 no admite las secuencias
  • No sé sobre Terminal de 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 más información, consulte doc/vitality.txt , o busque “Focus” xterm 's ctlseqs ), entonces debería ser bastante fácil extender Vitality para detectar su emulador de terminal (o simplemente podría fingir ser iTerm 2 configurando la variable de entorno ITERM_PROFILE ( export ITERM_PROFILE=not-really-iTerm ): la variable de entorno es la única cosa que Vitality usa para verificar iTerm 2 )

    
respondido por el Chris Johnsen 19.03.2012 - 06:51

Lea otras preguntas en las etiquetas