Vim trava em fuga


3

Quando pressiono escou 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 esce 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 notimeoutdefinir.

Alguém sabe como escagir imediatamente? Existe alguma outra ligação de tecla que comece com escque 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 .vimrcou .vimpresente.


1
Pode ser porque o caractere de escape é parte de um introdutor sequência de comandos
RedGrittyBrick

Isso é provável. Existe uma maneira de dizer ao vim para ignorar essas seqüências de comando?
So8res

Não, porque muitas outras chaves não funcionarão.
Ignacio Vazquez-Abrams

A presença de <Esc> nessas seqüências de comandos não está causando esse problema. O Vim manipula o tempo de <Esc> nessas seqüências de maneira diferente do que ele manipula <Esc> no início dos mapeamentos. Veja ": help 'timeout'". Tente executar ": imap <Esc>" para ver se você tem algum mapeamento no modo de inserção começando com <Esc>.
garyjohn

No mappings found. Tenho certeza de que isso está relacionado, timeoutporque quando eu set notimeouto 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.)
So8res

Respostas:


3

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 timeoutlenconfiguração, cujo padrão é 1000 ms. No entanto, o vim permite que o tempo limite da sequência de escape seja configurado independentemente usando ttimeoutlen. (Defina também ttimeoutse você deseja que ele entre em vigor mesmo quando timeoutestiver 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=100para 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.


Para minha configuração do vim (eu compilei meu Vim da fonte), o valor ttimeoutlenfoi definido como -1, o que significa que ele usará os 1000ms timeoutlenpara tudo. Eu ajustei para (um bastante agressivo) 5ms e agora está finalmente livre de "escape pegajoso".
Steven Lu

1

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.


thx para a edição Journeyman!
haavee
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.