# 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