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.


1- quem faz isso nao eh o ncurses, e sim a biblioteca readline (veja o `man readline`)
2- o readline tem o modo emacs por default, e tambem o modo vi. essas teclas ai sao so modo emacs, mas quem esta acostumado com o vi pode usar o “set -o vi” para passar para esse modo, ou melhor: colocar “set editing-mode vi” no arquivo ~/.inputrc, que configura o readline, assim nao somente o shell, mas todos os programas que usam a readline, irao usar essa configuracao.
Já conhecia alguns, mas o Ctrl+D (pelo menos no Konsole) fecha o programa/terminal.
No mais, boas dicas :-)
Exatamente Renato, o CTRL + D no terminal VAZIO fecham o console ou faz logoff do usuário que está logado… MAS se houver qualquer caractere no terminal ele vai funcionar exatamente como colocado no texto.
Excelentes dicas… eu conhecia o CTRL+L e o CTRL+D mas o restante eu não tinha conhecimento. Valeu pela dica!!!
Muito bom cara… Legal mesmo !
É sempre bom saber estes truques…. Eu sempre gostei do terminal de comandos.. e é dificil deixar dele !
Um abraço….
Para mim, o mais importante e que não foi citado é o Control + R, para você buscar os últimos comando digitados.
Aperte Control + R, depois digite parte do comando que deseja buscar.
@Hugo Branquinho,
Pois eh… naum sei se o Control-R e o Control-S (ambos atalhos muito uteis) saum funcoes de biblioteca ou se saum funcoes do BASH e derivados… o sh naum os tem, por exemplo.
@bart9h,
Corrigido, obrigado pelo lembrete…
Tem uma referência mais completa da readline aqui: http://tiswww.case.edu/php/chet/readline/rluserman.html
Por favor, corriga seu texto, essa informação é completamente equivocada sobre a nCurses e maioria dos novatos que lêem isso pode não ler os comentários e ficar com o conhecimento errada sobre as bibliotecas nCurses e readline!
nCurses é uma biblioteca “gráfica” para modo texto, para desenhar, janelas, linhas, tabelas, cores. E nCurses é uma biblioteca opcional em muitos sistemas.
E isso não tem nada a ver com o controle de entrada de caracteres, que é feito pela biblioteca readline, que é usada por muitos programas, inclusive o bash. E esses atalhos vêm do emacs, e não o contrário. O conjunto de atalhos “emacs like” vêm configurados por padrão, mas vc pode mudar para o modo VI também ou até mesmo redefinir todos os atalhos a vontade com vc quiser.
E isso não tem nada a ver com nCurses, hoje praticamente toda distribuição usa o bash como shell e muitas não tem nCurses ou o nCurses é opcional e instalado como depedência quando algum programa precisa.
Você pode consultar a lista de atalhos padrão no man readline.
@Fabiano,
Como voceh pode ver, jah foi corrigido.
Ok. =)
A propósito, vc tinha citado o screen antes e dito que este também era compilado com nCurses. Essa informação estava correta, o screen sim usa a biblioteca nCurses mas não usa readline.
Minha contribuição a este excelente artigo: CTRL+R: Pesquisa nos comandos já digitados a expressão ALT+U: Torna em maiusculo as palavras a direita do cursor ALT+L: Torna em minusculo as palavras a direita do cursor ALT+C: Capitula o comando (deixa a primeira em maiusculo) CTRL+P: Exibe os comandos digitados (para tras) CTRL+N: Exibe os comandos digitados (para frente) CTRL+W: Deleta a palavra inteira antes do cursor CTRL+U: Na verdade recorta para a área de transferencia do console (se é que existe) CTRL+Y: Cola o ultimo comando ou string recortado com o CTRL+U
(Testados no bash)
Um abraço a todos.
Vida longa ao Software Livre
Outros atalhos que eu uso com frequência:
ALT+B: Move o cursor uma palavra para trás ALT+F: Move o cursos uma palavra para frente
Abraços!