Useful Vim Stuff

!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

<count>ai An Indentation level and line above.
<count>ii Inner Indentation level (no line above).
<count>aI An Indentation level and lines above/below.

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>“