# VIM CHEATSHEET #### WEBSITE: http://www.vim.org/ #### DOCUMENTATION: https://vim.sourceforge.io/docs.php ### Table of Contents * [CURSOR MOVEMENTS](#cursor-movements) * [BOOKMARKS](#bookmarks) * [INSERT MODE](#insert-mode) * [EDITING](#editing) * [DELETING TEXT](#deleting-text) * [COPYING AND MOVING TEXT](#copying-and-moving-text) * [MACROS](#macros) * [VISUAL MODE](#visual-mode) * [SPELLING](#spelling) * [EXITING](#exiting) * [SEARCH/REPLACE](#search-replace) * [MULTIPLE FILES](#multiple-files) * [WINDOWS](#windows) * [QUICKFIX WINDOW](#quickfix-window) * [PROGRAMMING](#programming)
Plugins #### Plugins * [ACK](#plugins>ack) * [CHEAT](#plugins>cheat) * [GIST](#plugins>gist) * [GUNDO](#plugins>gundo) * [LUSTYJUGGLER](#plugins>lustyjuggler) * [NERDCOMMENTER](#plugins>nerdcommenter) * [NERDTREE](#plugins>nerdtree) - [FILE](#file) - [DIRECTORY](#directory) - [BOOKMARK](#bookmark) - [TREE NAVIGATION](#tree-navigation) - [FILESYSTEM](#filesystem) - [TREE FILTERING](#tree-filtering) - [OTHER](#other) * [PDV](#plugins>pdv) * [PICKACOLOR](#plugins>pickacolor) * [SNIPMATE](#plugins>snipmate) * [SPARKUP](#plugins>sparkup) * [SURROUND](#plugins>surround) * [TABULAR](#plugins>tabular) * [TAGLIST](#plugins>taglist) * [UNIMPAIRED](#plugins>unimpaired) * [VIM-FUGITIVE](#plugins>vim-fugitive) * [VIM-MARKDOWN-PREVIEW](#plugins>vim-markdown-preview) * [VIM-PEEPOPEN](#plugins>vim-peepopen) * [VIM-SYMFONY](#plugins>vim-symfony)
* [PERSONAL .VIMRC](#personal-vimrc) ## CURSOR MOVEMENTS * `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) * `ge` jump backward to end of words * `0` (zero) start of line * `^` first non-blank character of line * `$` end of line * `-` move line upwards, on the first non blank character * `+` move line downwards, on the first non blank character * `` move line downwards, on the first non blank character * `gg` go to first line * `G` go to last line * `nG` go To line n * `:n` go To line n * `)` move the cursor forward to the next sentence. * `(` move the cursor backward by a sentence. * `{` move the cursor a paragraph backwards * `}` move the cursor a paragraph forwards * `]]` move the cursor a section forwards or to the next { * `[[` move the cursor a section backwards or the previous { * `CTRL-f` move the cursor forward by a screen of text * `CTRL-b` move the cursor backward by a screen of text * `CTRL-u` move the cursor up by half a screen * `CTRL-d` move the cursor down by half a screen * `H` move the cursor to the top of the screen. * `M` move the cursor to the middle of the screen. * `L` move the cursor to the bottom of the screen. * `fx` search line forward for 'x' * `Fx` search line backward for 'x' * `tx` search line forward before 'x' * `Tx` search line backward before 'x' ## BOOKMARKS * `:marks` list all the current marks * `ma` make a bookmark named a at the current cursor position * `` `a `` go to position of bookmark a * `'a` go to the line with bookmark a * `` `.`` go to the line that you last edited ## INSERT MODE * `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 * `O` open blank line above current line * `Esc` exit insert mode ## EDITING * `r` replace a single character (does not use insert mode) * `R` enter Insert mode, replacing characters rather than inserting * `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 substitute text * `S` delete line at cursor and substitute text (same as cc) * `xp` transpose two letters (delete and paste, technically) * `u` undo * `CTRL-r` redo * `.` repeat last command * `~` switch case * `g~iw` switch case of current word * `gUiw` make current word uppercase * `guiw` make current word lowercase * `gU$` make uppercase until end of line * `gu$` make lowercase until end of line * `>>` indent line one column to right * `<<` indent line one column to left * `==` auto-indent current line * `ddp` swap current line with next * `ddkP` swap current line with previous * `:%retab` fix spaces / tabs issues in whole file * `:r [name]` insert the file [name] below the cursor. * `:r !{cmd}` execute {cmd} and insert its standard output below the cursor. ## DELETING TEXT * `x` delete current character * `X` delete previous character * `dw` delete the current word * `dd` delete (cut) a line * `D` delete from cursor to end of line * `:[range]d` delete [range] lines ## COPYING AND MOVING TEXT * `yw` yank word * `yy` yank (copy) a line * `2yy` yank 2 lines * `y$` yank to end of line * `p` put (paste) the clipboard after cursor/current line * `P` put (paste) before cursor/current line * `:set paste` avoid unexpected effects in pasting * `:registers` display the contents of all registers * `"xyw` yank word into register x * `"xyy` yank line into register x * `:[range]y x` yank [range] lines into register x * `"xp` put the text from register x after the cursor * `"xP` put the text from register x before the cursor * `"xgp` just like "p", but leave the cursor just after the new text * `"xgP` just like "P", but leave the cursor just after the new text * `:[line]put x` put the text from register x after [line] ## MACROS * `qa` start recording macro 'a' * `q` end recording macro * `@a` replay macro 'a' * `@:` replay last command ## 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 * `U` upper case 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 MODE COMMANDS * `>` shift right * `<` shift left * `c` change (replace) marked text * `y` yank (copy) marked text * `d` delete marked text * `~` switch case ## SPELLING * `]s` next misspelled word * `[s` previous misspelled word * `zg` add word to wordlist * `zug` undo last add word * `z=` suggest word ## EXITING * `:q` quit Vim. This fails when changes have been made. * `:q!` quit without writing. * `:cq` quit always, without writing. * `:wq` write the current file and exit. * `:wq!` write the current file and exit always. * `:wq {file}` write to {file}. Exit if not editing the last * `:wq! {file}` write to {file} and exit always. * `:[range]wq[!]` same as above, but only write the lines in [range]. * `ZZ` write current file, if modified, and exit. * `ZQ` quit current file and exit (same as ":q!"). ## SEARCH/REPLACE * `/pattern` search for pattern * `?pattern` search backward for pattern * `n` repeat search in same direction * `N` repeat search in opposite direction * `*` search forward, word under cursor * `#` search backward, word under cursor * `:%s/old/new/g` replace all old with new throughout file * `:%s/old/new/gc` replace all old with new throughout file with confirmation * `:argdo %s/old/new/gc | wq` open multiple files and run this command to replace old with new in every file with confirmation, save and quit ## MULTIPLE FILES * `:e filename` edit a file in a new buffer * `:tabe filename` edit a file in a new tab (Vim7, gVim) * `:ls` list all buffers * `:bn` go to next buffer * `:bp` go to previous buffer * `:bd` delete a buffer (close a file) * `:b1` show buffer 1 * `:b vimrc` show buffer whose filename begins with "vimrc" ## WINDOWS * `:sp f` split open f * `:vsp f` vsplit open f * `CTRL-w s` split windows * `CTRL-w w` switch between windows * `CTRL-w q` quit a window * `CTRL-w v` split windows vertically * `CTRL-w x` swap windows * `CTRL-w h` left window * `CTRL-w j` down window * `CTRL-w k` up window * `CTRL-w l` right window * `CTRL-w +` increase window height * `CTRL-w -` decrease window height * `CTRL-w <` increase window width * `CTRL-w >` decrease window width * `CTRL-w =` equal window * `CTRL-w o` close other windows ## QUICKFIX WINDOW * `copen` open quickfix window * `cclose` close quickfix window * `cc [nr]` display error [nr] * `cfirst` display the first error * `clast` display the last error * `[count]cn` display [count] next error * `[count]cp` display [count] previous error ## PROGRAMMING * `%` show matching brace, bracket, or parenthese * `gf` edit the file whose name is under or after the cursor * `gd` when the cursor is on a local variable or function, jump to its declaration * `''` return to the line where the cursor was before the latest jump * `gi` return to insert mode where you inserted text the last time * `CTRL-o` move to previous position you were at * `CTRL-i` move to more recent position you were at ## PLUGINS > ACK * `:Ack` Search recursively in directory * `o` to open (same as enter) * `go` to preview file (open but maintain focus on ack.vim results) * `t` to open in new tab * `T` to open in new tab silently * `q` to close the quickfix window ## PLUGINS > CHEAT * `:Cheat` open cheat sheet (with autocomplete) * `ch` open cheat sheet for word under the cursor ## PLUGINS > GIST * `:Gist` post whole text to gist * `:Gist XXXXX` get gist XXXXX * `:Gist -l` list my gists ## PLUGINS > GUNDO * `:GundoToggle` show undo tree ## PLUGINS > LUSTYJUGGLER * `lj` show open buffers ## PLUGINS > NERDCOMMENTER * `cc` comment out line(s) * `c` toggle the comment state of the selected line(s) ## PLUGINS > NERDTREE * `:NERDTreeToggle` show / hide file browser * `:NERDTreeFind` show current file in file browser * `:Bookmark name` bookmark the current node as "name" #### FILE * `o` open in prev window * `go` preview * `t` open in new tab * `T` open in new tab silently * `i` open split * `gi` preview split * `s` open vsplit * `gs` preview vsplit #### DIRECTORY * `o` open & close node * `O` recursively open node * `x` close parent of node * `X` close all child nodes of current node recursively * `e` explore selected dir #### BOOKMARK * `o` open bookmark * `t` open in new tab * `T` open in new tab silently * `D` delete bookmark #### TREE NAVIGATION * `P` go to root * `p` go to parent * `K` go to first child * `J` go to last child * `CTRL-j` go to next sibling * `CTRL-k` go to prev sibling #### FILESYSTEM * `C` change tree root to the selected dir * `u` move tree root up a dir * `U` move tree root up a dir but leave old root open * `r` refresh cursor dir * `R` refresh current root * `m` show menu * `cd` change the CWD to the selected dir #### TREE FILTERING * `I` hidden files * `f` file filters * `F` files * `B` bookmarks #### OTHER * `q` close the NERDTree window * `A` zoom (maximize-minimize) the NERDTree window * `?` toggle help ## PLUGINS > PDV * `CTRL-P` generate PHP DOC ## PLUGINS > PICKACOLOR * `:PickHEX` choose color in system color picker ## PLUGINS > SNIPMATE * `` expand snippet ## PLUGINS > SPARKUP * `CTRL-e` execute sparkup (zen coding expansion) * `CTRL-n` jump to the next empty tag / attribute ## PLUGINS > SURROUND * `cs'"` change surrounding quotes to double-quotes * `cs(}` change surrounding parens to braces * `cs({` change surrounding parens to braces with space * `ds'` delete surrounding quotes * `dst` delete surrounding tags * `ysiw[` surround inner word with brackets * `vees'` surround 2 words (ee) with quotes ' ## PLUGINS > TABULAR * `:Tabularize /,` line the selected lines up on the commas ## PLUGINS > TAGLIST * `:TlistToggle` open / close taglist window * `` jump to tag or file * `` display the tag prototype ## PLUGINS > UNIMPAIRED * `[space` new line above * `]space` new line below * `[e` exchange line above * `]e` exchange line below * `[x` XML encode * `]x` XML decode (with htmlentities) * `[q` jump to previous quickfix item * `]q` jump to next quickfix item * `[Q` jump to first quickfix item * `]Q` jump to last quickfix item ## PLUGINS > VIM-FUGITIVE * `:Git` run a git command * `:Gstatus` git status : - to (un)stage , p to patch, C to commit * `:Gcommit` git commit * `:Gread` empty the buffer and revert to the last commit * `:Gwrite` write the current file and stage the results * `:Gmove` git mv * `:Gremove` git rm * `:Glog` git log * `:Gdiff` perform a vimdiff against the current file of a certain revision * `:Gblame` open blame information in a scroll bound vertical splitt * `:Gbrowse` open github ## PLUGINS > VIM-MARKDOWN-PREVIEW * `:Mm` preview markdown document in webbrowser ## PLUGINS > VIM-PEEPOPEN * `p` open the current directory with the peepopen application (fuzzy search) ## PLUGINS > VIM-SYMFONY * `:Sview` open template file * `:Saction` open action file * `:Smodel` open model file * `:Sfilter` open filter file * `:Sform` open form file * `:Spartial` open partial file / write selected content in partial + include * `:Scomponent` open component file / write selected content in component + include * `:Salternate` open alternate model file (class - table class) * `:Symfony` execute task ## PERSONAL .VIMRC * `ev` edit vimrc file * `sv` reload vimrc file * `sh` show syntax highlighting groups for word under cursor * `` page down * `jj` exit insertion mode * `q` close the current window * `/` clear the search register * `h` toggle hidden characters * `W` strip all trailing whitespace * `CTRL-h` go to left window * `CTRL-j` go to down window * `CTRL-k` go to top window * `CTRL-l` go to right window * `w` open vertical split window and activate * `%%` will expand to current directory * `ew` open file from current directory * `es` open file in split window from current directory * `cd` change directory to parent dir of current file * `##` will expand to webroot * `:Wrap` wrap text * `` toggle wrapped text * `` toggle spell check * `` toggle light/dark background * `` underline with dashes * `` underline with double lines * `` bubble line(s) up * `` bublle line(s) down * `:Ltag` load tags file * `:Project` cd to project and load tags file * `t` show current tag for word under cursor * `st` show current tag for word under cursor in split window * `tj` show current tag list for word under cursor * `stj` show current tag list for word under cursor in split window * `CTRL-` show omnicomplete menu * `b` surround with strong tags * `i` surround with em tags * `CTRL-p` generate PHP DOC * `a` run Ack * `md` preview markdown * `s` preview in safari * `x` colorpicker * `n` toggle Nerdtree * `N` close Nerdtree * `f` find current file in Nerdtree * `l` toggle Taglist * `L` close Taglist * `ph` set filetype to php.html * `r` reload all snipmate snippets * `CTRL-` switch between buffers * `CTRL-y` go to next tag of attribute in sparkup plugin * `g` toggle Gundo window * `IMG` show image browser to insert image tag with src, width and height * `b` insert image tag with dimensions from NERDTree http://stackoverflow.com/questions/5707925/vim-image-placement