Store and Restore Sessions in VIM

Below commands once added in vimrc creates a session with F2 and restore using F3:

map <F2> :mksession! ~/vim_session <cr> " Quick write session with F2
map <F3> :source ~/vim_session <cr> " And load session with F3

You can make any number of sessions using “mksession” command and restore using “source” command from vim editor also.


My Favorite vimrc

" An example for a gvimrc file.
" The commands in this are executed when the GUI is started.
" Maintainer:	Bram Moolenaar <>
" Last change:	2001 Sep 02
" To use it, copy it to
"     for Unix and OS/2:  ~/.gvimrc
"	      for Amiga:  s:.gvimrc
"  for MS-DOS and Win32:  $VIM\_gvimrc
"	    for OpenVMS:  sys$login:.gvimrc

" Make external commands work through a pipe instead of a pseudo-tty
"set noguipty

" set the X11 font to use
" set guifont=-misc-fixed-medium-r-normal--14-130-75-75-c-70-iso8859-1

set ch=2		" Make command line two lines high

set mousehide		" Hide the mouse when typing text

" Make shift-insert work like in Xterm

" Only do this for Vim version 5.0 and later.
if version >= 500

set guioptions+=a  
set cpoptions-=W

  " I like highlighting strings inside C comments
  let c_comment_strings=1

  " Switch on syntax highlighting if it wasn't on yet.
  if !exists("syntax_on")
    syntax on
map f gu
map F gU

  " Switch on search pattern highlighting.
set hlsearch "highlight previous patter
set ai  "For auto indenting"
set sel=inclusive
set slm=key
set cb=autoselect "clipboard
set km=startsel
set ul=100
set hi=100
set mps=(:),{:},[:],
set sm
set bs=2
set incsearch
set ru

" Hide the mouse pointer while typing
set mousehide

" Set nice colors
" background for normal text is light grey
" Text below the last line is darker grey
" Cursor is green
" Constants are not underlined but have a slightly lighter background
" highlight MatchParen
highlight Normal guibg=White
highlight Cursor guibg=Black guifg=NONE
highlight NonText guibg=White
highlight Constant gui=NONE guibg=grey95
highlight Special gui=NONE guibg=grey95
highlight ErrorMsg guibg=White guifg=Red
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
"set guifontset=-b&h-lucidatypewriter-small-r-normal-*-*-100-*-*-s-*-iso10646-1
"set number
set ruler
"set ts=8
"set sw=2
"set tw=150
syntax on
"syntax match <> /\<\l\+\>/
"syntax match () /\(\l\+\)/
"syntax match {} /\{\l\+\}/
let g:plaintex_delimiters = 1
imap \vo  "=strftime("VST%m%d%y :")Pa 
imap \vc  "=strftime("ACTION : c : VST%m%d%y :")Pa 
imap \c  "set ic"
imap \e  "=strftime("// End of")Pa 

runtime macros/matchit.vim

filetype plugin on
set omnifunc=syntaxcomplete#Complete

vmap  "+yy
map  "+gP

"Show Macro REG => "p e.g. "ap .

set tabpagemax=100
set showcmd
set ic
set colorcolumn=80

map <F2> :mksession! ~/vim_session <cr> " Quick write session with F2 
map <F3> :source ~/vim_session <cr> " And load session with F3

Ignore Errors in VIM operations

Sometimes it is required to ignore errors in vim command.
For an example, consider a case where you have macro which includes seach
operaton. While running this macro if seach fails, macro will terminate.

There are ways to ignore errors in vim:

  • Ignore Errors in replace:

use ‘e’ option in replace command:

  • Ignore Errors in search:

use :silent! command with serach to ignore search error.

:silent! /text_to_search

Storing Macro in VIM

Storing Macro in VIM

* Start recording macro using q command followed by name of macro. For an
example, if macro name is a then, qa.
* Perform task to be run in macro.
* Stop recording macro using q command.
* At this point macro content is stored in register (in register q in this case).
* Paste register content using “<macro_name>p command (“ap in this case). Note
that ” is part of command.
* Now you have content of macro. You can put it in .vimrc file.
Add below line to store macro with name a.
let @a = ‘<macro content>’

For a example, for simple copy paste macro (content is yyp)
let @a = ‘yyp’

