69

I'm getting used to vim bindings (like pressing w to go to word, dw to delete a word, and such) and it's modes (insert, normal, visual), and, out of curiosity would like to know: is there some kind of implementation of this behaviour of modes and bindings from vim to my terminal?

Have insert mode, normal mode and such...

рüффп
  • 1,677
  • 4
  • 27
  • 35

1 Answers1

73

It has insert and normal modes (the insert mode is default, and escape for normal mode).

When in vi normal mode, you can launch the full $EDITOR to edit the current line with v (the same can be achieved when bash is in emacs mode with C-x C-e).

In bash: set -o vi You can run it at the command line for just this session or add it to your .bashrc file.

Many programs use readline for input, and you can make any of them use vi-style keybindings by setting up your .inputrc with

set editing-mode vi
set keymap vi

In zsh, if you change your EDITOR environment variable, the shell will match it.

Gerardo Lima
  • 103
  • 3
Shawn J. Goff
  • 45,338
  • 25
  • 134
  • 145
  • 1
    Pretty neat. Do you know if it's possible to have some kind of .vimrc as well, but for this uses? For example, adding different mappings to ... – Somebody still uses you MS-DOS Dec 15 '10 at 18:10
  • 2
    @Somebody: Not `.vimrc` since you're still using the shell's built-in editor, but you can configure key bindings in [`.inputrc`](http://cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC9) for all readline applications (such as bash), in `.bashrc` for bash specifically, in `.zshrc` for zsh. – Gilles 'SO- stop being evil' Dec 15 '10 at 18:34
  • 1
    Checkout the [bind builtin](http://www.linuxcommand.org/man_pages/bind1.html) – Shawn J. Goff Dec 15 '10 at 18:35
  • 3
    Note that on OS X, you'll need to put the `put -o vi` in ~/.bash_profile instead of ~/.bashrc . – Steve Jorgensen Mar 23 '11 at 07:24
  • 9
    I notice that the cursor appearance doesn't change in the different modes bash w/ vi key bindings. Is there any way to make it do that? It would be nice to have a visual indication of what mode I'm in. – Steve Jorgensen Mar 23 '11 at 07:27
  • ^ Why `put` (and not `set`), does Mac have it's own version of `bash`? –  May 02 '17 at 17:50
  • 4
    For a visual indicator you can put `set show-mode-in-prompt on`, `set vi-ins-mode-string "+"` and `set-cmd-mode-string ":"` in your `.inputrc` file. – Will Dec 28 '17 at 04:43
  • 4
    @Will That worked, with a few changes. Namely, I added: ```set show-mode-in-prompt on``` ```set vi-ins-mode-string "+"``` ```set vi-cmd-mode-string ":"``` – Soap Dec 30 '19 at 15:22
  • How to paste a clipboard in terminal in this case? Neither the `, ` nor vim registers work. – LRDPRDX Apr 09 '20 at 13:47
  • `you can launch the full $EDITOR to edit the current line with v ` this doesn't seem to work with zsh. it is entering visual mode. any idea? i am using [powerlevel10k](https://github.com/romkatv/powerlevel10k) theme, but i don't think that could be the reason right? – kevinnls May 22 '21 at 10:43
  • On WSL, you'll need to restart the terminal to see the changes advised by @Soap take into affect. – FriskySaga Dec 02 '21 at 19:50