No bash, como limpar a entrada atual?

172

Suponha que no bash você comece a escrever um comando como:

$ rm -rf /foo/bar/really/long/path/here

e depois perceba que você não deseja executar isso, afinal. Existe uma maneira de limpar a entrada com um ou dois pressionamentos de tecla?

O que venho fazendo ultimamente é preceder o eco e colocar a entrada entre aspas (Ctrl + A echo ",, Ctrl + E, ") e pressionar Enter. Existe uma maneira mais rápida?

user85509
fonte
Ou, suponha que você cole um comando e perceba que foi o one-liner errado. Backspace fica realmente velho depois de cerca de 20 caracteres!
bgStack15
<kbd> Ctrl </kbd> - <kbd> C </kbd>, se você quiser manter o histórico, consulte stackoverflow.com/a/9679852/6521116
Kris Roofe

Respostas:

286
  1. Pressione Ctrl- Upara excluir tudo antes do cursor. O comando excluído será armazenado em um buffer. Pressione Ctrl- Ypara colar o comando excluído.

    (Opcional: pressione Endou Ctrl- Epara pular para o final da entrada primeiro.)

  2. Como alternativa, pressione Ctrl- Cpara abortar o que você está digitando.

John Kugelman
fonte
28
Há uma ressalva: Ctrl-C vai matar a corrente rápida, iniciar um novo prompt, e definir o código de retorno para 1.
user716468
14
Não se acostume com isso, use Ctrl-U. O Ctrl-C não é tão ruim no bash, mas se você tiver, por exemplo, um prompt do cliente mysql, o Ctrl-C se desconectará do servidor, o que é realmente irritante.
Christian
1
Observe que em muitos sistemas, também existe um caractere de 'kill' terminal que mata a entrada até o momento. Muitas vezes, isso é controle-X. Você pode verificar com stty -a. E isso funcionará com qualquer programa que não esteja modificando ativamente os controles do terminal.
Jonathan Leffler
Ctrl-A seguido por um Ctrl-K também funciona. O texto 'morto' é armazenado e você pode colá-lo usando Ctrl-Y. De fato, esses pressionamentos de tecla vêm da biblioteca de linhas de leitura: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html .. para que você possa encontrá-los em qualquer ferramenta que a interface do usuário use a biblioteca (atualmente Emacs, bash, etc.). Você pode personalizar seu comportamento editando o arquivo .inputrc (consulte o link acima para obter mais detalhes).
Rkachach
93

Experimente Ctrl+ U. Isso limpa a linha de entrada.

gbarry
fonte
7
Obrigado, quase aceitei isso como resposta. Mas eu achei que limpa apenas a entrada antes do cursor. Em alguns casos, eu estou no meio da edição do comando, então prefiro me lembrar de Ctrl + C em vez de Ctrl + U como simplesmente "descartar a entrada atual".
user85509
21

Ctrl- U, Ctrl- Kfaz o truque também.

Ctrl- Uexclui tudo do início da linha até o cursor, Ctrl- Kexclui tudo do cursor até o final da linha. (Às vezes, é útil usar apenas um deles.)

rur
fonte
13

Existem duas opções para fazer isso

ctrl+ c- isso limpa toda a linha, não importa onde esteja o cursor.

ctrl+ u- limpa a linha da posição do cursor até o início.

vks
fonte
2
"Considere que o uso de Cu (ou Ce e Cu) armazenará o que você limpa em um buffer para que você possa colá-lo posteriormente usando Cy." Markisisme um comando único mais simples é ctrl + _. stackoverflow.com/questions/1056440/… respondido por john kug - apenas iniciado stackoverflow não tem pontos suficientes para adicionar comentário à sua resposta.
VKS
9

Um bom atalho está pressionando Esc#. Anexará um #caractere (tornando a linha um comentário) e pressione enter. Se você decidir que ainda precisa do comando, ainda o possui em seu histórico :)

knittl
fonte
3
Na maioria dos terminais, isso também é o mesmo que Alt + #, o que o torna um pressionamento de tecla (acorde).
Dolda2000
Uma solução simples, porém inteligente, e acho que essa é uma maneira mais amigável de cancelar um comando. Exatamente o que eu estava procurando :)
Cas
9

Pressionar Escmais Backspaceno bash limpará tudo até a posição do cursor.

(No Cygwin, isso limpará a entrada até a próxima palavra. As palavras são separadas por espaços, sublinhados, ...)

Nippey
fonte
3

Considere que usar Ctrl- U(ou Ctrl- Ee então Ctrl- U) armazenará o que você limpa em um buffer para que você possa colá-lo posteriormente usando Ctrl- Y.

goncalotomas
fonte
3

Se você estiver usando o Bash no modo vi (defina-o com set -o vi), pressione Escpara alternar para o modo normal do vi e digite ddpara excluir a linha atual!

Helmyano
fonte
3

Essa é uma expansão da resposta de knittl que armazena a linha no histórico do console prefixando com um hash. Superando desvantagens da área de transferência, como substituição acidental ou impossibilidade de visualizar a linha de corte para referência.

Linha de comentário e retornar novo prompt

Use um dos atalhos de tecla:

  • Esc,#
  • Alt+#

Um caractere de hash #será anexado à linha, transformando a linha inteira em um comentário. Ele também retornará um novo prompt, como se enter fosse pressionado pelo usuário. por exemplo

$ #rm -rf /foo/bar/really/long/path/here
$

Recuperar linha comentada

Para recuperar a linha antiga do histórico do console, use um dos seguintes atalhos:

  • Up
  • Ctrl+p

Repita o atalho da tecla até a linha desejada aparecer.


Remoção rápida de Hash Prefix

Para remover o #prefixo de hash da linha, existem algumas opções diferentes disponíveis:

Remova o primeiro caractere e execute imediatamente o comando:

  • Esc, 1, Esc,#
  • Alt+ -, Alt+#

Mova o cursor para iniciar e remover o primeiro caractere, sem executar o comando:

  • Home, Delete
  • Ctrl+ a, Ctrl+d
Cas
fonte
2

Para excluir a linha atual, tente:

Ctrl- X, Ctrl-U

Como alternativa, você pode usar:

Esc-D

que requer em ~ / .inputrc:

"\ed": kill-whole-line 

consulte: http://codesnippets.joyent.com/posts/show/1690

goncalotomas
fonte
Se você quiser apenas a tecla Escape para limpar toda a linha, adicione "\e\e": kill-whole-line(tem que ser pressionado duas vezes a tecla
Esc