!ls - execute ls in shell
Ctrl+q - block select
Ctrl+q, I - insert mode across multi-line block selection (operates across selection after Esc is pressed)
qx - record macro x
@@ - replay last macro
2@x - replay x twice
Ctrl+6 - edit last file (think of it like Ctrl+^ or ^^)
g; - previous change
gq - reformat
O - other end of visual selection
:split - horizontal split the current file
:vsplit - vertical split the current file
Ctrl+W, n - horizontal split, New file
Ctrl+W, v - vertical split
Ctrl+W, hjkl - move between window splits in a direction
Ctrl+W, w - cycle between window splits
Ctrl+W, o - get rid of all splits except one (“Only One”)
cgn - change next match of last search (like pressing n but removes the match), useful for replacing all matches with . (e.g. search for “bar”, then cgnFoo<Esc>…… to replace every match)
Ctrl+o / Ctrl+i - jump through locations
’. - last edited line
[^\x00-\x7F] - find non-acii chars
Open explorer :!start explorer /select,%:p
cc - change current line from indent (like _C)
:bro[wse] ol[dfiles]
'0 to ‘9 - open file from oldfiles with this number
^ - previously opened file
:g/^$/d - delete blank lines
:g/foo/d - delete lines with “foo"
:g!/foo/d - delete lines without “foo"
:g//d - delete lines matching last search pattern
J - joins current line, or selected lines
ggVGJ - select all lines and join them
%s/\v(.)/'\1’, - surround every line with quotes and a comma (e.g. for use with sql WHERE IN)
:r - “read”, like :e but inserts output into current file
:r !ls - inserts output of ls at cursor
:r file - inserts contents of file at cursor
run macro x on every line in a selection (make sure the macro doesn’t include j)
:'<,'>normal @x
:vertical diffsplit <file> - open file in a vertical diff split
dp (in diff mode) - “diff put” - put diff at cursor into other buffer.
do - “diff obtain” opposite of dp. replace contents of diff at cursor with contents of other buffer
:sort - sorts highlighted lines
:g/^(.)$\n\1$/p - highlight duplicate lines (once sorted), by matching each line as group 1, then a newline and group 1 again.
Plugins
vim-indent-object
surround.vim
Movements work similar to visual mode movements
csw( - surround the current word-like object with brackets
csW( - like csw but only delimited by whitespace
cs({ - changes surrounding brackets into braces
ysiwb - “you surround inside word brackets"
ysawB - “you surround around word braces"
ysip<p> - “you surround inside paragraph <p>“