Pouca gente sabe, mas um boa parte dos programas de linha de commando no GNU/Linux são compilados com uma biblioteca unificada, que serve tanto para a edição de linhas de entrada, quanto para simplificar a API para os programadores. Essa biblioteca chama-se NCurses readline.
“OK, mas por que isso é importante?” deve ser a pergunta que está na cabeça do leitor nesse momento. Isso é importante porque a NCurses readline tem uma interface com o usuário bem simples, e muito prática. Quantas vezes você está na linha de comando e descobre que errou algo no meio do caminho e decide apagar a linha? O que você faz? Pressiona Backspace e fica segurando até a linha desaparecer? Ora, muito mais prático teclar Control-U. Esse atalho apaga a linha inteira muito mais rapidamente.
Bem, talvez apagar uma linha no prompt do shell não seja um exemplo de poder, mas o mesmo acontece com senhas… Você está digitando uma senha quando percebe que no meio do caminho errou algo… como o programa não mostra a senha sendo digitada, como você apaga ela e digita de novo aproveitando o mesmo prompt? Isso mesmo: Control-U!
Há uma série de outros atalhos poderosos relacionados a biblioteca NCurses readline, e, uma vez que você tenha decorado uns poucos, a agilidade na linha de comando e em programas relacionados acaba multiplicada. Esses atalhos são padronizados há tanto tempo que mesmo programas não compilados com a NCurses readline acabam implementando os mesmos!!! Pensando nisso, aqui vai uma referência rápida dos que mais utilizo:
- Control-U: Apaga os caracteres do ponto onde está o cursor até o início da linha.
- Control-K: Apaga os caracteres do ponto onde está o cursor até o fim da linha.
- Control-A: Move o cursor para o início da linha.
- Control-E: Move o cursor para o fim da linha.
- Control-B: Move o cursor um caractere para trás. Extremamente útil quando está nesses terminais que não têm setinhas ou que não as implementam com os códigos corretos.
- Control-F: Move o cursor um caractere para frente.
- Control-D: Deleta o caractere sob o cursor (igual a teclar Del em um sistema DOS).
- Control-H: Deleta o caractere anterior ao cursor (igual a teclar Backspace em um sistema DOS). Esse tenho usado muito ultimamente: minha tecla Backspace está com problemas…
- Control-J: Termina a janela (ou, no caso de uma linha, termina a linha). No caso de um terminal, é como dar um ENTER.
- Control-O: Insere uma nova linha na posição do cursor. Também, no caso de um terminal, é como dar um ENTER.
- Control-L: Faz um refresh na tela. Muito útil quando você está um Terminal gráfico e a saída do programa anterior te deixa com um prompt no meio de um monte de caracteres.
- Control-N: Move o cursor uma linha abaixo.
- Control-P: Move o cursor uma linha acima.
Existem outros atalhos, mas esses são de longe os mais úteis. Eu gosto muito da linha de comando, e costumo dizer que uso o X apenas como um multiplexador de terminais (na realidade, algumas vezes evito o X completamente e uso o GNU Screen – mas isso é outra história). Se você também gosta da linha de comando mas ainda não conhecia os atalhos, espero ter contribuido…
Para os novatos ou os que não apreciam a interface em linha de comando, deixo um link de um artigo interessante: The Command Line: The Best Newbie Interface?.
Uma última dica: Como eu disse antes, vários programas implementam esses atalhos. Para o problema da digitação da senha que referi acima, se você estiver no GDM, o Control-U vai funcionar igualzinho a linha de comando! ;-)
Update 2008-10-21 10:20:00: Como apontado pelo comentário do bart9h, é a biblioteca readline e não a NCurses que faz isso. Obrigado, bart9h.

