Skip to content

Instantly share code, notes, and snippets.

@socketwiz
Last active October 13, 2021 14:15
Show Gist options
  • Save socketwiz/2645891 to your computer and use it in GitHub Desktop.
Save socketwiz/2645891 to your computer and use it in GitHub Desktop.
Vim cheat sheet

motions

motion description
h Count characters left
l Count characters right
^ To the first character of the line
$ To the last character of the line
f<char> To the counth character occurrence to the right. F<char> to the counth character occurrence to the left
t<char> To 1 character just before the counth character occurrence to the right
T<char> To 1 character just before the counth character occurrence to the left
w Count words forward
W Count words forward (different definition for what a word is, includes special characters and such)
e Count forward to the end of word
b Count words backward
i<{<"'> Inside something like inside brackets or parenthesis for example
trigger effect
c{motion} Change
d{motion} Delete
y{motion} Yank into register
g~{motion} Toggle case
gu{motion} Make lowercase
gU{motion} Make uppercase
>{motion} Shift right
<{motion} Shift left
={motion} Auto-indent

buffer management

command description
<C-^> or <C-6> Switch to the buffer you just left

split windows

command description
<C-w>s or :sp[lit] <file> Split file horizontally.
<C-w>v or :vsp[lit] <file> Split file vertically
<C-w>w cycle between open windows
<C-w>h focus the window to the left
<C-w>j focus the window below
<C-w>k focus the window above
<C-w>l focus the window to the right
:cl[ose] <C-w>c close the active window
:on[ly] <C-w>o keep only the active window, closing all others

spelling

command description
]s Jump to next spelling error
[s Jump to previous spelling error
z= Suggest corrections for current word
zg Add the current word to spell file
zw Remove the current word from spell file

code folding

command description
zf{motion} folds code when "foldmethod" set to manual or "marker"
za toggle fold at cursor
zo opens fold at cursor
zc close fold at cursor
zR open all
zM close all

search and replace

command description
:args **/*.txt Multi-file Step 1) populate the argument list with the files you want to search
:argdo %s/search/replace/gc Mult-file Step 2) replace all occurrences of search with replace but prompt before doing so
* search for the word under the cursor

jumps

command description
:jumps display the jump list
<C-o> jump backwards through the jump list
<C-i> jump forwards through the jump list
:changes display the change list
g; jump backwards through the changes list
g, jump forwards through the changes list
gf jump to the file name under the cursor

changes

command description
:changes display the change list
g; jump backwards through the changes list
g, jump forwards through the changes list
gf jump to the file name under the cursor

marks

command description
:marks display the marks list
m<upper case> set a file bookmark
m<lower case> set a buffer bookmark
'<character> jump to the mark
'' jump to the line in the current buffer where jumped from
:delmarks <character> delete specified mark
:delmarks a-d delete marks a through d
:delmarks a,b,x,y delete only marks a,b,x and y
:delmarks! delete all lower case marks

registers

command description
:registers display the register list
"<lower case register>{motion} overwrite or use contents of register
"<upper case register>{motion} append or use contents of register
0 populated with last yanked text

macros

command description
q{register} start recording and store it in the specified register
q stop recording
{count}@{register} execute specified macro count times

ctags

command description
:tags display the tags stack
<C-]> goto definition
<C-t> goto previous
:ta<method> takes you to the method definition where method definition could be a regex that produces a list
:tn: goes to next in list
:tp goes to previous in list
:tf goes to first in list
:tl goes to last in list

quickfix window

command description
:copen Open the quickfix window
:ccl Close it
:cw Open it if there are "errors", close it otherwise (some people prefer this)
:cn Go to the next error in the window
:cnf Go to the first error in the next file
:cc{num} Go to the error by number

Navigation

key move to
% End of construct
[[ Backwards to the beginning of the current function.
][ Forwards to the beginning of the current function.
]} Beginning of the current block.
[{ End of the current block.
}[ Beginning of the current comment block.
}] End of the current comment block.
gd First usage of the current variable name. (Mnemonic: go to definition).
gD Go to the first global usage of the current variable name.
gg beginning of file
G end of file

Addon References

command description
cs<current><new> change old delimeter to new
ds remove delimeters
ysiw<delimiter> wrap current word
S<delimiter> while in visual mode
S= in visual mode, rails ERB tag (requires vim-rails)
S- in visual mode, rails ERB tag (requires vim-rails)
S# in visual mode, rails ERB tag (requires vim-rails)
<C-s>= rails ERB tag (requires vim-rails)
<C-s>- rails ERB tag (requires vim-rails)
<C-s># rails ERB tag (requires vim-rails)

miscellaneous

command description
v enable characterwise Visual mode
V enable linewise Visual mode
<C-v> enable blockwise Visual mode
gv reselect the last visual selection
o go to other end of highlighted text
"+p paste from system clipboard
:0,$d delete every line in a file
<C-a> increment number
<C-x> decrement number
vit select contents inside of an HTML tag
:map List all currently define mappings
:verbose map Display where mapping was defined
g/{pattern}/d Delete every line matching pattern.
v/{pattern}/d Delete every line not matching pattern.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment