Eu não tenho um Mac à mão para testar essa resposta, mas de vez em quando encontro esse problema no XTerm no Linux e (supondo que o iTerm2 respeita os mesmos códigos de controle) você pode achar a correção abaixo útil.
Execute o seguinte comando shell dentro do terminal onde você está vendo o problema:
printf "\e[?1004l"
(Observe que o último caractere tem um 'ell' minúsculo.)
Esta sequência de controle ANSI é como a listada na resposta de Thomas Dickey, mas desativa o recurso (em vez de ativar). Ele deve resolver seu problema em todos os aplicativos, não apenas no Vim, impedindo que os caracteres ocorram.
No Linux, posso demonstrar essa sequência de controle trabalhando com as seguintes etapas:
- Execute
xterm
e ative o recurso executando printf "\e[?1004h"
.
- Execute
xeyes
ou algum outro aplicativo GUI desse mesmo XTerm . (Por algum motivo, esse efeito não acontece para mim até que o XTerm em questão inicie um aplicativo. Alguém sabe por quê?)
- Repetidamente mude o foco para dentro e para fora do XTerm original (por exemplo, clicando no Windows) e veja
^[[O
e ^[[I
sendo "digitado" no XTerm original.
- Agora feche Xeyes, retorne ao XTerm original e execute
printf "\e[?1004l"
(para desativar o recurso, conforme descrito na correção acima).
- Repita as etapas " executar
xeyes
, alternar o foco " acima, mas desta vez não há caracteres sendo digitados no terminal.
Pessoalmente, só vejo esse problema se inadvertidamente descartei a saída binária no terminal, mas se você a encontrar com mais frequência, talvez queira adicionar esse printf
ao script de inicialização interativo do seu shell (por exemplo, ~/.bashrc
). Não parece haver nenhum dano (pelo menos no XTerm) em enviar o código de controle se o recurso já estiver desabilitado, por isso deve ser seguro mesmo que você veja esse problema apenas às vezes.
Se você está preocupado com o seu shell sempre gerando essa saída, talvez porque às vezes você o use em locais que não lidam bem com esses códigos de controle, ou se o problema às vezes é acionado depois que o shell é inicializado, então você pode prefira configurar um alias (por exemplo, com alias focusfix='printf "\e[?1004l"'
) para facilitar a execução manual.