É 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/
SkaveRat
fonte

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

mkm
fonte
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.

Agora não
fonte
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

fedorqui
fonte
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.


fonte
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 \^.