: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 )