Aqui está uma correção real. Adicione o seguinte a .tmux.conf
:
set -s escape-time 0
Minha configuração de terminal é gnome-terminal + tmux + zsh com ligações de vi.
Em aplicações como o vim ou mesmo no modo de edição vi da linha de comando do zsh, eu preciso pressionar com freqüência a tecla ESC , mas há um pequeno atraso antes que os efeitos dessa chave ocorram. Veja O GNU Screen torna a chave do Vim ESC mais lenta
Depois de alguma experimentação, descobri que apertar a tecla ESC e imediatamente outra tecla (digamos b ) tem o mesmo efeito que pressionar Alt + b . Eu não sei porque este é o caso (provavelmente por razões de legado quando não havia Alt ? Eu não sei). De qualquer forma, tenho duas teclas Alt e não quero este comportamento com a minha chave ESC . Eu tentei com C + [ e é o mesmo problema com isso também.
Não sei quem é responsável por isso, gnome-terminal ou tmux ou pelo próprio sistema operacional (Ubuntu Natty). Qualquer ideia sobre como lidar com isso seria ótima.
Atualização : eu verifiquei sem o tmux em um terminal diferente (LXTerminal) e o atraso também está presente lá.
O atraso é causado pelas rotinas de entrada que podem ter que decidir se uma tecla de função foi pressionada ou não. Para isso, a rotina de entrada inicia um temporizador sempre que ele lê um caractere ESC. Caracteres que são lidos a partir da entrada antes que o tempo se esgote (digamos um décimo de segundo) sejam então interpretados como uma sequência ESC de uma tecla de função e essa seqüência ESC será comparada com sequências conhecidas de secções ESC do terminfo ou do base de dados termcap (depende de quais rotinas de baixo nível são usadas).
É claro que isso é irritante para aplicativos em que o ESC é usado sozinho, mas não sei de nenhuma solução alternativa para isso.
Em relação à sua pergunta com o comportamento de ESC a = Meta a :
As teclas meta não estavam disponíveis em todos os teclados. Como solução alternativa, freqüentemente era permitido usar a tecla ESC para ser pressionada antes da outra tecla.
Embora isso possa não corrigir diretamente seu problema, descobri que posso usar <Ctrl> c
para sair do modo de inserção. Isso também pode ser usado para sair da rolagem da tela do tmux (que pode ser chamada usando <leader> PgUP
)
Tags gnome-terminal vim zsh keyboard tmux
%code% parece não gostar de parênteses (usado em matemática para especificar a prioridade do operador):
%pre%Como expressar a prioridade do operador no bash?
Outra maneira de usar %code% bash builtin:
%pre%Nota
Como @ Stéphane Chazelas apontou , em %code% você deve usar %code% para fazer aritmética %code% ou %code% para legibilidade.
Para portabilidade, use %code% como @Bernhard answer .
Você pode usar a expansão aritmética.
%pre%Na minha opinião pessoal, isso parece um pouco melhor do que usar %code% .
De %code%
%bl0ck_qu0te%Não há razão para usar %code% para aritmética em shells modernos.
POSIX define o operador de expansão %code% . Então você pode usar isso em todos os shells compatíveis com POSIX (o %code% de todos os Unix-gostos modernos, traço, bash, yash, mksh, zsh, fino, ksh ...).
%pre%%code% também introduziu um %code% builtin que é transmitido com o mesmo tipo de expressão aritmética, não expande para algo, mas retorna um status de saída com base em se a expressão é resolvida como 0 ou não, como em %code% :
%pre%No entanto, como a cotação a torna inábil e não muito legível (não na mesma proporção que %code% , é claro), %code% também introduziu uma forma alternativa %code% :
%pre%, que é muito mais legível e deve ser usado em seu lugar.
%code% e %code% só estão disponíveis em %code% , %code% e %code% . A sintaxe %code% deve ser preferida se a portabilidade para outros shells for necessária, %code% é necessário apenas para shells pré-POSIX semelhantes a Bourne (normalmente o shell Bourne ou versões antigas do shell Almquist).
Na frente não-Bourne, existem alguns shells com operador aritmético integrado:
%code% / %code% (na verdade, o primeiro shell Unix com avaliação aritmética incorporada):
%pre%%code% (com base em %code% )
%pre%como uma nota de história, a versão original do shell Almquist, como publicado no usenet em 1989, tinha um %code% construído (na verdade, mesclado com %code% ), mas foi removido posteriormente.
%code% é um comando externo, não é uma sintaxe especial do shell. Portanto, se você quiser que %code% veja os caracteres especiais do shell, será necessário protegê-los da análise do shell, citando-os. Além disso, %code% precisa que cada número e operador sejam passados como um parâmetro separado. Assim:
%pre%A menos que você esteja trabalhando em um antigo sistema unix dos anos 1970 ou 1980, há muito poucas razões para usar %code% . Antigamente, os shells não tinham uma maneira interna de realizar aritmética, e você precisava chamar o utilitário %code% . Todos os shells POSIX possuem aritmética interna por meio da sintaxe expansão aritmética .
%pre%A construção %code% se expande para o resultado da expressão aritmética (escrita em decimal). Bash, como a maioria das shells, suporta apenas módulos aritméticos inteiros 2 64 (ou módulo 2 32 para versões mais antigas do bash e algumas outras shells em máquinas de 32 bits). p>
O Bash oferece uma sintaxe de conveniência adicional quando você deseja realizar atribuições ou para testar se uma expressão é 0, mas não se importa com o resultado. Esta construção também existe em ksh e zsh, mas não em sh simples.
%pre%Além da aritmética inteira, %code% oferece algumas funções de manipulação de string. Eles também são incluídos pelos recursos de shells POSIX, exceto por um: %code% testa se a string corresponde ao regexp especificado. Um shell POSIX não pode fazer isso sem ferramentas externas, mas o bash pode com %code% (com um sintaxe diferente de regexp - %code% é uma ferramenta clássica e usa BRE, bash usa ERE).
A menos que você esteja mantendo scripts executados em sistemas de 20 anos, não é necessário saber que %code% já existiu. Use aritmética de shell.
Use parênteses com aspas:
%pre%As citações evitam que o bash interprete os parênteses como a sintaxe bash.
Se você tiver bc ...
%pre%