Estoy usando iTerm2 2.1.1 en Yosemite. No tmux.
Cuando iTerm pierde el foco (cuando se cambia a otra aplicación Comando-Tab o haciendo clic en otra ventana), una ^[[I
y ^[[O
parece ser enviado al terminal. Esto hace ^[[I^[[O
que aparezca un V, o más frustrante, en Vim, esta combinación abre otro pequeño búfer.
Ejemplo: presionar Cmd-Tab varias veces después de comenzar cat
% cat
^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I^[[O^[[I
Esto solo ocurre en iTerm y no en Terminal.app. Además, se reproduce en bash o sh, por lo que no parece ser un problema de zsh. Algunos Google sugirieron que este es un problema de "enfoque", pero ¿qué es "enfoque" en el significado de un terminal? ¿Hay alguna forma de desactivarlo o evitarlo?
Respuestas:
De acuerdo a esto :
Cmd- Rrestablecer desactivará los informes de enfoque (gracias a esto )
fuente
Cmd-R
es la secuencia mágica para míNo tengo una Mac a mano para probar esta respuesta, pero encuentro este problema en XTerm bajo Linux muy ocasionalmente y (suponiendo que iTerm2 respete los mismos códigos de control) puede encontrar útil la solución a continuación.
Ejecute el siguiente comando de shell dentro de la terminal donde está viendo el problema:
(Tenga en cuenta que el último carácter es un 'ell' en minúsculas).
Esta secuencia de control ANSI es como la que aparece en la respuesta de Thomas Dickey, pero desactiva la función (en lugar de activarla). Debería resolver su problema en todas las aplicaciones, no solo en Vim, evitando que los caracteres ocurran.
En Linux puedo demostrar esta secuencia de control trabajando con los siguientes pasos:
xterm
y habilite la función ejecutándoseprintf "\e[?1004h"
en ella.xeyes
o alguna otra aplicación GUI desde ese mismo XTerm . (Por alguna razón, este efecto no me sucede hasta que el XTerm en cuestión lanza una aplicación. ¿Alguien sabe por qué?)^[[O
y^[[I
se "teclee" en el XTerm original.printf "\e[?1004l"
(para deshabilitar la función, como se describe en la corrección anterior).xeyes
, cambiar el foco ", pero esta vez no verá caracteres ingresados en el terminal.Personalmente, solo veo este problema si accidentalmente descargué la salida binaria al terminal, pero si la encuentras más regularmente, es posible que desees agregar eso
printf
al script de inicio interactivo de tu shell (por ejemplo~/.bashrc
). No parece haber ningún daño (al menos en XTerm) al enviar el código de control si la función ya está desactivada, por lo que debería ser seguro incluso si solo ve este problema a veces.Si le preocupa que su shell siempre genere esa salida, tal vez porque a veces lo usa en lugares que no manejan bien esos códigos de control, o si el problema a veces se desencadena después de que se inicia el shell, entonces es posible que prefiera configurar un alias (por ejemplo, con
alias focusfix='printf "\e[?1004l"'
) para que sea más conveniente ejecutarlo manualmente.fuente
El término "foco" se refiere a qué terminal (o ventana) acepta actualmente eventos de entrada de teclado y mouse. Solo uno puede tener foco; Existen protocolos para establecer cómo ganar y perder el enfoque en un entorno gráfico que no sería útil explorar.
De la descripción (vea también el indicador del panel actual de Tmux cuando se recupera el foco ), parece que iTerm2 implementa esta
xterm
característica:Está habilitado por el modo privado 1004 (agregado a xterm en 2007, parche # 224 ):
y puede estar relacionado con este parche: Vim: agregar compatibilidad para el modo de informe de enfoque (DECSET / DECRST 1004) funciona en terminales compatibles con xterm , lo que iguala todo el comportamiento de las funciones del mouse "xterm" en una configuración:
Entonces ... podría deshabilitar eso diciéndole a vim que su terminal no usa el protocolo de mouse xterm. El parche citado le dice a vim que active la función FocusIn / FocusOut (que normalmente debería estar desactivada), y si hay algún defecto en su lógica, puede dejar la función habilitada después de salir de vim.
Si bien vim es la causa más probable de que el modo esté habilitado, es posible que algún otro programa (o script) lo active. Como se sugiere en otra respuesta, puede reducir eso recogiendo la salida a su terminal usando el
script
programa (produciendo untypescript
archivo). Análisis que puede llevar mucho tiempo (y dado que este sitio no parece admitir archivos adjuntos , no parece adecuado solicitar una discusión detallada). Generalmente usounmap
para transformar archivos de mecanografía en forma legible para este propósito.fuente
\e\[O
y\e\[I
resuelva este problema en Vim, pero no en otras aplicaciones como cat o inrails server
(¿quizás programas que usan readline?).Para resolver este problema, debe saber qué programa habilita el modo de informe de enfoque. Debe tomar un registro registrado por el comando script (1) .
fuente
Encontré esta pregunta tratando de resolver mi terminal que muestra "^ @" cuando se perdió el foco.
Leyendo las respuestas, intenté ir a las preferencias de iTerm2 -> Perfiles -> "Predeterminado" -> Sesión y desmarcar: "Cuando esté inactivo, envíe el código ASCII 0 cada 60 segundos"
Problema resuelto, espero que ayude a alguien
fuente