Bash: excluir a palavra antes do cursor

76

Considere a seguinte linha de comando do bash, onde ^ indica a localização do cursor:

svn commit -m very/long/path/to/some/file "[bug 123456] Fix the pixel issue"
              ^

Eu gostaria de confirmar um arquivo diferente com a mesma mensagem. Como posso excluir a palavra atual, da localização do cursor para o próximo espaço? Existe também um atalho para exclusão para trás, forma o cursor para o primeiro espaço para trás?

Atualização: ctrl + wapaga para trás, mas qual atalho apaga uma palavra para a frente?

Adam Matan
fonte
2
Ctrl ué uma opção para apagar de localização cursor para o início ...
noz sobre natty
23
Tente alt + d, isso pode ser útil, quando o modo de edição do emacs estiver definido.
@ Mik, como você ativa o modo emacs?
Adam Matan
O @AdamMatan o set -o emacshabilita, mas geralmente é o padrão; caso contrário, você pode inserir essa linha .bashrcou .bash_aliases, em seguida, obter o arquivo ou recarregar o terminal. No entanto, os atalhos com os quais você pode estar acostumado no modo vi não estarão disponíveis, embora outros como o ctrl + c estejam porque não são atalhos do Bash.

Respostas:

56

Eu respondi uma pergunta semelhante no unix.stackexchange.com :

O Bash possui comandos de linha de leitura que não são vinculados por padrão. Você pode encontrá-los em referência: http://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html#Bindable-Readline-Commands

O comando que você está procurando é chamado "shell-backward-kill-word". Você precisa selecionar o atalho primeiro. Vamos usar Crtl + p, já que é "comando anterior" - o mesmo que a seta para cima.

bind '"\C-p": shell-backward-kill-word'

A única diferença é que você deve usar o comando "shell-kill-word", pois deseja excluir o encaminhamento.

Há também um comando "kill-word" com Meta+ datalho (tente Esc+ dse você não tiver a tecla Meta). Ele excluirá apenas uma parte do caminho de uma vez.

Nykakin
fonte
31
Alt-d funciona para mim
ricab
8
Geralmente, no mundo dos teclados nos quais o Meta não existe, Alt = Meta.
Nate CK
No mundo em que você tem muitos teclados diferentes, um fato conveniente e bastante útil é que Esc como prefixo também atua como Meta.
Tripleee
1
Em resumo, adicione, por exemplo, isso ao seu arquivo $ HOME / .inputrc:, "\ew": shell-kill-word que fará Alt-w forward excluir uma palavra, assim como CTRL-w retrocede uma palavra (e, ao contrário de Alt-d, que encaminhará a exclusão, mas parará em a / ou - e outros caracteres)
user964970
7

Testou o esc+ de alt/ opt+ dno OSX Mavericks e eles trabalham lá também.

visyoual
fonte
12
Option + ddá-me ∂ no OSX #
Ivan Balashov 16/04
4
-1 OSX não é Ubuntu. Sinta-se livre para adicionar um comentário, mas isso não é uma resposta.
wjandrea
você tem que primeiro ativar a opção "utilizar como chave meta" checkbox nas preferências de terminal (perfis -> guia teclado -> checkbox)
nils Petersohn
control + dno mac Sierra
mfink
2
@IvanBalashov, se você estiver usando o iterm, defina sua chave let opt ​​como esc +. Em Perfis> chaves
tessie