Here ‘ character defines start and end of macro content. So if ‘ character is
part of macro, you need to use ‘ character twice i.e. ”.

For an example, if macro content is yy’p then,
let @a = ‘yy”p’

Enjoy Vimming 🙂

VIM Tips and Tricks

Remove Trailing White spaces

    • %s/\s\+$//gc

Find lines exceeding 80 columns

    • /\%>80v.\+

Remove unwanted empty lines

    • :g/^$/d
    • :g/^\s*$/d
    • :%s/\s\+$//e

Set maximum tabs in a page (example 100 tabs)

    • set tabpagemax=100

Cscope shortcuts

  • shift+5 – goto corresponding start/end of section (can be {, (, #define etc)
  • [[ – goto function start
  • ]] – function end
  • gf – goto file
  • ctrl + o – return from file
  • zf – fold line
  • space – unfold lines (move  to folded part for this)
  • ctrl + ] – goto definition
  • ctrl + t – return to last location (undo of ctrl +])

Change case of letters

    • ~ – Toggle case of visually selected text
    • u – Convert visually selected text to lower case
    • U – Convert visually selected text to Upper case

Cursor movement

  • h – move left
  • j – move down
  • k – move up
  • l – move right
  • w – jump by start of words (punctuation considered words)
  • W – jump by words (spaces separate words)
  • e – jump to end of words (punctuation considered words)
  • E – jump to end of words (no punctuation)
  • b – jump backward by words (punctuation considered words)
  • B – jump backward by words (no punctuation)
  • 0 – (zero) start of line
  • ^ – first non-blank character of line
  • $ – end of line
  • G – Go To command (prefix with number – 5G goes to line 5)

Note: Prefix a cursor movement command with a number to repeat it. For example, 4j moves down 4 lines.

Insert Mode – Inserting/Appending text

  • i – start insert mode at cursor
  • I – insert at the beginning of the line
  • a – append after the cursor
  • A – append at the end of the line
  • o – open (append) blank line below current line (no need to press return)
  • O – open blank line above current line
  • ea – append at end of word
  • Esc – exit insert mode


  • r – replace a single character (does not use insert mode)
  • J – join line below to the current one
  • cc – change (replace) an entire line
  • cw – change (replace) to the end of word
  • c$ – change (replace) to the end of line
  • s – delete character at cursor and subsitute text
  • S – delete line at cursor and substitute text (same as cc)
  • xp – transpose two letters (delete and paste, technically)
  • u – undo
  • . – repeat last command

Marking text (visual mode)

  • v – start visual mode, mark lines, then do command (such as y-yank)
  • V – start Linewise visual mode
  • o – move to other end of marked area
  • Ctrl+v – start visual block mode
  • O – move to Other corner of block
  • aw – mark a word
  • ab – a () block (with braces)
  • aB – a {} block (with brackets)
  • ib – inner () block
  • iB – inner {} block
  • Esc – exit visual mode

Visual commands

  • > – shift right
  • < – shift left
  • y – yank (copy) marked text
  • d – delete marked text
  • ~ – switch case

Cut and Paste

  • yy – yank (copy) a line
  • 2yy – yank 2 lines
  • yw – yank word
  • y$ – yank to end of line
  • p – put (paste) the clipboard after cursor
  • P – put (paste) before cursor
  • dd – delete (cut) a line
  • dw – delete (cut) the current word
  • x – delete (cut) current character


  • :w – write (save) the file, but don’t exit
  • :wq – write (save) and quit
  • :q – quit (fails if anything has changed)
  • :q! – quit and throw away changes


  • /pattern – search for pattern
  • ?pattern – search backward for pattern
  • n – repeat search in same direction
  • N – repeat search in opposite direction
  • :%s/old/new/g – replace all old with new throughout file
  • :%s/old/new/gc – replace all old with new throughout file with confirmations

Working with multiple files

  • :e filename – Edit a file in a new buffer
  • :bnext (or :bn) – go to next buffer
  • :bprev (of :bp) – go to previous buffer
  • :bd – delete a buffer (close a file)
  • :sp filename – Open a file in a new buffer and split window
  • ctrl+ws – Split windows
  • ctrl+ww – switch between windows
  • ctrl+wq – Quit a window
  • ctrl+wv – Split windows vertically

Other VIM tricks