Quando pressiono esc
ou Ctrl-[
no modo de inserção vim, ele fica suspenso por meio segundo antes de sair do modo de inserção. Não é um travamento enraizado no desempenho, pois eu posso digitar qualquer caractere e o vim sairá do modo de inserção imediatamente, mas se eu pressionar esc
e nada mais, o vim aguardará meio segundo.
Acredito que isso ocorre porque há outra ligação de chave para esc e o vim está esperando para ver se eu acertei. Essa suspeita é reforçada pelo fato de que, quando eu set notimeout
, o vim espere indefinidamente que eu pressione outra tecla antes do modo de inserção existente. Isso é muito chato, como às vezes eu gosto de notimeout
definir.
Alguém sabe como esc
agir imediatamente? Existe alguma outra ligação de tecla que comece com esc
que eu possa desligar?
Pelo valor :map <Esc>
e :imap <Esc>
rendimento No mapping found
, e posso reproduzi-lo em uma nova instalação do vim sem .vimrc
ou .vim
presente.
No mappings found
. Tenho certeza de que isso está relacionado,timeout
porque quando euset notimeout
o problema é muito pior, mas parece não haver mapeamentos. (I pode reproduzi-lo com uma nova instalação / não Vimrc / não .vim também, FWIW.)Respostas:
Várias teclas, incluindo as setas, enviam seqüências de escape. Portanto, para que essas teclas funcionem, o vim precisa verificar caracteres adicionais após o ESC para determinar se uma dessas teclas foi pressionada. Por padrão, o tempo limite da sequência de escape e o tempo limite da sequência mapeada são ambos controlados pela
timeoutlen
configuração, cujo padrão é 1000 ms. No entanto, o vim permite que o tempo limite da sequência de escape seja configurado independentemente usandottimeoutlen
. (Defina tambémttimeout
se você deseja que ele entre em vigor mesmo quandotimeout
estiver desativado.) A menos que você queira digitar seqüências de escape manualmente ou se estiver usando um modem de 110 bauds, não deverá haver problemas para reduzir o tempo limite da sequência de escape. Por exemplo, use:set ttimeoutlen=100
para definir o tempo limite da sequência de escape para 100 ms. Você também pode desativar o reconhecimento de seqüências de escape no modo de inserção usando:set noesckeys
.fonte
ttimeoutlen
foi definido como -1, o que significa que ele usará os 1000mstimeoutlen
para tudo. Eu ajustei para (um bastante agressivo) 5ms e agora está finalmente livre de "escape pegajoso".Eu tive um problema semelhante em que o vim travava indefinidamente após pressionar o ESC. Na verdade, estava esperando por mais personagens - sua resposta estava me colocando nessa linha de pensamento!
Aconteceu que, de fato, era um problema de caráter ESC, mas diferente; Eu estava executando o vim dentro do tmux. Decidi verificar a variável de ambiente "TERM" e ela foi configurada para 'screen'. Alterar a configuração TERM para 'xterm-color' (ou o que for apropriado para o seu sistema) fez com que o problema de suspensão do vim desaparecesse.
Não tenho certeza de que é aplicável à sua situação, mas, considerando que pesquisar no Google para esse problema apareceu, a resposta da mark4o nos principais resultados de pesquisa decidiu adicionar essa situação potencial também para outras pessoas.
fonte