The GNU bash shell, as one might expect, uses Emacs key bindings to perform history and editing in the shell. Vi key bindings are available, and can be set with this standard command (just like in ksh):
set -o vi
My fingers have gotten this sequence of letters ingrained in them so I don’t even have to think about it – and I type it almost automatically after login.
However, there is a way to set up ksh to automatically set editing to vi mode. If the VISUAL
variable is set to a value like vi, then the editing mode will be set to vi mode automatically. Likewise, if the VISUAL
variable is set to emacs, then emacs mode is used for editing.
If the VISUAL
variable is not set, then the EDITOR
variable is used.
In later versions of the AT&T Korn shell (such as 20100202) the recognized values have been expanded: the pattern *[Vv][Ii]*
is recognized as a request for vi mode; the pattern *gmacs*
results in gmacs mode; and the pattern *macs*
results in emacs mode. (The only difference between emacs and gmacs mode is the handling of the ^T character.)
This means that using vim or gvim will now trigger vi mode – indeed, using almost any vi clone editor such as nvi or elvis will work with this method. This also means that the full path can be used, although this may have been true previously.
In bash however, this use of EDITOR
and VISUAL
is not available. However, since bash uses GNU readline, we can set up readline to use vi mode by default – and thus also affect all programs that use GNU readline besides.
Edit (or create) a file in your home directory called .inputrc
and add this line to it:
set editing-mode vi
After this, any time you log in – or use anything else that uses GNU readline (such as CLISP for example) – you’ll automatically have vi mode editing. I can finally rest my fingers…
From a guy that moved from Red Hat Linux to IBM AIX, the “set -o vi” command is one of my favourites for history recall. this allows you to “[esc] + k” to recall commands.
This capability is in emacs mode too…
Some other (lesser known) editing commands include: “[esc]-=” (list possible filename completions) and “[esc]-\” (complete filename as far as possible). During history recall, there is also “j” (more recent commands) as well as “/” (search).