Files
awesome-cheatsheets/tools/vim.md
2018-04-16 20:23:13 -07:00

20 KiB

VIM CHEATSHEET

WEBSITE: http://www.vim.org/

DOCUMENTATION: https://vim.sourceforge.io/docs.php

Table of Contents

Plugins

Plugins

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
  • <enter> 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)
  • <leader>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

  • <Leader>lj show open buffers

PLUGINS > NERDCOMMENTER

  • <leader>cc comment out line(s)
  • <leader>c<space> 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

  • <tab> 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
  • <enter> jump to tag or file
  • <space> 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

  • <Leader>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

  • <leader>ev edit vimrc file

  • <leader>sv reload vimrc file

  • <leader>sh show syntax highlighting groups for word under cursor

  • <space> page down

  • jj exit insertion mode

  • <leader>q close the current window

  • <leader>/ clear the search register

  • <leader>h toggle hidden characters

  • <leader>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

  • <leader>w open vertical split window and activate

  • %% will expand to current directory

  • <leader>ew open file from current directory

  • <leader>es open file in split window from current directory

  • <leader>cd change directory to parent dir of current file

  • ## will expand to webroot

  • :Wrap wrap text

  • <F2> toggle wrapped text

  • <F3> toggle spell check

  • <F4> toggle light/dark background

  • <F5> underline with dashes

  • <F6> underline with double lines

  • <leader><up> bubble line(s) up

  • <leader><down> bublle line(s) down

  • :Ltag load tags file

  • :Project cd to project and load tags file

  • <leader>t show current tag for word under cursor

  • <leader>st show current tag for word under cursor in split window

  • <leader>tj show current tag list for word under cursor

  • <leader>stj show current tag list for word under cursor in split window

  • CTRL-<space> show omnicomplete menu

  • <leader>b surround with strong tags

  • <leader>i surround with em tags

  • CTRL-p generate PHP DOC

  • <leader>a run Ack

  • <leader>md preview markdown

  • <leader>s preview in safari

  • <leader>x colorpicker

  • <leader>n toggle Nerdtree

  • <leader>N close Nerdtree

  • <leader>f find current file in Nerdtree

  • <leader>l toggle Taglist

  • <leader>L close Taglist

  • <leader>ph set filetype to php.html

  • <leader>r reload all snipmate snippets

  • CTRL-<tab> switch between buffers

  • CTRL-y go to next tag of attribute in sparkup plugin

  • <leader>g toggle Gundo window

  • IMG<CR> 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