title: Vim category: Vim layout: 2017/sheet tags: [Featured] updated: 2020-07-05 weight: -10 intro: | Vim is a very efficient text editor. This reference was made for Vim 8.0.

For shortcut notation, see :help key-notation.

Getting started

{: .-three-column}

Exiting

{: .-prime}

ShortcutDescription
:qaClose all files
:qa!Close all files, abandon changes
------
:wSave
:wq / :xSave and close file
------
:qClose file
:q!Close file, abandon changes
------
ZZSave and quit
ZQQuit without checking changes

{: .-shortcuts}

ShortcutDescription
h j k lArrow keys
<C-U> / <C-D>Half-page up/down
<C-B> / <C-F>Page up/down

{: .-shortcuts}

Words

ShortcutDescription
b / wPrevious/next word
ge / ePrevious/next end of word

{: .-shortcuts}

Line

ShortcutDescription
0 (zero)Start of line
^Start of line (after whitespace)
$End of line

{: .-shortcuts}

Character

| fc | Go forward to character c | | Fc | Go backward to character c | {: .-shortcuts}

Document

ShortcutDescription
ggFirst line
GLast line
:nGo to line n
nGGo to line n

{: .-shortcuts}

Window

ShortcutDescription
zzCenter this line
ztTop this line
zbBottom this line
HMove to top of screen
MMove to middle of screen
LMove to bottom of screen

{: .-shortcuts}

ShortcutDescription
nNext matching search pattern
NPrevious match
*Next whole word under cursor
#Previous whole word under cursor

{: .-shortcuts}

Tab pages

ShortcutDescription
:tabedit [file]Edit file in a new tab
:tabfind [file]Open file if exists in new tab
:tabcloseClose current tab
:tabsList all tabs
:tabfirstGo to first tab
:tablastGo to last tab
:tabn Go to next tab
:tabp Go to previous tab

Editing

ShortcutDescription
aAppend
AAppend from end of line
iInsert
oNext line
OPrevious line
------
sDelete char and insert
SDelete line and insert
CDelete until end of line and insert
------
rReplace one character
REnter Replace mode
------
uUndo changes
<C-R>Redo changes

{: .-shortcuts}

Exiting insert mode

ShortcutDescription
Esc / <C-[>Exit insert mode
<C-C>Exit insert mode, and abort current command

{: .-shortcuts}

Clipboard

ShortcutDescription
xDelete character
------
ddDelete line (Cut)
yyYank line (Copy)
------
pPaste
PPaste before
------
"*p / "+pPaste from system clipboard
"*y / "+yPaste to system clipboard

{: .-shortcuts}

Visual mode

ShortcutDescription
vEnter visual mode
VEnter visual line mode
<C-V>Enter visual block mode

{: .-shortcuts}

In visual mode

ShortcutDescription
d / xDelete selection
sReplace selection
yYank selection (Copy)

{: .-shortcuts}

See Operators for other things you can do.

Operators

{: .-three-column}

Usage

{: .-prime}

Operators let you operate in a range of text (defined by motion). These are performed in normal mode. {: .-setup}

| d | w | | Operator | Motion | {: .-css-breakdown}

Operators list

ShortcutDescription
dDelete
yYank (copy)
cChange (delete then insert)
------
>Indent right
<Indent left
=Autoindent
------
g~Swap case
gUUppercase
guLowercase
------
!Filter through external program

{: .-shortcuts}

See :help operator

Examples

Combine operators with motions to use them. {: .-setup}

ShortcutDescription
dd(repeat the letter) Delete current line
dwDelete to next word
dbDelete to beginning of word
2ddDelete 2 lines
dipDelete a text object (inside paragraph)
(in visual mode) dDelete selection

See: :help motion.txt

Text objects

{: .-three-column}

Usage

{: .-prime}

Text objects let you operate (with an operator) in or around text blocks (objects). {: .-setup}

| v | i | p | | Operator | [i]nside or [a]round | Text object | {: .-css-breakdown}

Text objects

ShortcutDescription
pParagraph
wWord
sSentence
------
[ ( { <A [], (), or {} block
' " `A quoted string
------
bA block [(
BA block in [{
tA XML tag block

{: .-shortcuts}

Examples

ShortcutDescription
vipSelect paragraph
vipipipipSelect more
------
yipYank inner paragraph
yapYank paragraph (including newline)
------
dipDelete inner paragraph
cipChange inner paragraph

{: .-shortcuts}

See Operators for other things you can do.

Diff

ShortcutDescription
gvimdiff file1 file2 [file3]See differences between files, in HMI

Misc

Folds

ShortcutDescription
zo / zOOpen
zc / zCClose
za / zAToggle
------
zvOpen folds for this line
------
zMClose all
zROpen all
------
zmFold more (foldlevel += 1)
zrFold less (foldlevel -= 1)
------
zxUpdate folds

{: .-shortcuts}

Uppercase ones are recursive (eg, zO is open recursively).

ShortcutDescription
%Nearest/matching {[()]}
[( [{ [<Previous ( or { or <
])Next
------
[mPrevious method start
[MPrevious method end

{: .-shortcuts}

Jumping

ShortcutDescription
<C-O>Go back to previous location
<C-I>Go forward
------
gfGo to file in cursor

{: .-shortcuts}

Counters

ShortcutDescription
<C-A>Increment number
<C-X>Decrement

{: .-shortcuts}

Windows

| z{height}<Cr> | Resize pane to {height} lines tall |

Tags

ShortcutDescription
:tag ClassnameJump to first definition of Classname
------
<C-]>Jump to definition
g]See all definitions
<C-T>Go back to last tag
<C-O> <C-I>Back/forward
------
:tselect ClassnameFind definitions of Classname
:tjump ClassnameFind definitions of Classname (auto-select 1st)

{: .-shortcuts}

Case

ShortcutDescription
~Toggle case (Case => cASE)
gUUppercase
guLowercase
------
gUUUppercase current line (also gUgU)
guuLowercase current line (also gugu)

{: .-shortcuts}

Do these in visual or normal mode.

Marks

ShortcutDescription
`^Last position of cursor in insert mode
`.Last change in current buffer
`”Last exited current buffer
`0In last file edited
Back to line in current buffer where jumped from
Back to position in current buffer where jumped from
`[To beginning of previously changed or yanked text
`]To end of previously changed or yanked text
`<To beginning of last visual selection
`>To end of last visual selection
------
maMark this cursor position as a
`aJump to the cursor position a
'aJump to the beginning of the line with position a
d’aDelete from current line to line of mark a
d`aDelete from current position to position of mark a
c’aChange text from current line to line of a
y`aYank text from current position to position of a
------
:marksList all current marks
:delm aDelete mark a
:delm a-dDelete marks a, b, c, d
:delm abcDelete marks a, b, c

{: .-shortcuts}

Misc

ShortcutDescription
.Repeat last command
]pPaste under the current indentation level
------
:set ff=unixConvert Windows line endings to Unix line endings

{: .-shortcuts}

Command line

ShortcutDescription
<C-R><C-W>Insert current word into the command line
<C-R>"Paste from ” register
<C-X><C-F>Auto-completion of path in insert mode

{: .-shortcuts}

Text alignment

:center [width]
:right [width]
:left

See :help formatting

Calculator

ShortcutDescription
<C-R>=128/2Shows the result of the division : ‘64’

Do this in insert mode.

Exiting with an error

:cq
:cquit

Works like :qa, but throws an error. Great for aborting Git commands.

Spell checking

ShortcutDescription
:set spell spelllang=en_usTurn on US English spell checking
]sMove to next misspelled word after the cursor
[sMove to previous misspelled word before the cursor
z=Suggest spellings for the word under/after the cursor
zgAdd word to spell list
zwMark word as bad/mispelling
zu / C-X (Insert Mode)Suggest words for bad word under cursor from spellfile

{: .-shortcuts}

See :help spell

Also see