A tecla ESC causa um pequeno atraso no terminal devido ao seu comportamento Alt +

60

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á.

    
por Shrikant Sharat 23.10.2011 / 13:02

3 respostas

100

Aqui está uma correção real. Adicione o seguinte a .tmux.conf :

set -s escape-time 0
    
por 29.11.2011 / 12:49
6

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.

    
por 23.10.2011 / 19:44
3

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 )

    
por 08.11.2011 / 18:25
Parêntese na expr aritmética: 3 * (2 + 1) ______ qstntxt ___

%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?

    
______ azszpr149832 ___

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 .

    
______ azszpr149830 ___

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%     
______ azszpr149916 ___

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.

______ azszpr149991 ___

%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.

    
______ azszpr149824 ___

Use parênteses com aspas:

%pre%

As citações evitam que o bash interprete os parênteses como a sintaxe bash.

    
______ azszpr349827 ___

Se você tiver bc ...

%pre%     
___ No linux, como deletar todos os arquivos EXCETO o padrão * .txt?