Home Classroom How To A Crash Course in Vim

A Crash Course in Vim


Vim is a very popular text editor, if you are a programmer, you probably have heard a lot about it. Here I try to present a concise list of the very basic functionality of Vim to get you started.



  • There are three basic modes in Vim, normal mode, visual mode, and the insert mode.
  • By default, you are in the normal mode when you start Vim.
  • Write :e /filepath to open the file you want
  • Write :e /filepath to open the file you want
  • Write i to switch to the insert mode, where you can write and edit text. (You can also use I, a, A, o, O, s, S also but they all have slightly different functionalities)
  • To switch back to the normal mode, press Esc.
  • Insert mode is used for only writing and editing text. Most of the commands are used in the normal mode.
  • The visual mode is used for selecting text and performing operations on the selected text. Visual mode commands in this text are labeled [VM]
  • Write v in normal mode to switch to visual mode, and Esc in visual mode to switch to the normal mode.
  • To save a file, use :w (w is for write).
  • To quit vim, use :q
  • i is used for inserting text, just before the cursor and a is used to insert
    text just after the cursor.
  • I is used for inserting at the beginning of the line, and A is used for appending text at the end of the line.
  • o is used for opening a new line below the cursor position.
  • O is used for opening a new line above the cursor position.
  • s is used to substitute the current character and S is used for substituting the current line. Substituting deletes the character(s) and allows you to
    insert zero or more characters.
  • r is for replacing a character, and R is for replacing continuous characters. For every character to be replaced, only one other character is put at its place.
  • v is used for selecting a character, which you can follow up with c to substitute it.
  • You can use V to select a line. Both v and V take you to the visual mode where you can select text, the commands are given later.
  • Use :cd /directorypath to switch to the directory you want.
  • Use :pwd to find the present working directory


Moving the Cursor

  • Use h,j, k,l to move the cursor left, down, up and right respectively.
  • w moves to the cursor to the next word. Attach a prefix to specify how many words you want to move ahead. Eg. 2w moves ahead by 2 words. Also, 2e moves to end of the second word from the current cursor position.
  • b moves to the previous word. Just like 2w, 2b moves back 2 words.
  • ( Moves the cursor one sentence back.
  • ) Moves the cursor one sentence ahead.
  • ^ Moves the cursor to the starting of the line
  • $ Moves the cursor to end of the line.
  • { Moves the cursor to the previous paragraph.
  • } Moves the cursor to the next paragraph.
  • mC sets a mark at the current cursor position where C is a char from ‘a’-'z’ and ‘A’-'Z’. This is usual when you need to jump back-and-forth between parts of the text.
  • ‘C takes you back to the place you marked with C.
  • Use ctrl-o to jump to the previous location (before a jump).
  • Use ctrl-i to jump to the next location again.
  • In visual mode, use ap to select a paragraph. [VM]
  • In visual mode, use ~ to flip the case of a a selection. [VM]



  • aw, ab, ap can be used to select a word, block or paragraph respectively. [VM]
  • Use d to delete a selection of text. [VM]
  • Use y to copy(yank). [VM]
  • Use p to paste. [VM]
  • Use dl to delete a character (You use l to move to the next char)
  • Use dw to delete a word (You use w to move to the next word)
  • yy yanks the current line and dd deletes the current line.
  • p pastes after the current cursor.
  • P pastes before the current pos of the cursor.
  • x is used for cutting a single character.
  • u is used for undo and ctrl-r is used for redo.
  • Instead of repeated undos, you can make use of the command :earlier 10m to go back to the version of the text 10 minutes back in time. Similarly, :earlier 10s for 10 seconds.
  • Make use of :later 10m to go to the version 10 minutes in the future. No, this is not a time machine :D . This command is effective when you have done some undos or used the :earlier command to come back to a version of text back in time, and now want to go back to a version that was created after the current one.
  • xp swaps two adjacent characters.
  • You can make use of the s, S, r, and R commands which we discussed earlier to edit.


Programming in Vim

  • You may want vim to distinguish between normal text and code. Normally vim automatically detects C/C++ code. But you can tell Vim that a particular file is a piece of code, for example, you can set the file type by :set filetype=Python for python.
  • Set indentation by :set autoindent
  • Use % to jump to the corresponding curly braces }.
  • To execute terminal commands in Vim, use :!cmd where, cmd is the command you want to execute.
  • Place your cursor over a particular local variable and the command gd, will take you to its declaration.
  • Use gD for the same function in case of global variables.
  • :new splits the window to open multiple documents.
  • Make use of ctrl-w motion-key where motion-key is one of h,j, k or l to go to the desired window.
  • You can also use ctrl-w ctrl-w to cycle between the open windows.
  • Use :sp to split the window into parts. This can be used for multiple windows to the same file, and is especially useful when you need to move back-and-forth between the same parts of the text.
  • :vsp to create a vertical partition.
  • To increase the size of a window, use ctrl- _
  • To make all widows equal in size, use ctrl- =
  • :tabnew to create a new tab.
  • :gt to go to a tab to the left
  • :gT to go to a tab to the right.


What Next?

I wrote this document while reading Swaroop C H’s book ‘A Byte of Vim’ (http://www.swaroopch.com) to keep track of the numerous commands that were coming my way. I strongly recommend this book if you want to read anything in detail or some advanced topics which I did not cover.
Happy Vimming :)



Gaurav is a final year student of Computer Engineering at Thadomal Shahani Engineering College, University of Mumbai (India). His handle on TopCoder is ‘red.dragon’.His areas of interest are Algorithms, Grid Computing and Cryptography


Leave a Reply