Ligeiro atraso ao alternar modos no vim usando tmux ou screen


68

Mudar para e do modo de inserção no Vim não é mais instantâneo, pois eu uso o tmux. Depois de pressionar Escno modo de inserção, leva um tempo notável para realmente sair do modo de inserção. Após pressionar Esce qualquer outra tecla depois, o interruptor é imediato, e o comando para a tecla pressionada após Escé executado. Alguma idéia do que pode causar isso?

A configuração do Vim não é o problema, pois o atraso não ocorre quando executo o Vim fora do tmux, portanto isso provavelmente está relacionado ao tmux de alguma forma. Eu uso o gnome-terminal btw.

Também vale a pena notar, parece que não posso definir ligações de teclas no tmux Esc, pois meu plano era vincular Esc- se a:

bind Escape send-keys ^[

Infelizmente, parece que tudo vincula o Esctmux não funciona. O mesmo problema ocorre na tela também.

Respostas:


122

Após vasculhar as páginas do manual, o tmux tem uma opção para isso. O seguinte em ~/.tmux.confcorrige o problema de atraso:

 set -sg escape-time 0

Você precisa reiniciar o servidor tmux ou recarregar sua configuração para que isso entre em vigor. Para fazer isso, emita a source-file ~/.tmux.confpartir do prompt do tmux.


2
Onde você achou isso? Não encontro tempo de escape em nenhum lugar man tmuxe o comando não funciona para mim.
— precisa saber é o seguinte

Suspeito que esteja disponível apenas na versão de desenvolvimento. Você pode obtê-lo aqui: github.com/ThomasAdam/tmux
— Ton van den Heuvel

5
Eu tive que usar o tmux kill-server antes que essa configuração funcionasse para mim. Obrigado!
— Sam

11
Isso me faz desejar poder lhe dar 10 votos positivos. Encontrei isso depois de uma hora de batalhas no vim. Obrigado!
— malvim

11
@ MichaelBrown, eu também, e ainda acertei esse problema. Na verdade, não deve importar, porque o mesmo código de chave é enviado ao emulador de terminal, independentemente de você pressionar a tecla Escape ou ^ [.
— Ton van den Heuvel

4

Eu tive um problema diferente, mas semelhante, que estava tentando resolver quando encontrei esta página; portanto, postarei aqui, caso seja útil para qualquer pessoa que esteja em busca dessa resposta e a encontre da mesma maneira.

Problema: o modo vi no bash tem um atraso ao alternar do modo de inserção para o modo de comando

Solução: no seu ~/.inputrcarquivo, adicione set keyseq-timeout nonde nexiste algum valor baixo maior que 0. o npadrão é 500ms, que é o que causa o atraso. Veja a documentação aqui .

Além disso, se você quiser saber em qual modo está, verifique o garfo de Dylan Cali .


isso é muito útil, eu o configurei 0.01e agora é muito mais rápido. obrigado!

Também pode ser anexado /etc/inputrcpara disponibilizá-lo a todos os usuários.

1

Parece que você está usando um mapeamento que começa com ESC. Quando você pressiona ESC, o vim precisa aguardar para ver se a próxima chave é a que está no mapeamento. Caso contrário, pode continuar imediatamente.

A configuração do vim pode ser dependente do terminal, portanto, o fato de não ocorrer fora do tmux não significa muito. O Vim pode consultar a $TERMvariável de ambiente e escolher uma configuração diferente, dependendo do seu valor.

Como o gnome-terminal usa o AFAIK, xtermcomo o valor da $TERMvariável, e o tmux screen, eu procuraria em todos os seus arquivos de configuração do vim as configurações usadas apenas, se a $TERMvariável for igual a screen. Meu palpite é que algum arquivo de configuração do vim em seu sistema define mapeamentos para o manuseio de teclas de seta (aquelas iniciadas com o ESCcaractere) quando o terminal estiver screen.

Você pode testá-lo alterando temporariamente a $TERMvariável no tmux antes de iniciar o vim. Se o seu shell for bash, chame o vim como

TERM=xterm vim

no tmux e veja se o problema persiste. Você não pode usar isso como uma correção, no entanto, pois pode haver diferenças entre os recursos de terminal do tmux e do xterm, e você pode ter alguns problemas.


Algumas boas dicas aqui. Eu uso o bash, mas infelizmente TERM=xterm vimnão resolveu o problema. Vou ter que cavar um pouco mais fundo.
— Ton van den Heuvel

1

Como o título menciona Tela, eis a solução para corrigir o comportamento da tecla Escape no GNU Screen. (Retirado daqui .)

Adicionar, acrescentar

maptimeout 5

para o .screenrcarquivo de configuração.

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.