diff --git a/tools/vim.md b/tools/vim.md
new file mode 100644
index 0000000..293af71
--- /dev/null
+++ b/tools/vim.md
@@ -0,0 +1,526 @@
+# 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