Global
:help keyword
– open help for keyword:o file
– open file:saveas file
– save file as:close
– close current paneK
– open man page for word under the cursor
Cursor movement
h
– move cursor leftj
– move cursor downk
– move cursor upl
– move cursor rightH
– move to top of screenM
– move to middle of screenL
– move to bottom of screenw
– jump forwards to the start of a wordW
– jump forwards to the start of a word (words can contain punctuation)e
– jump forwards to the end of a wordE
– jump forwards to the end of a word (words can contain punctuation)b
– jump backwards to the start of a wordB
– jump backwards to the start of a word (words can contain punctuation)%
– move to matching character (default supported pairs: ‘()’, ‘{}’, ‘[]’ – use:h matchpairs
in vim for more info)0
– jump to the start of the line^
– jump to the first non-blank character of the line$
– jump to the end of the lineg_
– jump to the last non-blank character of the linegg
– go to the first line of the documentG
– go to the last line of the document5G
– go to line 5fx
– jump to next occurrence of character xtx
– jump to before next occurrence of character x}
– jump to next paragraph (or function/block, when editing code){
– jump to previous paragraph (or function/block, when editing code)zz
– center cursor on screenCtrl
+b
– move back one full screenCtrl
+f
– move forward one full screenCtrl
+d
– move forward 1/2 a screenCtrl
+u
– move back 1/2 a screen
TipPrefix a cursor movement command with a number to repeat it.
For example,
For example,
4j
moves down 4 lines.Insert mode – inserting/appending text
i
– insert before the cursorI
– insert at the beginning of the linea
– insert (append) after the cursorA
– insert (append) at the end of the lineo
– append (open) a new line below the current lineO
– append (open) a new line above the current lineea
– insert (append) at the end of the wordEsc
– exit insert mode
Editing
r
– replace a single characterJ
– join line below to the current onecc
– change (replace) entire linecw
– change (replace) to the end of the wordc$
– change (replace) to the end of the lines
– delete character and substitute textS
– delete line and substitute text (same as cc)xp
– transpose two letters (delete and paste)u
– undoCtrl
+r
– redo.
– repeat last command:noh
– remove highlighting of search matches=a{
– indent the whole block of code inside { }gg=G
– indent all code in the whole file
Marking text (visual mode)
v
– start visual mode, mark lines, then do a command (like y-yank)V
– start linewise visual modeo
– move to other end of marked areaCtrl
+v
– start visual block modeO
– move to other corner of blockaw
– mark a wordab
– a block with ()aB
– a block with {}ib
– inner block with ()iB
– inner block with {}Esc
– exit visual mode
Visual commands
>
– shift text right<
– shift text lefty
– yank (copy) marked textd
– delete marked text~
– switch case
Registers
:reg
– show registers content"xy
– yank into register x"xp
– paste contents of register x
TipRegisters are being stored in
Register 0 contains always the value of the last yank command.
~/.viminfo
, and will be loaded again on next restart of vim.Register 0 contains always the value of the last yank command.
Marks
:marks
– list of marksma
– set current position for mark A`a
– jump to position of mark Ay`a
– yank text to position of mark A
Macros
qa
– record macro aq
– stop recording macro@a
– run macro a@@
– rerun last run macro
Cut and paste
yy
– yank (copy) a line2yy
– yank (copy) 2 linesyw
– yank (copy) the characters of the word from the cursor position to the start of the next wordy$
– yank (copy) to end of linep
– put (paste) the clipboard after cursorP
– put (paste) before cursordd
– delete (cut) a line2dd
– delete (cut) 2 linesdw
– delete (cut) the characters of the word from the cursor position to the start of the next wordD
– delete (cut) to the end of the lined$
– delete (cut) to the end of the linex
– delete (cut) character
Exiting
:w
– write (save) the file, but don’t exit:w !sudo tee %
– write out the current file using sudo:wq
or:x
orZZ
– write (save) and quit:q
– quit (fails if there are unsaved changes):q!
orZQ
– quit and throw away unsaved changes:x
– Save and quit:xa
– Save and quit all:wqa
or:wqall
– Save and quit all
Search and replace
/pattern
– search for pattern?pattern
– search backward for pattern\vpattern
– ‘very magic’ pattern: non-alphanumeric characters are interpreted as special regex symbols (no escaping needed)n
– repeat search in same directionN
– 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
Search in multiple files
:vimgrep /pattern/ {file}
– search for pattern in multiple files
e.g.
:vimgrep /foo/ **/*
:cn
– jump to the next match:cp
– jump to the previous match:copen
– open a window containing the list of matches
Working with multiple files
vim -p [file*]
– Open files using tabsvim -O [file*]
– Open files using vertical splitvim -o [file*]
– Open files using horizontal split:e file
– edit a file in a new buffer:bnext
or:bn
– go to the next buffer:bprev
or:bp
– go to the previous buffer:bd
– delete a buffer (close a file):ls
– list all open buffers:sp file [TAB key]
– open a file in a new buffer and split window, TAB key to choose:vs or :vsp or :vsplit [TAB key] file
– open a file in a new buffer and vertically split window:vert all
– open all files in vertically split windows:all
– open all files in horizontally split windows:tabnew [TAB key] file
– Open file on a tab (only can open one file once)[n]gt
– Move forward n tab (whole screen tab)[n]gT
– Move backward n tab (whole screen tab):tabn
– Move to next tab:tabp
– Move to prev tab:tabonly
– Show only the current tab, close other tabs:tabclose
– Close the current tabCtrl
+ws
– split current file to two windows horizontallyCtrl
+ww
– switch windows for vertical split tabsCtrl
+wq
– quit a windowCtrl
+wv
– split current file to two windows verticallyCtrl
+wh
– move cursor to the left window (vertical split)Ctrl
+wl
– move cursor to the right window (vertical split)Ctrl
+wj
– move cursor to the window below (horizontal split)Ctrl
+wk
– move cursor to the window above (horizontal split):only
or:on
– Show only the current file