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 matchpairsin 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:wqor:xorZZ– 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:wqaor: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:bnextor:bn– go to the next buffer:bprevor: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):onlyor:on– Show only the current file













