29

In Bash Emacs mode, is there any way to delete till the previous slash character?

For example, if I entered the command cp /usr/local/bin/reallylongincorrectfolder /home/myname/reallylong_and_correct_path and want to just delete the reallylongincorrectfolder, is there any shortcut?

This is a very common scenario for me in Bash.

Something like dF<char> in vi?

3 Answers 3

17
bind -P |grep unix-filename-rubout

To test out the keybinding with eg. Ctrl-b:

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

For permanent usage, add it to ~/.inputrc

1
  • 2
    To add it to ~/.inputrc, add a line like this to that file: "\C-b": unix-filename-rubout. To see the effect, you'll have to start a new bash shell (or run some other program that uses the GNU readline library). Commented Jul 29, 2018 at 10:50
19

Alt-Backspace and Ctrl-w are commonly mapped to backward-kill-word, which does that. If you want to find out what it's mapped to on your system (if anything), run bind -P | grep '^backward-kill-word'.

As explained by @Barmar, this is different from unix-word-rubout, which removes to the previous space boundary.

7
  • 3
    But that will kill the entire word.. I want to kill only till the last slash
    – woodstok
    Commented Jun 11, 2013 at 8:59
  • It does remove only to the last slash here. Slash is one of the default word separators. Are you sure you're using Bash?
    – l0b0
    Commented Jun 11, 2013 at 9:01
  • 3
    Ctl-w is normally bound to unix-word-rubout: Kill the word behind point, using white space as a word boundary.
    – Barmar
    Commented Jun 11, 2013 at 10:31
  • 2
    This doesn't exactly work. "Words are composed of alphanumeric characters (letters and digits)". Hence it'll stop at much more than just slashes. The default-unbound unix-filename-rubout is slightly better, since it'll stop at white space and slash.
    – Sparhawk
    Commented May 4, 2014 at 1:16
  • 3
    alt + backspace deletes until /, thus answering the question. ctrl + w on the other hand deletes until the previous space. Commented Feb 20, 2017 at 9:49
12

Put this in your .inputrc and start a new shell:

C-b:unix-filename-rubout

Ctrl-b now erases backwards to the next slash.

Nirvana!

Don't forget Ctrl-XCtrl-E will launch your editor so you can edit a complicated command line comfortably.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .