2014-2018 by fallwith
sequence | meaning |
---|---|
<C-a> | Ctrl + a |
<S-v> | Shift + v |
input | result |
---|---|
. | repeat the last edit command |
@: | repeat the last normal mode command |
@@ | repeat the previously repeated command |
input | result |
---|---|
:ls | list all open files |
:changes | list all changes made to the current file |
:map | display all defined key mappings |
:X | save and encrypt the current file |
:!{command} %:p | send the full path of the current file to {command} |
:r {source} | read from source (file or command) and put the contents at the current cursor location |
:sort | sort the selected rows |
:next | go to the next open file |
:previous | go to the previous open file |
:help license | view information about Vim's charityware license |
input | result |
---|---|
vim +{num} {file} | open the file to the given line number |
vim + {file} | open the file to the end |
input | result |
---|---|
:e {filename} | open the given file for editing |
:pwd | print the current working directory |
:e %:h | start the file path with the expansion of the full path of the current file's directory |
:find {filename} | search for the given file beneath known search paths |
:set path+={dir}/** | add {dir} and its subdirectories to the search path |
:e. | open the netrw file explorer for the current working directory |
:Explore | open the netrw file explorer for the current buffer's directory |
:Sexplore | same as :Explore, using a horizontal split |
:Vexplore | same as :Explore, using a vertical split |
% | hit % when in a netrw explorer window to create a new empty file |
R | hit R when in a netrw explorer window to rename a file |
D | hit D when in a netrw explorer window to delete a file |
<C-w> or :new | create a horizontal split window with a new unnamed buffer for editing |
:enew | open a new unnamed buffer for editing within the current window |
:vnew | create a vertical split window with a new unnamed buffer for editing |
:tabnew | create a new tab with a new unnamed buffer for editing |
input | result |
---|---|
/{pattern} | search forwards for pattern |
?{pattern} | search backwards for pattern |
n | repeat search in forwards direction |
N | repeat search in backwards direction |
% | find matching brace/bracket/parens |
* | search for the next occurrence of the word under the cursor |
# | search for the previous occurrence of the word under the cursor |
f{char} | go to the next occurrence of {char}, with the cursor placed on {char} |
F{char} | go to the previous occurrence of {char}, with the cursor placed on {char} |
t{char} | go to the next occurrence of {char}, with the cursor placed to the left of {char} |
T{char} | go to the previous occurrence of {char}, with the cursor placed to the right of {char} |
; | repeat the previous f,F,t, or T search in the same direction |
, | repeat the previous f,F,t, or T search in the opposite direction |
[I | list all occurrences of the word under the cursor |
:%s/{from}/{to}/g | replace all instances of {from} with {to} across the entire buffer |
input | result |
---|---|
<C-w> w | cycle forwards through available windows |
<C-w> W | cycle backwards through available windows |
<C-w> h | change focus to the window to the left |
<C-w> l | change focus to the window to the right |
<C-w> j | change focus to the window below |
<C-w> k | change focus to the window above |
<C-w> o or :only | make the current window be the only window |
<C-w> c or :close | close the active window |
<C-w> = | make the width and heigh of all windows equal |
<C-w> _ | maximize the height of the current window |
<C-w> | | maximize the width of the current window |
{num} <C-w> _ | set the window's height to {num} rows |
{num} <C-w> | | set the window's width to {num} columns |
:below new | create a buffer in a new horizontal split |
:below vnew | create a buffer in a new vertical split |
{num} <C-w> + | increase the height of a horizontal split by the given number of rows |
{num} <C-w> - | decrease the height of a horizontal split by the given number of rows |
{num} <C-w> > | increase the width of a vertical split by the given number of columns |
{num} <C-w> < | decrease the width of a vertical split by the given number of columns |
input | result |
---|---|
za | toggle fold (closes if open, opens if closed) |
zc | close fold |
zo | open fold |
zA | toggle all folds at cursor |
zC | close all folds at cursor |
zO | open all folds at cursor |
zr | open one more level of fold throughout the entire buffer |
zR | open all folds in buffer |
input | result |
---|---|
:b{num} | jump to the buffer with the given number |
:bnext | jump to the next buffer on the list |
:bprevious | jump to the previous buffer on the list |
<C-^> | jump to the most recently used previous buffer |
{num} <C-^> | jump to the buffer with the given buffer |
:bfirst | jump to the first buffer |
:blast | jump to the last buffer |
:ls | list buffers |
:bw | wipe (close) buffer |
input | result |
---|---|
:tabedit {filename} | (or :tabe) open the given file in a new tab |
:tabs | list all open tabs |
:tabclose | (or :tabc) close the current tab |
:tabonly | (or :tabo) close all tabs except the current one |
:tabdo {command} | execute the given command across all tabs |
:tabnext or gt | (or :tabn) go to the next tab |
:tabnext {num} | (or {num} gt) (or :tabn {num}) go to tab n |
:tabprevious or gT | (or :tabp) go to the previous tab |
:tabmove {num} | move the tab {num} positions (use 0 to move a tab to the beginning of the list) |
:tabmove | move the tab to the end of the list |
input | result |
---|---|
w | go forwards to the start of the next word |
W | go forwards to the start of the next word, ignoring punctuation |
b | go back to the start of the word, or to the previous word if already at the start |
B | go back to the start of the word, or to the previous word, ignoring punctuation |
0 | go to the start of the line (first character) |
^ | go to the start of the line (first non-blank character) |
$ | go to the end of the line |
- | go to the start of the previous line |
<C-u> | half page up |
<C-d> | half page down |
<C-b> | full page up |
<C-f> | full page down |
<C-y> | line up |
<C-e> | line down |
H | move to the first line of the current window |
M | move to the middle line of the current window |
L | move to the last line of the current window |
) | move to beginning of next sentence |
( | move to beginning of current sentence |
} | move to beginning of next paragraph |
{ | move to beginning of the current paragraph |
e | move to end of word |
E | move to end of word, ignoring punctuation |
ge | move backwards to the end of the previous word |
gE | move backwards to the end of the previous word, ignoring punctuation |
]] | move to beginning of next section |
[[ | move to beginning of current section |
f{char} | find and move to next occurrence of char in line |
F{char} | find and move to previous occurrence of char in line |
t{char} | find and move to char before the next occurrence of the given char in line |
T{char} | find and move to char after previous occurrence of the given char in line |
; | repeat find command in same direction |
, | repeat find command in opposite direction |
`` | return to original position before issuing {num}G |
G | end of file |
gg | start of file |
{num}G | go to line number |
:{num} | go to line number |
<C-o> | go backwards through the jump list |
<C-i> | go forwards through the jump list |
input | result |
---|---|
a | append text after the cursor |
A | append text at the end of the line |
c{motion} | change chars |
cc | change current line |
C | alias for c$, change text from the cursor to the end of the line |
d{motion} | delete chars in the given direction |
dd | delete current line |
D | delete from cursor until end of line |
J | join the current line with the next (delete the current line's newline) |
o | begin a new line below the cursor and enter insert mode |
O | begin a new line above the cursor and enter insert mode |
s | substitute current char |
S | substitute current line |
r | replace char |
R | replace (overwrite) text across entire line |
x | delete current char |
xp | transpose the current char and the next |
cib or ciB | change the text inside parens / braces |
{number}> | indent by the given number of tabs (or just use '>' for one indent) |
{number}< | outdent the given number of tabs (or just use '<' for one outdent) |
= | autoindent text |
<C-h> | (insert mode) delete one character backwards (backspace) |
<C-w> | (insert mode) delete back one word |
<C-u> | (insert mode) delete back to the start of the line |
input | result |
---|---|
v | toggle character-wise visual mode |
V | toggle line-wise visual mode |
<C-v> | enable block-wise visual mode |
gv | enter visual mode and re-select the previous selection |
o | (when text is selected) go to the other end of the selected text |
v{motion} | select characters according to the given motion (vw, v$, etc.) |
vi) | select from cursor until the closing ) |
ggVG | select all text |
object | definition |
---|---|
aw | a word |
iw | inner word |
aW | a WORD |
iW | inner WORD |
as | a sentence |
is | inner sentence |
ap | a paragraph |
ip | inner paragraph |
a] or a[ | a [] block |
i] or i[ | inner [] block |
a) or a( or ab | a block |
i) or i( or ib | inner block |
a> or a< | a <> block |
i> or i< | inner <> block |
at | a tag block |
it | inner tag block |
a} or a{ or aB | a Block |
i} or i{ or iB | inner Block |
a" or a' or a` | a quoted string |
i" or i' or i` | a quoted string, excluding the quotes |
input | result |
---|---|
yy | yank current line (to first register) |
y{motion} | yank chars in the given direction |
"{char}yy | yank current line to register {char} |
"{num}{char}yy | yank next {num} lines to register {char} |
"{char}P | put contents of register {char} before cursor |
"{char}p | put contents of register {char} after cursor |
"{char}{num}dd | delete {num} lines into register {char} |
"{char}d) | delete from cursor to end of sentence into register {char} |
*{capital char}y) | add the next sentence to register {char} lower case = overwrite, upper case = append |
:reg | list the registers (most recent yanks) |
<C-r>{register} | (insert mode) put from the given register |
<C-r>= | (insert mode) bring up the expression register and then insert the output |
"{num}p | paste from the given yank register |
"_dd | delete to _, the black hole register (does not occupy a yank register) |
"% | name of the current file (use "%p to put the name) |
": | last Ex command (use ":p to put the command) |
"/ | last search pattern (use "/p to put the pattern) |
". | last inserted text (use ".p to put the text) |
"# | name of the alternate file (use "#p to put the name) |
"= | expression register. ex: "=2+2<CR>p will put '4' |
input | result |
---|---|
u | undo last operation |
U | undo everything done to the current line |
<C-r> | (or :redo) redo last operation |
:e! | discard all changes made since the last write |
g; | go to where the previous change was made |
g, | go to where the next change was made |
`. | go to where the last change was made |
`^ | go to where the last insert was made |
input | result |
---|---|
q{char} | record a macro |
q | stop recording |
@{char} | play back macro |
@@ | replay previously played macro |
input | result |
---|---|
m{letter} | marks the current position with letter |
'{letter} | moves to the first character of the line marked by letter |
`{letter} | moves the cursor to the character marked by letter |
`` | returns to the position of the previous mark or context after a move |
'' | (2 apostrophes) returns to the beginning of the line of the previous mark or context |
:marks | show all marks |
:delm {letter} | delete mark |
:delm! | delete all marks |
`" | position last edited before exit |
`[ | go to first character of previously changed or yanked text |
`] | go to last character of previously changed or yanked text |
'< | go to first line of previously selected visual area |
'> | go to last line of previously selected visual area |
'. | go to the position where the last change was made |
'^ | go to the position where the cursor was the last time when insert mode was exited |
input | meaning |
---|---|
within a regex pattern | |
& | entire text matched by the search pattern |
~ | shorthand for the previous replacement pattern used |
\l or \u | convert to lowercase or uppercase the next letter that follows |
\L or \U | convert to lowercase or uppercase all characters until \e or the end |
\<foo\> | word boundaries, match 'foo' but not 'fool' |
%({pattern}) | backred-less grouping (preface parens with % to make them non-capturing) |
\zs | sets the start of a match |
\ze | sets the end of a match |
\c | force case insensitivity |
\C | force case sensitivity |
{-n,m} | conservative quantifiers |
{pattern}@= | zero width match |
{pattern}@! | zero width non-match |
{pattern}@<= | zero width preceding match |
{pattern}@<! | zero width preceding non-match |
{pattern}@> | match without retry |
within normal mode | |
:s or & | repeat the last substitution |
:%s/{from}/{to}/g | globally search and replace |
:%s/{from}/{to}/c | request a confirmation prompt for each match prior to applying the substitution |
:{num},{num}s/// | perform a substitution within a range of lines |
:1,10s/.*/(&)/ | example: surround each line 1-10 with parens |
/\v{pattern}/ | enable very magic behavior (no need to escape special chars) |
:h perl-patterns | view a Vim regex / Perl regex compatibility chart |
input | result |
---|---|
:set spell | enable spellcheck |
:set nospell | disable spellcheck |
]s | next misspelled word |
[s | previous misspelled word |
z= | correct spelling (from a menu) |
zg | teach Vim that the selected word's spelling is valid |
input | result |
---|---|
:ab {abbreviation} {phrase} | define an abbreviation that when entered will be replaced with the given phrase |
{abbreviation}<Space> | replace the given abbreviation with its defined phrase |
{abbreviation}<C-[> | replace the given abbreviation with its defined phrase |
{abbreviation}<C-v> | do not replace the given abbreviation and leave it as entered literally |
:ab | list all abbreviations |
:ab {start of abbreviation} | list all abbreviations that start with the given characters |
:unab {abbreviation} | undefine the given abbreviation |
:norea {abbrev.} {phrase} | define an abbreviation that cannot be remapped later |
:abc | undefine all abbreviations |
:ca {abbreviation} {phrase} | define an abbreviation that is only used in command-line mode |
:cuna {abbreviation} | undefine the given command-line mode abbreviation |
:cnorea {abbrev.} {phrase} | define a command-line mode abbreviation that cannot be remapped later |
:cabc | undefine all command-line mode abbreviations |
:ia {abbreviation} {phrase} | define an abbreviation that is only used in insert mode |
:iuna {abbreviation} | undefine the given insert mode abbreviation |
:inorea {abbrev.} {phrase} | define an insert mode abbreviation that cannot be remapped later |
:iabc | undefine all insert mode abbreviations |
input | result |
---|---|
:jumps | list all known jump locations |
<C-o> | jump back |
<C-i> | jump forwards |
{num}<C-o> | jump to the numbered jump appearing above 0 in the jump list |
{num}<C-i> | jump to the numbered jump appearing below 0 in the jump list |
input | result |
---|---|
u | convert selected text to lower case |
U | convert selected text to upper case |
~ | toggle case of selected text / current char (and move cursor forward for char) |
{num}~ | toggle case of the next n characters |
g~{motion} | toggle case of characters from the current positon through the given motion |
guu | convert entire line to lower case |
gUU | convert entire line to upper case |
g~~ | toggle case of the entire line |
guaw | convert word to lower case |
gUaw | convert word to upper case |
input | result |
---|---|
<C-a> | increment number |
<C-x> | decrement number |
input | result |
---|---|
<S-Ins> | paste from clipboard when in insert mode |
"*p | paste from clipboard when in normal mode |
:%y+ | copy whole file to clipboard |
:y+ | copy the current line to the clipboard |
:{num1},{num2}y+ | copy the range of lines to the clipboard |
input | result |
---|---|
gj | move down a display line |
gk | move up a display line |
g^ | go to the start of a display line (first non-blank character) |
g0 | go to the start of a display line (first character) |
g$ | go to the end of a display line |
gm | go to the middle of a display line |
input | result |
---|---|
:set tags=.tags;/ | look for a ctags file at .tags, walking the directory tree upwards |
<C-]> | jump to tag |
<C-t> | jump back |
:ta {function name} | jump to function definition |
:ts | tag list |
:tn | go to the next tag |
:tp | go to the previous tag |
:tf | go to the first function |
:tl | go to the last function |
input | result |
---|---|
vimdiff {file1} {file2} | launch Vim to diff files 1 and 2 (alternatively use: vim -d {file1} {file2}) |
]c | jump to the next change |
[c | jump to the previous change |
:diffoff | disable the diff view (use :diffoff! for all open files) |
do | get changes from other window into the current window |
dp | put the changes from current window into the other window |
input | result |
---|---|
gi | return the cursor to the previous (in insert mode) position and enter insert mode |
<C-n> | autocomplete word (hit continuously to cycle through the available completions) |
<C-g> | status info about the current file |
g <C-g> | advanced file details |
zz | center cursor |
ZZ | write the file and quit Vim |
<C-o> | enter normal mode for one command, then jump back to insert mode when done |
<C-[> | switch from insert mode to normal mode |
{num} % | position the cursor at the given percentage of the way through the current buffer |
input | result |
---|---|
:help | access the built in help documentation |
:help {subject} | access help documentation for a specific subject (:help text-objects) |
<C-]> | follow the current hyperlink that the cursor is over |
input | result |
---|---|
:help 42 | Douglas Adams related |
:help holy-grail | Monty Python related |
:help! | Hitchhiker's Guide related |
:Ni! | Monty Python related |