É possível configurar ctrl-w (excluir palavra)?


40

Normalmente, Ctrl+ Wexclui de volta ao último espaço em branco.

É possível configurá-lo para usar caracteres adicionais, como /?

Editar: para ser mais claro: não quero configurar a chave, quero que a exclusão pare /também.

Exemplo:

vim /foo/bar^W
vim /foo/

Respostas:


29

O que funcionou para mim foi adicionar as seguintes linhas ao meu .bashrc

stty werase undef
bind '\C-w:unix-filename-rubout'

Você precisa da linha undef, caso contrário o bash ignora sua nova ligação para C-w


3
Note-se que stty werase undefvocê vai parar de usar Cw em qualquer programa (ligamento permitirá que você usar em readline)
0fnt

24

Você poderá usar Esc e retroceder para excluir palavras delimitadas por barras.

Você pode mudar isso colocando isso em você .bashrc:

bind '\C-f:unix-filename-rubout'

Agora use Ctrl+f para fazer o que quiser.


11
obrigado, esse é o comando que funciona. existe uma maneira de substituir o comando do Cw? Se eu mudar para C-w:..., o comportamento padrão de excluir para o próximo espaço ainda entra em ação. Em uma tecla diferente (como F), se funciona bem.
precisa saber é o seguinte

Não acho que o ctrl-w seja gerenciado apenas pelo shell. Também pode ser gerenciado pelo tty. Quais são as suas configurações de tty exibidas stty -a? você tem control-w como caractere padrão para werase? Se você remover essa configuração do tty, com comman stty werase undef, o bash funcionará conforme o esperado?
eppesuig 14/12/12

23

Para esse problema específico, você também pode usar:

Alt + Backspace

$ cd /home/me/test/a_dir/    # Alt + Backspace
$ cd /home/me/test/          # Alt + Backspace
$ cd /home/me/               # ...

Boa referência: aventuras com a palavra bash apagar


2
Impressionante! A maioria das outras respostas sugerem religação Ctrl+wou Ctrl + b ou algo unix-filename-rubout, mas é muito melhor do que há um built-in de ligação: M-backspace (Alt + Backspace ou Esc backspace)
Colin D Bennett

Não funcionou para mim
ethanjyx

@ethanjyx oh. Estou trabalhando no GNU bash. Você também está nesse sabor?
Fedorqui 22/08/16

7

Com o bash, você pode obter o efeito desejado, colocando o seguinte no seu arquivo ~ / .bashrc:

bind '"\C-w":backward-kill-word'

Aperte CTRL+Ve sua combinação de teclas para ver como é o seu emulador de terminal. Por exemplo, CTRL+bksppode ser interpretado diferente em diferentes terminais, por exemplo, ^Hou ^?. O ^personagem é o mesmo que CTRL.


Eu acho que não fui suficientemente específico com a minha pergunta. Eu queria ter /como caractere de parada adicional, não uma maneira de vincular o comando delete-word-command em uma outra chave. Eu editei minha pergunta
SkaveRat

Usando a palavra backward-kill-vinculado a \ Cw, ele será apagado para trás até a última barra fornecida se presente em uma palavra e apagará as palavras delimitadas pelo espaço em branco. Não é isso que você queria?

Meu usos do sistema ^F- mas usando "\^F"no script acima não funciona
SkaveRat

11
O Ctrlpersonagem está escrito \Cno script e não \^.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.