VIM Cheat sheet
:set list,\l- show invisibles:retab!- auto converting between tabs and spaces:set expandtab,retab!- to spaces:set noexpandtab,retab!- to tabs
.- repeat
h,j,k,l- left, down, up, rightgj- go down display linegk- go up display line0- to the first character of real lineg0- to the first character of display line^- to the first nonblank character of lineg^- to the first nonblank character of display line$- to the end of real lineg$- to the end of display linew- forward to start of next wordW- to the next WORDb- backward to start of current/previous wordB- backward to start of current/previous WORDe- forward to end of current/next wordE- forward to end of current/next WORDge- backward to end of previous wordgE- backward to end of previous WORD<number>G- to the linegg- beginning of the fileG- end of the file^G- show current line%- move to matching bracketsf<char>- find nextF<char>- find backwardt<char>- find next char and place cursor beforeT<char>- find next char and place cursor before backward;- go to the next off/t,- go to previous off/tg;- back to the last changeg,- forward to the next change:changes- list changes{number}+- go to the{number}lines down{number}-- go to the{number}lines up
m{a-zA-Z}- set a mark`{mark}- go to the exact mark place'{mark}- go the first non-whitespace character on where mark was set
`- Position before the last jump within current file.- Location of last change^- Location of last insertion[- Start of last change or yank]- End of last change or yank<- Start of last visual selection>- End of last visual selection
/<text>- forward searchd/ge- delete till you findgev/ge- select tillge/{text}\c- case insensitive/{text}\C- case sensitive/\v{regex}- very magic search (more close to regex)/\V{text}- very nomagic/\v<{word}>- search for the word\zs,\ze- helps to define boundaries of a match, for example/Practical \szVim<CR>
?<text>- backward search:hlsearch- highlight search results*- find next current wordn- next occurrence in same directionN- next occurrence in opposite direction
:[range]s/{pattern}/{string}/{flags} [count]- replace
g- globally (within line)c- confirm changesyto substitute this matchnto skip this matchescto skip this matchato substitute this and all remaining matches {not in Vi}qto quit substituting {not in Vi}⌃Eto scroll the screen up {not in Vi}⌃Yto scroll the screen down {not in Vi}
&- same flags as previous invocation of substitutee- subpress errorsi- ignore case for the patternI- don't ignore case for the patternp- print the line containing last substitute
%- whole file<n>,<m>- between lines (including)
\r- carriage return\t- tab\\- single backslash\1- first submatch\0,&- entire matches pattern~- use string from previous invocation of substitute\={Vim script}- evaluate script
O- insert line above the cursoro- insert line below the cursorA- start typing at the end of lineI- start typing at the beginning of the linea- start typing after cursori- start typing in place of cursorC- replace from cursor to the end of the lineS- replace whole lines- replace current selectionx- replace under cursorr<char>- replace char under cursor withgr- virtual replace, if tabs = spacesR- in place replacement (more than one letter)gR- virtual replace, if tabs = spaces{register}d{motion}- delete {motion}"_d{motion}- to delete in black hole (not a cut)c<motion>- change{register}y<motion>- yank~<motion>- swap case (when selected)u<motion>- lowercase (when selected)U<motion>- uppercase (when selected)><motion>- shift right (>>line)<<motion>- shift left (<<line)=<motion>- autoindentu,:u[ndo]- ungo changes⌃R,:red[o]- redo changesU- undo all latest changes on the line
⌃w- delete word⌃u- delete line⌃b- backspace⌃[- as escape⌃o- insert Normal Mode (just for one command)⌃r{register}- paste in insert mode⌃r={expression}- evaluate expression and paste:let i = 1^r=i<CR>- insert i from let
⌃v[u]{digit}- insert letter by code⌃k{char1}{char2}- insert letter by :diagraphs (<< >> 12 14 34) see:diagraph-table
v- character-wiseV- line-wise⌃v- block-wisegv- reselecto- go to the other end of the highlighted text
a),ab- a pair of(parentheses)i),ib- inside of(parentheses)ci)- replace everything inside(...)
a},aB- a pair of{braces}i},iB- inside of{braces}a]- a pair of[brackets]i]- inside of[brackets]a>- a pair of<angle brackets>i>- inside of<angle brackets>a'- a pair of'single quotes'i'- inside of'single quotes'a"- a pair of"double quotes"i"- inside of"double quotes"a`- a pair ofbacktricksi`- inside of backtricksat- a pair of<xml>tags</xml>it- inside of<xml>tags</xml>iw- current wordciw- replace current word.
aw- current word plus one spacedaw- delete word and one space after it.
iW- current WORDaW- current WORD plus one spaceis- current sentenceas- current sentence plus one spaceip- current paragraphap- current paragprah plus one blank line
{register}p- paste text:put {register}- paste from register below current line⌃r{register}- paste in insert mode, where register can be",0,+gp- paste and place cursor at the end of pasted text
{register}P- paste previous{register}y{motion}- yankyy- yank the line- by default yank always puts everything into unnamed and 0 registers
- uppercase registes are used for append
"+,"*- system clipboard
:reg- see content of all registers"%- name of current file"#- name of the alternate file".- last inserted text":- last Ex command"/- last search pattern
⌃w w- next window⌃w h- next window on left⌃w j- next window below⌃w k- next window above⌃w l- next window rigth⌃w c,:close,:cl- close current window⌃w o,:only,:on- keep only current window open⌃w =- equalize width and height of all windows⌃w _- maximize height of active window⌃w |- maximize width of active window{n} ⌃w _- set active window height to{n}rows{n} ⌃w |- set active window width to {n} rows⌃w s,:split {filename}- split by horizontally⌃w v,:vsplit {filename}- split by vertically⌃w H,⌃w J,⌃w K,⌃w L- swap windows (:help window-moving)⌃w x- rotate current window (:help window-moving)⌃w r- rotate all windows (:help window-moving)^w z- close preview window
:tabedit {filename},:tabe {filename}- open filename in new tab^w T- move current window into its own tab:tabc[lose]- close current tab:tabo[nly]- keep the active tab page{N}gt,:tabn[ext] {N}- switch to tab page number{N}gt,:tabn[ext]- switch to next tabgT,:tabp[revious]- switch to the previous tab:tabmove [N]- rearrange the tab
:ls- list of buffers[b,:bn[ext]- next buffer]b,:bp[revious]- previous buffer[B,:bfirst- go to the first in the buffer]B,:blast- go to the last in the buffer:buffer N- go to the buffer N⌃-^- alternate file:bd[elete]- delete current buffer:bufdo {command}- execute command for each buffer
:args- see args passed to the vim:args {list}- build arguments list:args **/*.js **/*.css- load all js and css files in args
:argdo command- execute command on each argument:argdo normal @a- execute macro a for each file in args:argdo write- write all files
]a,:next- go to the next in args[a,:prev- go to the prev in args]A,:first- go to the first in args[A,:last- go to the last in args
⌃o- jump to previous location⌃i- jump to forward location:jumps- show all jumps^]- jump to definition of keyword under the cursor- Use ctags to generate ctags file
⌃t,:pop- to navigate back for our tag historyg ⌃]>- if multiple matches - show choices:tselect,:tnext,:tprev,:tfirst,:tlast- navigate between multiple choices:tag {keyword}- jump to definition:tjump {keyword}- jump and ask for multiple:tjump /{regex}- try to find
gf- jump to file name under the cursor:set suffixesadd+=.rbto add specific suffix:set path+=,%:hto add current directory
(,)- jump to start of previous/next sentence{,}- jump to start of previous/next paragraph
ga- find code of selected character:set nowrap- unwrap lines:setlocal spell- turn on spell check@:- repeat the last ex command⌃r,⌃w- copy and paste current word to the command line⌃p,Up- previous item from history⌃n,Down- next item from historyq:- see history of command lineq/- see history of searches:sh- go to shell:e <filename>- open file name for edit:e!- re-read file from the disk (discard all changes):e %<Tab>- to get edit current opened file:e %:h<Tab>- to get edit directory of current opened file
:w <filename>- write current to file (whole file or selection):wall- write all buffers:update <filename>- same as write, but only if modified:r <command|filename>- read from external file or command and paste:!{command}- execute command with shell:2,$!sort -t',' -k2- sort all lines except header by second columnread !{cmd}- executecmdin shell and insert its stdout below cursor:[range]write !{cmd}- executecmdin the shell with[range]lines as stdin
:[range]t {address},:[range]co[py] {address}- copy line(s) from [range] and paste to {address}.- instead of address means current line:6copy.- copy from line 6 and insert on current line:t6- copy current line to below line 6:t.- duplicate the current line:t$- copy the current line to the end of the file'<,'>t0- copy the visually selected lines to the start of the file
:[range]m[ove] {address}- move line(s) from [range] and paste to {address}:[range]normal {command}- execute command on selected range:%normal i//- instead//for whole file (command all lines)'<,'>normal .- repeat last command for selected lines
:[range] gloabl[!] /{pattern}/ [cmd]- execute command on range with matched pattern:v,:vglobal- execute cmd on each line which does not match pattern
:sort- sort selected lines:grep- grep in files:grep -R Quickfix *- search in all directories
:vim[grep][!] /{pattern}/[g][j] {file} ...- search with internal vim grepg- multiple matches on the same linej- don't jump to first match
:make- execute make command:setlocal makepkg=NODE_DISABLE_COLORS=1\ nodelint\ %- change make program:setglobal errorformat?- see how errors are getting formatted:compiler- to set compiler
q{register}{macro}q- start recording macros- Uppercase register appends to the macro
@{register}- replay macro10@a- execute 10 times macro from registera
:cnext- jump to next item:cprev- jump to previous item:cfirst- jump to first item:clast- jump to last item:cnfile- jump to first item in next file:cpfile- jump to last item in previous file:cc N- jump to Nth item:copen- open the quickfix window:cclose- close the quickfix window:colder- older version of the quickfix list:cnewer- newer version of the quickfix list
⌃n- generic keywords⌃p- generic keywords (previous)⌃y- accept the currently selected match (yes)⌃e- revert to the originally typed text⌃h- delete one character from current match⌃l- add one character from current match⌃x ⌃n- current buffer keywords⌃x ⌃i- included file keywords⌃x ⌃]- tags file keywords⌃x ⌃k- dictionary lookup:set spellshould be enabled
⌃x ⌃l- whole line completion⌃x ⌃f-filename completion:pwd- to from where autocompletion will work:cd public- to change to folder:cd -- to previous working directory
⌃x ⌃o- omni-completion
:set spell- enable spell checkingspellfileto share file with custom words
:set spelllang=en_us- change speaking region[s- previous error]s- next errorz=- fix errorzg- add current word to spell filezw- remove current word from the spell filezug- revertzgorzwcommand for current word⌃x s- fix misspelled word in insert mode
zi- switch folding on or offza- toggle current fold open/closedzc- close current foldzR- open all foldszM- close all foldszv- expand folds to reveal cursorzj- move down to top of next foldzk- move up to bottom of previous foldzo- open current foldzO- recursively open current foldzc- close current foldzC- recursively close current foldza- toggle current foldzA- recursively open/close current foldzm- reduce foldlevel by onezM- close all foldszr- increase foldlevel by onezR- open all folds
:q[uit]- quit vim:q[uit]!- quit without saving:cq[uit]- quit always, without writingZZ,:wq- write and quitZQ,:wq!- write current file and exit always:wq {file}- write to{file}and exit after
vim -u NONE -N- launch vim without settings
S"- surround selection with"cs}]- change surrounding from}to]
K- show help for current symbol[ [- Jump to previous class or function (normal, visual, operator modes)] ]- Jump to next class or function (normal, visual, operator modes)[M- Jump to previous class or method (normal, visual, operator modes)]M- Jump to next class or method (normal, visual, operator modes)aC- Select a class. Ex: vaC, daC, yaC, caC (normal, operator modes)iC- Select inner class. Ex: viC, diC, yiC, ciC (normal, operator modes)aM- Select a function or method. Ex: vaM, daM, yaM, caM (normal, operator modes)iM- Select inner function or method. Ex: viM, diM, yiM, ciM (normal, operator modes)^r- Run script^b- Set breakpoint
^c-d- Show doc^c-rr- Rename^c-r1r- Rename module^c-ro- Organize imports^c-r1p- Convert module to package^c-rm- Extract method^c-rl- Extract variable^Space- Rope completion