Uso pretendido de ctrl + T no bash?

47

Notei que o bash tem um atalho para ctrl+, Tque troca os dois últimos caracteres antes do cursor.

Eu estou querendo saber por que os engenheiros decidiram incluir isso.

  • Foi herdado de uma convenção anterior?
  • Ou existe um objetivo prático para o qual é comumente usado?
Philip Kirkbride
fonte
13
Não é uma resposta, mas não é bash, como tal, mas readline(que o bash usa para entrada no prompt). Seu bash está usando emacscombinações de teclas; você pode mudar para vi-key bindings se for um editor do Wars Wars;) sanctum.geek.nz/arabesque/vi-mode-in-bash Há algumas dicas readlineaqui: readline.kablamo.org/emacs .html e readline.kablamo.org/vi.html .
John N
13
Historicamente, a linha de comando Emacs-style editar recursos foram inicialmente desenvolvidos em Bash, e, em seguida, se transformou em uma biblioteca separada - mas isso aconteceu antes do primeiro lançamento em 1989. A primeira entrada no asreadline ChangeLog dicas neste. Então, originalmente, o atalho foi tratado no próprio Bash, embora brevemente, antes de ser puxado para dentro readline- mas o atalho veio para o Bash do Emacs (não sei se foi inventado no Emacs ou de outro lugar).
Stephen Kitt

Respostas:

63

É muito útil corrigir rapidamente erros de digitação:

sl

torna-se

ls

com um único CtrlT.

Você também pode AltTtrocar palavras ( por exemplo, ao alternar entre servicee systemctl...).

Historicamente falando, o CtrlTrecurso chegou ao Bash do Emacs com toda a probabilidade. Provavelmente foi copiado para o Emacs de algum outro editor; estava presente no editor E de Stanford (veja a página E essencial 13) em 1980, e E teve um forte impacto em Richard Stallman (conforme descrito em Free e em Freedom ). Foi implementado em versões muito antigas do Bash, antes de seu primeiro lançamento em 1989, quando foi retirado da readlinebiblioteca onde vive hoje (a primeira entrada nas readline ChangeLogdicas sobre isso).

Stephen Kitt
fonte
2
Palavras trocando era algo novo e muito útil
Mongrel
Fornecer um argumento numérico para Alt + T transpõe a palavra no (ou antes) no cursor com a n- ésima palavra antes dessa palavra. por exemplo: Alt + 2 Alt + T será modificado word1 word2 word3para word3 word2 word1se executado em word3.
CRW
@crw que seria legal, mas alt + T não troca palavras no meu terminal. Acabei de abrir o item de menu 'definir título'.
Philip Kirkbride
@PhilipKirkbride isso é uma vergonha, seu emulador de terminal é privá-lo de um atalho muito útil ...
Stephen Kitt
@PhilipKirkbride deve haver uma opção do emulador de terminal para desativar as teclas de acesso ao menu
Joril 29/01
15

Essa combinação de teclas, uma ligação herdada do emacseditor, faz com que os dois últimos caracteres digitados sejam trocados no final da linha, usados ​​no meio de uma linha, trocando o caractere à esquerda do cursor e o caractere abaixo do cursor.

Pode parecer inútil ter uma ligação para um recurso tão raramente usado que pode ser facilmente alcançado com mais algumas teclas. Temporizadores antigos, como eu o uso com bastante frequência, costumavam economizar algum tempo de transmissão nos dias de modems de 300 bauds, no final dos anos 70, principalmente no meio de longas filas.

Um comando semelhante e mais útil, vinculado a Alt+ T, transpõe as palavras à esquerda e à direita do cursor.

Tfoi escolhido porque é a letra inicial da transposição . Outras ligações com origem semelhante incluem:

  • Ctrl+ B, para trás , move o cursor para a esquerda uma posição,
    • Alt+ Bmove o cursor para a esquerda uma palavra,
  • Ctrl+ F, para frente , move o cursor para a direita uma posição,
    • Alt+ Fmove o cursor para a direita uma palavra,
  • Ctrl+ A, para Anfang ou ante , move o cursor para o início da linha,
  • Ctrl+ E, para final , move o cursor para o final da linha,
  • Ctrl+ N, para a próxima , recupera a próxima linha,
  • Ctrl+ P, para anterior , recupera a próxima linha,
  • Ctrl+ D, para excluir , exclui o caractere sob o cursor,
    • Alt+ Dexclui a palavra sob o cursor,
  • Ctrl+ K, para matar , corta o fim da linha,
  • Ctrl+ Y, para puxar , cola o conteúdo da área de transferência,

Essas ligações, implementadas no pacote GNU readline, estão disponíveis em todos os programas que a utilizam para entrada do usuário, como bash , mas também gdb , bc , ...

Algumas delas também estão disponíveis em outros ambientes: a linha de entrada da URL do Firefox, os campos de entrada de texto na interface gráfica do OS / X e muitos gerenciadores de janelas baseados em X.

Os usuários do vim podem selecionar as ligações correspondentes por meio de uma variável de ambiente.

chqrlie
fonte
Sim, é ótimo para pessoas como nós que às vezes esquecem que estamos digitando em um terminal e não no Emacs; Ainda fico impressionado ao usar os widgets de área de texto do Firefox (como este agora), que estão sem essas ligações importantes. :-(
Toby Speight
Existe uma maneira de parear as versões de caracteres e palavras dos comandos relacionados em sua descrição? Isso realmente ajuda a memória quando você reconhecer que os Alte Ctrlversões desses teclas digitadas estão relacionados de uma forma consistente.
quer
O @TobySpeight GTK + suporta um tema alternativo de combinação de teclas no estilo Emacs, para que você possa usar algumas dessas combinações de teclas no Firefox. C-tno entanto, parece não fazer nada. wiki.archlinux.org/index.php/GTK%2B#Emacs_keybindings
Candy Gumdrop
@TobySpeight você já experimentou It's All Text! ? Permite editar o conteúdo das áreas de texto no editor de sua escolha.
Stephen Kitt
Obrigado @ Stephen - eu já ouvi falar, mas ainda não tentei. Vou seguir ...
Toby Speight
10

É muito útil para corrigir erros simples, mas você pode ter veias acidentalmente transpostas.

(Tendo RSI grave nos dois pulsos, acabo usando muito isso, pessoalmente ...)

fofo
fonte
2
Meus olhos estão sangrando
Básico
4

Uma correção muito rápida de erros de digitação. efetua o bloco corretor imediato 2 antes do cursor.

Se você digitou ls-e deseja um espaço entre ls& hífen, pode usar Ctrl+T

Isso funciona se você tem um espaço após hífen e, em seguida, fazer Ctrl+T

Mongrel
fonte