O que está causando o comportamento
Quando você pressiona a seta esquerda, seu terminal está enviando a seguinte seqüência de escape:
ESC O D
Isso também pode ser anotado como ^[OD
, onde ^[
está a notação Ctrl-[
, que é outra maneira de anotar ou inserir o caractere ESC. (Experimente no modo de inserção!)
O Vim não está reconhecendo isso como uma sequência de escape e, portanto, está tratando essas teclas como se você as tivesse digitado:
- Esc: Saia do modo de inserção,
- O: Inicie uma nova linha acima do cursor e entre no modo de inserção,
- D: Digite um caractere 'D'.
Você pode confirmar que é isso que o seu terminal está enviando, entrando no modo de inserção e pressionando Ctrl-Vseguido pela Leftseta.
O que está acontecendo de errado
A sequência de escape pode estar atingindo o tempo limite
A única maneira pela qual o Vim pode distinguir a sequência de escape dos mesmos três caracteres digitados manualmente é pelo tempo que ocorre entre o recebimento de cada caractere. Portanto, é possível em terminais lentos ou sistemas muito ocupados que haja um atraso suficiente entre cada caractere que o Vim esteja decidindo que não é uma sequência de escape e apenas interpretando as teclas conforme descrito acima.
Isso é descrito :help vt100-cursor-keys
e mais adiante :help timeout
- a solução sugerida é definir um ttimeoutlen
tempo limite suficientemente grande , mas desabilitando completamente, definindo ambos notimeout
e nottimeout
também funcionaria.
No entanto, dada a sua configuração, é pouco provável que esse seja o problema.
O Vim não reconhece a sequência
É mais provável que o problema seja que o Vim não reconheça a sequência de escape enviada e a interprete como pressionamentos de tecla. Você pode verificar isso com o seguinte comando:
:set <left>?
Em uma configuração de trabalho com sua configuração de terminal atual, isso deve fornecer uma das seguintes saídas:
t_kl <Left> ^[O*D
t_kl <Left> ^[OD
Se você vir mais alguma coisa 1 , o Vim e o seu terminal não estão falando o mesmo idioma.
A maneira correta de corrigir isso seria corrigir a configuração do terminal para que o banco de dados terminfo relate as seqüências que são realmente enviadas quando você pressiona as teclas de seta, mas isso pode ser complicado. Uma correção levemente hacky é alterar o que o seu terminal envia para corresponder ao que o Vim está esperando. Eu deduzo dos seus comentários que você está usando o Mac Terminal.app padrão: Você pode alterar as seqüências de escape enviadas para cada pressionamento de tecla em Preferências → Perfis → Seu perfil → Teclado.
No entanto, a solução mais fácil é provavelmente informar diretamente ao Vim quais seqüências de escape esperar. Você pode fazer isso configurando suas opções de terminal assim:
set <up>=^[OA
set <down>=^[OB
set <right>=^[OC
set <left>=^[OD
Observe que o ^[
acima é um ESC
caractere literal . Você não pode simplesmente digitar ^seguido por [! A maneira mais fácil de inserir os mapeamentos é entrar, por exemplo,
set <left>=
e, ainda no modo de inserção, pressione Ctrl-Vseguido pela leftseta. Observe que você está configurando a sequência de escape diretamente para o que o Vim recebe quando você pressiona a tecla de seta ... enviando essa sequência!
1: Uma possibilidade provável é a sequência CSI :^[[D