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.

Ton van den Heuvel
fonte

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.

Ton van den Heuvel
fonte
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 .

Kvass
fonte
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.

Jan Hlavacek
fonte
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.

Twonky
fonte