DEV Community

Cover image for Vim cheatsheet
Alex Pushkarev
Alex Pushkarev

Posted on

Vim cheatsheet

Words of introduction

Vim is considered an advanced editor for programmers and those who mastered Vim rarely would want to switch back.

I was avoiding Vim for some time, instead, I was relying on the IDE capabilities for text editing, but throughout my work experience, I realised one thing - IDEs come and go, while Vim remains. Often I had to switch IDEs and platforms, having to learn shortcuts again and again.

So I took time to master Vim and it turned out to be not so difficult. In fact, most of the Vim power can be unleashed with a very small subset of Vim commands.

I don't see much sense in mastering all the immense capabilities of Vim/IntelliJ/You name it. However, there's a subset that is very useful for me personally. I am using the Vim plugin in VScode and Jetbrains products and customized Vim as well. Below is the list of the commands/shortcuts I personally find useful for me.

To the best of my knowledge, those would work the same both in Vim plugins and Vim itself.

*Disclaimer: * this is a cheatsheet, not a tutorial, so it assumes the reader has some basic understanding of Vim.

General commands/shortcuts

Those are the very basics things, such as opening the file or escaping Vim.


Action Command
Exit w/o saving :q!
Exit from all splits qa
Exit and save :wq!
Go to normal mode ESC or CTRL+C
Repeat last change .
Open file :open {filename}
Execute terminal command :!command

Splits (tabs)

Action Command
Open file in vertical split :vsp {filename}
Navigate between splits CTRL+W (corresponding arrow)

Visual mode

Visual mode is used to select different parts of texts

Action Command
go to the character-wise visual mode v
go to the line-wise visual mode V
to select "block" CTRL+v

Multiple cursors

Note: works in VSCode, doesn't work in GVIM

Add multiple cursors

  1. Select lines you want to change (using visual mode)
  2. type I

Add cursor for word

  1. move cursor to the start of the word
  2. type gb to add another cursor
  3. repeat :) then use c, ESC or d or whatever


Navigating by words

Action Command
next word w
next WORD W
previous word b
previous WORD B
next end of word e
jump to matching bracket %

Navigating by paragraphs

Action Command
next paragraph }
previous paragraph {
go to a specific line {line}gg

Start/end of line and file

Action Command
start of the line 0
first non-space symbol of the line ^
end of the line $
go to the top of the file gg
go to the end of the file G


Important: go to the definition (this does not work in GVIM): gd

we can always append numbers, for example:

2w #go to the second word
4(arrow down) #go 4 lines down
Enter fullscreen mode Exit fullscreen mode


Action Command
search forward /{pattern}
search backward ?{pattern}
continue search forward n
continue search backward N
find symbol on the line f{symbol}


Action Command
replace first occurrence of foo with bar :s/foo/bar/
replace all occurrences of foo with bar in file :%s/foo/bar/g
replace all occurrences of foo with bar in line :s/foo/bar/g
replace with empty string :s/foo//g
replace with confirmation :s/foo/bar/gc

confirmation mode:

  • y replace
  • l replace and quit
  • n skip
  • q quit
  • a replace all

Note: search pattern can be regex!

:%s/^foo.*/Vim is the best/gc
Enter fullscreen mode Exit fullscreen mode

Editing text

Insert mode

Action Command
Go to insert mode i
Append text at the end of line A
Add line below and go to insert mode o
Add line above and go to insert mode O
Remove last character typed CTRL+H
Remove last word typed CTRL+W
Remove last line typed CTRL+U

Editing commands

Action Command
copy (yanking) y
delete d
replace selected (word, line, whatever) c
Copy whole line Y
duplicate line YP or Yp
delete the whole line dd
delete paragraph dp
delete until end of line D
paste p
change (similar to d + i) c
add indentation >>
remove indentation <<
format code ==


  • The unnamed register " is where you copy and cut stuff to, when you don’t explicitly specify a register. The default register if you will.
  • The named registers a-z are registers you can use explicitly to copy and cut text at will
  • The yank register 0 stores the last thing you have yanked (copied)
  • The cut registers 1-9 store the last 9 things you cut by using either the delete or the change command
Action Command
To copy to register "{register name}y{motion}
To cut to register "{register name}d{motion}
To paste from register "{register name}p


change the text inside quotes: ci"

change the text inside brackets: ci)

change the text inside brackets: ci}

(you get the idea?)

Some general information

Editing commands are used in combination with navigation, just like that:

   what to do (delete, change...)
     /      how many times
    /         /
   v         v
           where to perform
             the action
Enter fullscreen mode Exit fullscreen mode

For example, delete two words: d2w

Undoing stuff

Undo: u

Top comments (0)