Vim Hotkeys - Keyboard Shortcuts





How to Exit

 

:q[uit]

Quit Vim. This fails when changes have been made.

:q[uit]!

Quit without writing.

:cq[uit]

Quit always, without writing.

:wq

Write the current file and exit.

:wq!

Write the current file and exit always.

:wq

Write to . Exit if not editing the last

:wq!

Write to and exit always.

:[range]wq[!]

[file] Same as above, but only write the lines in [range].

ZZ

Write current file, if modified, and exit.

ZQ

Quit current file and exit (same as ":q!")


Editing a File

 

:e[dit]

Edit the current file. This is useful to re-edit the current file, when it has been changed outside of Vim.

:e[dit]!

Edit the current file always. Discard any changes to the current buffer. This is useful if you want to start all over again.

:e[dit]

Edit .

:e[dit]!

Edit always. Discard any changes to the current buffer.

gf

Edit the file whose name is under or after the cursor. Mnemonic: "goto file".


Inserting Text

 

a

Append text after the cursor [count] times.

A

Append text at the end of the line [count] times.

i

Insert text before the cursor [count] times.

I

Insert text before the first non-blank in the line [count] times.

gI

Insert text in column 1 [count] times.

o

Begin a new line below the cursor and insert text, repeat [count] times.

O

Begin a new line above the cursor and insert text, repeat [count] times.


Inserting a file

:r[ead] [name]

Insert the file [name] below the cursor.

:r[ead] !

Execute and insert its standard output below the cursor.


Deleting Text

 

<Del> or
x

Delete [count] characters under and after the cursor

X

Delete [count] characters before the cursor

d

Delete text that moves over

dd

Delete [count] lines

D

Delete the characters under the cursor until the end of the line

x or
d

Delete the highlighted text (for see Selecting Text).

CTRL-H or

When in Select mode: Delete the highlighted text

X or
D

Delete the highlighted lines

:[range]d[elete]

Delete [range] lines (default: current line)

:[range]d[elete]

Delete lines, starting with [range]


Changing (or Replacing) Text

 

r

replace the character under the cursor with .

R

Enter Insert mode, replacing characters rather than inserting

~

Switch case of the character under the cursor and move the cursor to the right. If a [count] is given, do that many characters.

~

switch case of text.

~

Switch case of highlighted text


Substituting

 

:[range]s[ubstitute]///[c][e][g][p][r][i][I] [count]

For each line in [range] replace a match of with .

:[range]s[ubstitute] [c][e][g][r][i][I] [count] :[range]&[c][e][g][r][i][I] [count]

Repeat last :substitute with same search pattern and substitute string, but without the same flags. You may add extra flags

The arguments that you can use for the substitute commands:
[c] Confirm each substitution. Vim positions the cursor on the matching
 string. You can type:
 'y' to substitute this match
 'n' to skip this match
  to skip this match
 'a' to substitute this and all remaining matches
 'q' to quit substituting
 CTRL-E to scroll the screen up
 CTRL-Y to scroll the screen down .
[e] When the search pattern fails, do not issue an error message and, in
 particular, continue in maps as if no error occurred.
[g] Replace all occurrences in the line. Without this argument,
 replacement occurs only for the first occurrence in each line.
[i] Ignore case for the pattern.
[I] Don't ignore case for the pattern.
[p] Print the line containing the last substitute.


Copying and Moving Text

"

Use register for next delete, yank or put (use uppercase character to append with delete and yank) ( only work with put).

:reg[isters]

Display the contents of all numbered and named registers.

:reg[isters]

Display the contents of the numbered and named registers that are mentioned in .

:di[splay] [arg]

Same as :registers.

["x]y

Yank text [into register x].

["x]yy

Yank [count] lines [into register x]

["x]Y

yank [count] lines [into register x] (synonym for yy).

["x]y

Yank the highlighted text [into register x] (for see Selecting Text).

["x]Y

Yank the highlighted lines [into register x]

:[range]y[ank] [x]

Yank [range] lines [into register x].

:[range]y[ank] [x]

Yank lines, starting with last line number in [range] (default: current line), [into register x].

["x]p

Put the text [from register x] after the cursor [count] times.

["x]P

Put the text [from register x] before the cursor [count] times.

["x]gp

Just like "p", but leave the cursor just after the new text.

["x]gP

Just like "P", but leave the cursor just after the new text.

:[line]pu[t] [x]

Put the text [from register x] after [line] (default current line).

:[line]pu[t]! [x]

Put the text [from register x] before [line] (default current line).


Undo/Redo/Repeat

u

Undo [count] changes.

:u[ndo]

Undo one change.

CTRL-R

Redo [count] changes which were undone.

:red[o]

Redo one change which was undone.

U

Undo all latest changes on one line.

.

Repeat last change, with count replaced with [count].


Moving Around

 

Basic motion commands:

 k
h l 
j

 

h or

[count] characters to the left (exclusive).

l or
or

[count] characters to the right (exclusive).

k or
or
CTRL-P

[count] lines upward

j or
or
CTRL-J or
or
CTRL-N

[count] lines downward (linewise).

0

To the first character of the line (exclusive).

<Home>

To the first character of the line (exclusive).

^

To the first non-blank character of the line

$ or
<End>

To the end of the line and [count - 1] lines downward

g0 or
g<Home>

When lines wrap ('wrap on): To the first character of the screen line (exclusive). Differs from "0" when a line is wider than the screen. When lines don't wrap ('wrap' off): To the leftmost character of the current line that is on the screen. Differs from "0" when the first character of the line is not on the screen.

g^

When lines wrap ('wrap' on): To the first non-blank character of the screen line (exclusive). Differs from "^" when a line is wider than the screen. When lines don't wrap ('wrap' off): To the leftmost non-blank character of the current line that is on the screen. Differs from "^" when the first non-blank character of the line is not on the screen.

g$ or
g<End&gr;

When lines wrap ('wrap' on): To the last character of the screen line and [count - 1] screen lines downward (inclusive). Differs from "$" when a line is wider than the screen. When lines don't wrap ('wrap' off): To the rightmost character of the current line that is visible on the screen. Differs from "$" when the last character of the line is not on the screen or when a count is used.

f

To [count]'th occurrence of to the right. The cursor is placed on (inclusive).

F

To the [count]'th occurrence of to the left. The cursor is placed on (inclusive).

t

Till before [count]'th occurrence of to the right. The cursor is placed on the character left of (inclusive).

T

Till after [count]'th occurrence of to the left. The cursor is placed on the character right of (inclusive).

;

Repeat latest f, t, F or T [count] times.

,

Repeat latest f, t, F or T in opposite direction [count] times.

- <minus>

[count] lines upward, on the first non-blank character (linewise).

+ or
CTRL-M or
<CR>

[count] lines downward, on the first non-blank character (linewise).

_ <underscore>

[count] - 1 lines downward, on the first non-blank character (linewise).

<C-End> or
G

Goto line [count], default last line, on the first non-blank character.

<C-Home> or
gg


Ads