Suppression de la ligne de lecture Bash jusqu'à la barre oblique précédente

15

En mode bash emacs, est-il possible de supprimer jusqu'au caractère barre oblique précédent? Par exemple, si j'ai entré la commande cp /usr/local/bin/reallylongincorrectfolder /home/myname/reallylong_and_correct_pathet que je souhaite simplement supprimer le. reallylongincorrectfolderY a-t-il un raccourci? C'est un scénario très comman pour moi en bash. Quelque chose comme dF<char>dans vi?

woodstok
la source

Réponses:

9
bind -P |grep unix-filename-rubout

Pour tester la liaison de touches avec par exemple. Ctrl- b:

bind \\C-b:unix-filename-rubout

Pour une utilisation permanente, ajoutez-le à ~/.inputrc

user1338062
la source
2
Pour l' ajouter à ~/.inputrc, ajouter une ligne comme celui - ci à ce fichier: "\C-b": unix-filename-rubout. Pour voir l'effet, vous devrez démarrer un nouveau shell bash (ou exécuter un autre programme qui utilise la bibliothèque GNU readline).
Croad Langshan
11

Alt- Backspaceet Ctrl- wsont généralement mappés backward-kill-word, ce qui fait cela. Si vous souhaitez savoir à quoi il est mappé sur votre système (le cas échéant), exécutez bind -P | grep '^backward-kill-word'.

Comme expliqué par @Barmar , ceci est différent de unix-word-rubout, ce qui supprime la limite d'espace précédente.

l0b0
la source
Mais cela tuera le mot entier .. Je veux tuer seulement jusqu'à la dernière barre oblique
woodstok
Il n'est supprimé que jusqu'à la dernière barre oblique ici. La barre oblique est l'un des séparateurs de mots par défaut. Êtes-vous sûr que vous utilisez Bash?
l0b0
Mon mauvais .. Alt-Backspace le supprime jusqu'à la dernière barre oblique. Quelle est la différence entre ALt-BackSpace et Ctrl-W?
woodstok
3
Ctl-w est normalement lié à unix-word-rubout: Tuez le mot derrière le point, en utilisant un espace blanc comme limite de mot.
Barmar
2
Cela ne fonctionne pas exactement. "Les mots sont composés de caractères alphanumériques (lettres et chiffres)". Par conséquent, cela s'arrêtera bien plus que de simples barres obliques. La valeur par défaut non liée unix-filename-ruboutest légèrement meilleure, car elle s'arrêtera à l'espace blanc et se coupera.
Sparhawk
6

Mettez ceci dans votre .inputrcet lancez un nouveau shell:

C-b:unix-filename-rubout

Ctrl- befface maintenant vers l'arrière jusqu'à la prochaine barre oblique.

Nirvana!

N'oubliez pas Ctrl- XCtrl- Elancera votre éditeur afin que vous puissiez éditer une ligne de commande compliquée confortablement.

Greg Bell
la source