How To Use Vim Mode On The Command Line In Bash
Tags: vim, bash, linux, tutorial
Published: 2021-06-11 03:02:33

# Introduction

Learn how to use Vi mode on the command line in Bash.

## Vim lovers rejoice. 

Did you know you can use Vim mode on the command line?

After I found out you could enable Vim mode in bash 
`set -o vi` is always the first line I add to by .bashrc.

![set-vi-mode.jpg](https://i.postimg.cc/zXGZqJQy/set-vi-mode.jpg)

In this article I will go over 

* Movement 
* Editing
* Searching

By default, the Bash command line uses Emacs style keyboard shortcuts, such as CTRL+A to go to the beginning of the line and CTRL+E to go to the End of the line. 

Here is a small table that shows a comparison of the Emacs style keyboard shortcuts and the Vim equivalent on the command line.

| Emacs | Vim | Result |
|---|---|---|
| Ctrl+A | 0 | Move cursor to beginning of line. |
| Ctrl+E | $ | Move cursor to end of line. |
| Alt+B | b | Move cursor back one word. |
| Alt+F | w | Move cursor right one word. | 
| Ctrl+B | h | Move cursor back one character. |
| Ctrl+F | l | Move cursor right one character. |
| Ctrl+P | k | Move up in Bash command history. |
| Ctrl+R | j | Move down in Bash command history. |


Add this line to the bottom of your `.bashrc` file.

```bash
set -o vi
```

Source your `.bashrc` file to make the changes take effect.

```bash
$ source ~/.bashrc
```

After adding that line and sourcing the `.bashrc` file, you now have Vim commands available on the Bash command line.

You can perform a variety of commands Vim users are used to on the command line. 

If you are a Vim user already you know about command mode and insert mode. By default, in the Bash command line you are in insert mode.

You must press `ESC` to enter command mode.

By the way, I am currently using Bash version 5.2.9.

```bash
$ bash --version | head -1
GNU bash, version 5.2.9(1)-release (x86_64-pc-linux-gnu)
```

# Movement

### This is how you move around.

Out of the four Vim  movement keys `h j k l` only `h` and `l` work to move the cursor left and right.

First press the `ESC` key to make sure you are in command mode.

`$` Move the cursor to the end of the line.

`0` Move the cursor to the beginning of the line.

![move-to-end-of-line.gif](https://i.postimg.cc/B6v7J6X8/move-to-end-of-line.gif)

`W` Move to the next word using space character as the delimiter.

![move-to-next-word.gif](https://i.postimg.cc/PqdspBf1/move-to-next-word.gif)

`w` Move to the next word or special character.

`B` Move back one word using space character as the delimiter.

![move-back-one-word.gif](https://i.postimg.cc/c4T5krdt/move-back-one-word.gif)

`b` Move back one word or special character.

`^` Move to the first non-blank character at the beginning of the line.

`f<character>` Find occurrence of the next character. 

> Examples

`ft` finds the next occurrence of the letter `t`.

![find-letter-t.gif](https://i.postimg.cc/dDMLqhtw/find-letter-t.gif)

`f"` finds the next occurrence of the double quote character `"`.

`;` Press semi-colon to move to the next occurrence of the character.


`F<character>` Performs a backward search for a character.

> Examples

`Ft` finds the next occurrence of the letter `t` backward search.

![find-letter-t-backwards.gif](https://i.postimg.cc/d1kCwPmR/find-letter-t-backwards.gif)

`F"` finds the next occurrence of the double quote character `"` backward search.

`;` Press semi-colon to move to the next occurrence of the character.

# Editing

### This is how you edit text.

`x` Delete a single character under cursor.

`X` Delete the previous character.

![delete-previous-character.gif](https://i.postimg.cc/FFykhZXL/delete-previous-character.gif)

`I` Enter insert mode with the cursor at the start of the line.
 
`A` Enter insert mode at the end of the line to append text.

![append-to-end-of-line.gif](https://i.postimg.cc/02GYHvyh/append-to-end-of-line.gif)

`cc` Change the whole line. The whole line is deleted and puts you in insert mode.

`C` Change text from the cursor to the end of the line.

`ea` Move cursor to the end of the word and enter insert mode to append text.

`y` Yank (copy) word under cursor.

`Y` Yank (copy) from the cursor to the end of the line.

`p` or `P` Paste the text you copied.

`r` Replace the single character under the cursor.

`R` Replace the characters under the cursor as you type. 
This is like pressing the insert key on the keyboard while in a document editing program such as Libreoffice or Microsoft Word.

![replace-text.gif](https://i.postimg.cc/Pq0hGmFV/replace-text.gif)

`.` Repeat the last command by pressing the period character. This is one of the most useful commands in Vim.

`u` Undo last command. You can press this key multiple times to go back in time.

`~` Toggle the case of the letter under the cursor.

`dd` or `D` To delete the whole line.

![delete-whole-line.gif](https://i.postimg.cc/KjCJxDMj/delete-whole-line.gif)

`dw` Delete current word under cursor.

`d3w` Delete three words.

`c2w` Change two words. This deletes two words and puts you in insert mode.

`y2w` Yank (copy) two words.

`xp` Transpose letters.

![transpose-letters.gif](https://i.postimg.cc/Kzmf8WV1/transpose-letters.gif)

# Searching

### This is how you search for a previous run command.

You can search for commands by pressing forward slash `/` and typing a part of a command you ran.
It will find the last command you ran with the matching string.

I want to search for the last gunicorn command so I type `/gunicorn` and press ENTER.

![vim-search.gif](https://i.postimg.cc/VLLYC9pp/vim-search.gif)


# Conclusion

If you enjoy using the Vim text editor you will be happy to know that you can also use a few Vim commands on the command line.

View my [.vimrc](https://github.com/brandon-wallace/vimrc) file.

Follow me on [Github](https://github.com/brandon-wallace) and [DEV.to](https://dev.to/brandonwallace).