:h[elp] <keyword>
: open help for keyword:sav[eas] <file>
: save file as:clo[se]
: close current pane:ter[minal]
: open a terminal windowK
: open man page or word under the cursorTip: Run
vimtutor
in a terminal for a basic Vim tutorial.
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)ge
: jump backwards to the end of a wordgE
jump backwards to the end of a word (words can contain punctuation)%
move to the matching character (default supported pairs: ‘()’, ‘{}’, ‘[]’ - use :h matchpairs
in vim for more info)0
: jump to the start of a line^
: jump to the first non-blank character of the line$
: jump to the end of a linkg_
: 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 documentgd
: move to local declaration (useful for finding first instance of code variables)gD
: move to global declaration (useful for finding first instance of code variables)fx
: jump to next occurrence of character xtx
: jump to before next occurrence of character xFx
: jump to previous occurrence of character xTx
: jump to after previous occurrence of character x;
: repeat previous f, t, F, or T movement,
: repeat previous f, t, F, or T movement, backwards}
: 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
+ e
: move screen down one line (without moving cursor)Ctrl
+ y
: move screen up one line (without moving cursor)Ctrl
+ 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 screenTip: Prefix a cursor movement command with a number to repeat it. For example,
4j
moves down 4 lines.
i
: insert before the cursorI
: insert at the beginning of the linea
: append after the cursorA
: append at the end of the lineo
open a new line beloe the current lineO
: open a new line above the current lineea
: append at the end of the wordCtrl
+ h
: delete the character before the cursor during insert modeCtrl
+ w
: delete the word before the cursor during insert modeCtrl
+ j
: begin new line during insert modeCtrl
+ t
: indent (move right) line one shiftwidth during insert modeCtrl
+ d
: de-indent (move leftO line one shiftwidth during insert modeCtrl
+ n
: insert (auto-complete) next match before the cursor during insert modeCtrl
+ p
: insert (auto-complete) previous match before the curser during insert modeCtrl
+ rx
: insert contents of register xCtrl
+ ox
: temporarily enter normal mode to issue one normal-mode command xEsc
: exit insert moder
: replace a single characterR
: replace more than one character until ESC
is pressedJ
: join line below to the current one with one space in betweengJ
: join line below to the current one without space in betweengwip
: reflow paragrahg~
: switch case up tp motiongu
: change to lowercase up to motiongU
: change to uppercase up to motioncc
: replace entire lineC
or c$
: replace to the end of the lineciw
: replace entire wordcw
or ce
: replace to the end of the words
: delete character and substitute textS
: delete line and substitute text (same as cc
)xp
: transpose two letters (delete and paste)u
: undoU
: restore (undo) last changeCtrl
+ r
: redo.
: repeat last commandv
: start visual mode (then mark likes and do a command)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
: mark a block between (), inclusiveaB
: mark a block between {}, inclusiveat
: mark a block between <> tags, inclusiveib
: mark a block between (), exclusiveiB
: mark a block between {}, exclusiveit
: mark a block between <> tags, exclusiveESC
: exit visual modeTip: instead of
b
orB
one can also use(
or{
respectively.
>
: shift text right<
: shift text lefty
: yank (copy) marked textd
: delete marked text~
: switch caseu
: change marked text to lowercaseU
: change marked text to uppercasereg[isters]
: show registers content"xy
: yank into register x"xp
: paste contents of register x"+y
: yank into the system clipboard register"+p
: paste from the system clipboard registerTip: Registers are being stored in
~/.viminfo
, and will be loaded again on next restart of vim.
Tip: Special registers:
O
: last yank"
: unnamed register, last delete or yank%
: current file name#
: alternate file name*
: clipboard contents (X11 primary)+
: clipboard contents (X11 clipboard)/
: last search pattern:
: last command-line.
: last inserted text-
: last small (less than a line) delete=
: expression register_
: black hole register
:marks
: list of marksma
: set current position for mark A'a
: jump to position of mark Ay'a
: tank text to position of mark A:ju[mps]
: list of jumpsCtrl
+ i
: go to newer position in jump listCtrl
+ o
: go to older position in jump list:changes
: list of changesg,
: go to newer position in change listg;
: fo to older position in change listCtrl
+ ]
: jump to the tag under cursorTip: To jump to a mark you can either use a backtick (```) or an apostrophe (
'
). Using an apostrophe jumps to the beginning (first non-blank) of the line holding the mark.
qa
: record macro aq
stop recording macro@a
: run macro a@@
: rerun last macroyy
: 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 wordyiw
: yank (copy) word under the cursoryaw
: yank (copy) word under the cursor and the space after or before ity$
: yank (copy) to end of linep
: put (paste) the clipboard after cursorP
: put (paste) before cursorgp
: put (paste) the clipboard after cursor and leave cursor after the new textgP
: put (paste) before cursor and leave cursor after the new textdd
: 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 worddiw
: delete (cut) word under the cursordaw
: delete (cut) word under the cursor and the space after or before itD
: delete (cut) to the end of the lined$
: delete (cut) to the end of the linex
: delete (cut) character>>
: indent (move right) line one shiftwidth<<
: de-indent (move left) line one shiftwidth>%
: indent a block with () or {} (cursor on brace)>ib
: indent inner block with ()>at
: indent a block with <> tags3==
: re-indent 3 lines=%
: re-indent a block with () or {} (cursor on brace)=iB
: re-indent inner block with {}gg=G
: re-indent entire buffer]p
: paste and adjust indent to current line:w
: write (save) the file, but don’t exit:w !sudo tee %
: write out the current file using sudo:wq
or :x
or ZZ
: write (save) and quit:q
: quit (fails if there are unsaved changes):q!
or ZQ
: quit and throw away unsaved changes:wqa
: write (save) and quit on all tabs/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:noh[lsearch]
: remove highlighting of search matches:vim[grep] /pattern/ {
{file}}
: search for pattern in multiple files (e.g. :vim[grep] /foo/ **/*
):cn[ext]
: jump to the next match:cp[revious]
: jump to the previous match:cope[n]
: open a window containing the list of matches:ccl[ose]
: close the quickfix window:tabnew
or :tabnew {page.words.file}
: open a file in a new tabCtrl
+ wT
: move the current split window into its own tabgt
or :tabn[ext]
: move to the next tabgT
or :tabp[revious]
: move to the previous tab#gt
: move to tab number #:tabm[ove] #
: move current tab to the #th position (indexed from 0):tabc[lose]
: close the current tab and all its windows:tabo[nly]
: close all tabs except for the current one:tabdo [command]
: run the command on all tabs (e.g. :tabdo q - closes all opened tabs):e[dit] file
: edit a file in a new buffer:bn[ext]
: go to the next buffer:bp[revious]
: go to the previous buffer:bd[elete]
: delete a buffer (close a file):b[uffer]#
: go to a buffer by index #:b[uffer] file
: go to a buffer by file:ls or :buffers
: list all open buffers:sp[lit] file
: open a file in a new buffer and split window:vs[plit] file
: open a file in a new buffer and vertically split window:vert[ical] ba[ll]
: edit all buffers as vertical windows:tab ba[ll]
: edit all buffers as tabsCtrl
+ ws
: split windowCtrl
+ wv
: split window verticallyCtrl
+ ww
: switch windowsCtrl
+ wq
: quit a windowCtrl
+ wx
: exchange current window with next oneCtrl
+ w=
: make all windows equal height & widthCtrl
+ 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)Ctrl
+ wH
: make current window full height at far left (leftmost vertical window)Ctrl
+ wL
: make current window full height at far right (rightmost vertical window)Ctrl
+ wJ
: make current window full width at the very bottom (bottommost horizontal window)Ctrl
+ wK
: make current window full width at the very top (topmost horizontal window)zf
: manually define a fold up to motionzd
: delete fold under the cursorza
: toggle fold under the cursorzo
: open fold under the cursorzc
: close fold under the cursorzr
: reduce (open) all folds by one levelzm
: fold more (close) all folds by one levelzi
: toggle folding functionality]c
: jump to start of next change[c
: jump to start of previous changedo
or :diffg[et]
: obtain (get) difference (from other buffer)dp
or :diffpu[t]
: put difference (to other buffer):diffthis
: make current window part of diff:dif[fupdate]
: update differences:diffo[ff]
: switch off diff mode for current windowTip: The commands for folding (e.g.
za
) operate on one level. To operate on all levels, use uppercase letters (e.g.zA
).
Tip: To view the differences of files, one can directly start Vim in diff mode by running
vimdiff
in a terminal. One can even set this asgit difftool
.