Quando pressiono as teclas de seta no modo de inserção, recebo caracteres em vez de navegação:
Eu gostaria de poder usar as setas do teclado para navegar.
Coisas que eu tentei
Eu tenho set nocompatible
no meu ~/.vimrc
( vimrc pastebin ), estou usando patógeno e aqui está o meu ~/.vim/bundle
diretório:
YouCompleteMe/
emmet-vim/
nerdtree/
node/
vim-airline/
vim-markdown/
O problema só começou recentemente, não consigo lembrar a causa.
Alguns recomendam :set term=builtin_ansi
, e isso resolve o problema, mas remove todas as minhas cores.
$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 29 2016 12:51:13)
MacOS X (unix) version
Included patches: 1-2290
Compiled by Homebrew
Huge version without GUI. Features included (+) or not (-):
...
Consulte http://pastebin.com/5z1HbpqW para obter toda a saída.
$ echo $TERM
xterm-256color
e no vim:
:set compatible?
nocompatible
:set term?
term=xterm-256color
insert-mode
theonlygusti
fonte
fonte
Respostas:
O que está causando o comportamento
Quando você pressiona a seta esquerda, seu terminal está enviando a seguinte seqüência de escape:
Isso também pode ser anotado como
^[OD
, onde^[
está a notaçãoCtrl-[
, 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:
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 umttimeoutlen
tempo limite suficientemente grande , mas desabilitando completamente, definindo ambosnotimeout
enottimeout
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:
Em uma configuração de trabalho com sua configuração de terminal atual, isso deve fornecer uma das seguintes saídas:
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:
Observe que o
^[
acima é umESC
caractere literal . Você não pode simplesmente digitar ^seguido por [! A maneira mais fácil de inserir os mapeamentos é entrar, por exemplo,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
fonte
Essa resposta resolveu exatamente o mesmo problema para mim.
Em
~/.vimrc
adicione a seguinte linha:Após reiniciar o vim, o problema desapareceu
fonte
:h 'nocompatible'
default on, off when a vimrc or gvimrc file is found
.vimrc
set nocompatible
A atualização do
vim
pacote corrigiu o problema de setas quebradas para mim.Se você estiver no Ubuntu, execute
apt upgrade vim
. Curiosamente,apt install vim
também ajuda. E ainda mais interessante, após avim
versão de atualização permanece a mesma:Mas isso ajuda.
fonte
apt upgrade
resolver o problema.