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/

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


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.


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


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.


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 \^.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.