Est-il possible de configurer ctrl-w (mot supprimé)?

40

Normalement, Ctrl+ Wsupprime le dernier espace blanc.

Est-il possible de le configurer pour utiliser des caractères supplémentaires, tels que /?

Edit: Pour être plus clair: je ne veux pas configurer la clé pour cela, je veux que la suppression s’arrête /également.

Exemple:

vim /foo/bar^W
vim /foo/
SkaveRat
la source

Réponses:

29

Ce qui a fonctionné pour moi a été d’ajouter les lignes suivantes à mon .bashrc

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

Vous avez besoin de la ligne undef sinon bash ignore votre nouvelle liaison pour C-w

mkm
la source
3
Il est à noter que stty werase undefcela vous empêchera d'utiliser Cw dans n'importe quel programme (bind vous permettra de l'utiliser en
lecture seule
24

Vous devriez pouvoir utiliser les touches Echap, puis Retour arrière pour supprimer les mots délimités par des barres obliques.

Vous pouvez changer cela en le mettant en vous .bashrc:

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

Maintenant, Ctrl+f fais ce que tu veux.

Pas maintenant
la source
1
merci, c'est la commande qui fonctionne. y a-t-il un moyen d'écraser la commande de Cw? Si je le change en C-w:..., le comportement par défaut de suppression dans l'espace suivant est toujours activé. Sur une touche différente (comme F) si fonctionne correctement.
SkaveRat
Je ne pense pas que ctrl-w soit géré par le shell seul. Il peut également être géré par le terminal. Quel est votre réglage de tty montré par stty -a? avez-vous control-w comme caractère par défaut pour werase? Si vous supprimez ce paramètre de tty, avec comman stty werase undef, bash fonctionne-t-il comme prévu?
eppesuig
23

Pour ce problème spécifique, vous pouvez également utiliser:

Alt + Backspace

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

Bonne référence: aventures avec le mot bash effacer

Fedorqui
la source
2
Impressionnant! La plupart des autres réponses suggèrent une nouvelle liaison Ctrl+wou une combinaison de touches Ctrl + b unix-filename-rubout, mais c'est tellement mieux qu'il existe une liaison intégrée: M-backspace (Alt + retour arrière ou Esc arrière)
Colin D Bennett
N'a pas travaillé pour moi
ethanjyx
@ethanjyx oh. Je travaille sur GNU bash. Êtes-vous aussi dans cette saveur?
fedorqui
7

Avec bash, vous pouvez obtenir l’effet souhaité en insérant ce qui suit dans votre fichier ~ / .bashrc:

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

Appuyez sur CTRL+Vet la combinaison de touches pour voir à quoi ça ressemble pour votre émulateur de terminal. Par exemple, ils CTRL+bksppeuvent être interprétés différemment sur différents terminaux, par exemple ^Hou ^?. Le ^personnage est le même que CTRL.


la source
Je pense que je n'ai pas été assez précis avec ma question. Je voulais avoir /comme caractère stop supplémentaire, pas un moyen de lier la commande delete-word sur une autre clé. J'ai modifié ma question
SkaveRat
En utilisant backward-kill-word lié à \ Cw, il effacera en arrière la dernière barre oblique donnée, s'il est présent dans un mot, et effacera les mots délimités par des espaces. Ce n'est pas ce que tu voulais?
Mon système utilise ^F- mais l'utilisation "\^F"dans le script ci-dessus ne fonctionne pas
SkaveRat
1
Le Ctrlpersonnage est écrit \Cdans le script et non \^.