[sf-lug] My favorite simple little Linux tips

Akkana Peck akkana at shallowsky.com
Fri Jul 30 21:05:39 PDT 2010

As long as we're talking terminal editing shortcuts, my favorite
is Control-W to erase the last word. It's even better if you set
it to erase only back to the last punctuation -- that way, if
you do something like
$ ls /long/path/to/somewhere/that/you/dont/want/to/type/again
and then realize you had one too many, you can uparrow (or Ctrl-P)
and hit a Ctrl-W or two to delete elements of the path one by one.

That used to be the default in old-timey Unix, but in modern Linux
you have to set it that way: in .bashrc,
bind '\C-w:backward-kill-word'
and in .inputrc, 
set bind-tty-special-chars Off

And that reminded me of another favorite I use a lot: curly brace
and comma substitutions. For instance, if I want to make a
backup copy of a file with a long name, I can say:

$ cp ~/long/path/to/long-file-name{,-bak}.jpg

which expands to

$ cp ~/long/path/to/long-file-name.jpg ~/long/path/to/long-file-name-bak.jpg

without needing to go to the mouse to doubleclick/middleclick.

Mike Higashi writes:
> The one I'm in the habit of using instead is the !$ shortcut:

Don't forget !^ for the first argument, too. Fun idiom:

$ mv filename filename-sav
  [ do something outside this terminal window ]
$ mv !$ !^

Steve M Bibayoff writes:
> And for all you people who don't use emacs (I'm looking at you Michael
[ ... ]
> Most of bash shortcuts:

Warning: once you get addicted to these emacs-inspired shortcuts,
you'll spend a lot of time swearing at developers of apps that don't
support these once-standard keybindings that make typing so much easier.
Forget about word processors -- none of them support these bindings.

Alex Kleider writes:
> $ ^ls^less
> It's similar to 
> :s/old_string/new_string
> when using vim

And you can use that syntax too:

$ !!:s/ls/less

And with this syntax, you aren't limited to the last command:

$ !x:s/foo/bar

repeats the last command you ran starting with x, replacing the
first foo with bar.

$ !-4:gs/foo/bar

runs the fourth-to-last command, replacing every foo with bar
(gs means global substitute).


More information about the sf-lug mailing list