Comando Limpar do terminal no OS X

24

Digamos que digitei um comando no terminal 'mv * .jpg .. \ photos' e, enquanto digito, percebo que não quero mais executar esse comando. Quero apenas excluir a declaração inteira. Não quero limpar a tela inteira ou excluir nenhum histórico do bash, apenas quero abortar a linha atual e apagá-la.

Existe um atalho de teclado ou eu tenho que realmente excluir cada caractere?

Paul Alexander
fonte

Respostas:

36

Supondo que você esteja no bash, use Ctrl+ U.

John T
fonte
Obrigado! isso foi feito. Existe uma lista de formatos de atalhos de teclado documentados em algum lugar?
Paul Alexander
2
Isso funcionou para mim no zshell também.
LandonSchropp
1
Isso só funciona se o cursor estiver no final da linha. Para as situações em que o cursor está no início você precisa usar CTRL-K
Jarrod Nettles
Como você causa isso em um script?
Jonny
7

Muitos programas que esperam que você digite uma linha de comando e, em seguida, execute essa linha, incluindo o bash, usam Ctrl+ Cpara significar "Interromper a tarefa atual e voltar ao prompt principal".

Alguns programas, incluindo o bash, usam Ctrl+ U( comando Limpar do terminal no OS X ) para significar "apagar o início da linha, até o cursor" (ou "apagar a linha inteira").

No bash, as diferenças observáveis ​​entre Ctrl+ Ce Ctrl+ Uincluem:

  • Você pode desfazer Ctrl+ U, mas não Ctrl+ C.
  • Ctrl+ Umantém a parte da linha após o cursor, se houver.
  • Ctrl+ Uapaga o texto afetado da tela; Ctrl+ Cmostra um novo prompt abaixo da linha atual.

Às vezes, você deseja parar de digitar um comando, mas inseri-lo no histórico do shell para executar mais tarde. Um truque útil é colocar um #no início da linha e executá-la: como a linha agora é um comentário, ela não fará nada. No bash, há um atalho de tecla única: Alt+ #.

Gilles 'SO- parar de ser mau'
fonte
2

Há uma readlinefunção que provavelmente não está vinculada a um pressionamento de tecla chamado kill-whole-lineque mata a linha inteira, em vez de matar apenas a parte antes do cursor ( unix-line-discardque é um pouco impróprio e está vinculado a Ctrl- u).

Você pode vincular isso a qualquer pressionamento de tecla disponível. Eu gosto ShiftAlt- Ujá que é uma função relacionada. Esse pressionamento de tecla pode estar vinculado, o do-lowercase-versionque significa que ele faz o que a versão não deslocada faz (neste caso upcase-word). Como realmente não precisamos de duas chaves para fazer isso, vamos usar essa.

Você pode experimentá-lo na linha de comando, criando a ligação desta maneira:

bind '"\eU":kill-whole-line'

ou torne-o persistente, colocando esta linha no seu ~/.inputrcarquivo:

"\eU":kill-whole-line

Para desfazer uma Ctrl- uou ShiftAlt- U(ou qualquer operação que possa ser desfeita), pressione Ctrl- Shift- _(sublinhado) ou Ctrl- x Ctrl- u(duas teclas). Ou você pode colar (puxar) o que matou pressionando Ctrl- o yque pode ser repetido se você desejar várias cópias desse texto.

A propósito, se você deseja eliminar o texto do cursor até o final da linha, pressione Ctrl- k. Portanto, em vez de fazer a ligação descrita acima, você pode eliminar uma linha inteira pressionando Ctrl- u Ctrl- k. Somente a parte eliminada pelo segundo pressionamento de tecla será salva no buffer de interrupção, mas você ainda poderá desfazer duas vezes para recuperar os dois.

Pausado até novo aviso.
fonte