It's time to ditch the mouse and say hello to Vim.
This powerful text editor may have a tough reputation, but with some practice, you'll be slicing through keystrokes like a pro in no time.
Grab your keyboard, and let's get started!
Note: This article assumes prior Vim knowledge. If you're new, check out Ben Awad's Vim Tutorial before diving in.
Open a file in Vim
:e filename
- edit file
:tabe filename
- edit file in new tab (similar to :tabnew
)
💡Tip: Use
gt
/gT
- switch to next/previous tab
Open file(s) in terminal
vim filename
- open a specific file
vim -p filename1 filename2 filename3
- open multiple files in different tabs
Vim's Help
To open Vim's quit
documentation, type :help quit
or `:h quit
Use
:h keyword` to learn about specific keywords.
💡Tip:
tab
key for autocompletion in command mode
Saving and Exiting
:w
- write (save)
:q
- quit (close)
:wq
- write-quit file (similar to :x
)
:qa
- quit-all files
:wqa
- write-quit-all (similar to :xa
)
:q!
- force quit and discard changes
Insert Mode
i
- insert text
a
- append text (insert after cursor position)
I
- insert at line start (shortcut for ^i
)
A
- append at line end (shortcut for $a
)
o
/ O
--- insert new line below/above
Esc
- exit insert mode
Basic Vim Motions
h
j
k
l
- (Arrow Keys: left, down, up, right)
move the cursor one space
Arrow Keys
{count}j
, {count}k
--- move by {count}
lines down/up
{count}h
, {count}l
- move by {count}
characters left/right
For example, 5j
jumps 5 lines down and 9k
jumps 9 lines up.
Recover Changes
u
- undo
ctrl + r
- redo
Moving around
w
/ b
- next/previous word
e
/ ge
- next/previous end of word
0
/ $
- start/end of line
gg
/ G
--- start/end of file
Operators
d
for delete
y
for yank (copy)
c
for change (delete and insert)
v
for visual select
Command pattern: {operator}{count}{motion}
or {count}{operator}{motion}
e.g.
d5jor
5djto delete 5 lines downwards,
c2w` to change 2 words
If you believe in yourself and have dedication and pride - and never quit - you'll be a winner. The price of victory is high, but so are the rewards.
Delete / Change
dw
- delete word
dd
- delete line
ddp
- swap two lines
cc
- change line (similar to C
and S
)
x
- delete (ex-out) single character
r
- replace one character
R
- enter replace mode
s
/ S
- delete char/line and insert
Selecting
v
- character-wise visual mode
V
- line-wise visual mode
C-v
- block-wise visual mode
Copy and Paste
y
- yank text
yy
- yank current line
:%y+
- yank whole file
p
/ P
--- paste after/before cursor position
Moving horizontally with high precision
f
- find text forward
F
- find text backward
t<char>
- move to next <char>
in the line
T<char>
- move to previous <char>
in the line
Search and replace
/pattern
- search for pattern
?pattern
- search backward for pattern
n
/ N
- next/previous match
*
/ #
--- search next/previous word under cursor
:%s/old/new/g
--- replace all old
with `new
:%s/old/new/gc
--- replace old
with new
with confirmations
:noh
- disable search match highlighting (short for :noh[lsearch]
)
Indent
>
- indent or shift right
<
- unindent or shift left
=
- format indentation
>>
- indent more in current line
<<
- indent less in current line
Text Objects
{operator}{a or i}{object}
Operator: d
(elete), c
(hange), y
(ank), v
(visual)
Choose between a
and i
a"
- a double-quoted string
i"
--- inner double-quoted string
Object: w
ord, s
entence, p
aragraph, t
ag block, Parentheses (
, Brackets {[<
, Quotes and Ticks '"
Examples:
dap
- delete a paragraph
caw
- change a word
yas
--- yank a sentence (ending with .
!
?
followed by space or tab)
vat
- select a tag block
di[
--- delete inner brackets [...]
ci(
--- change inner parentheses (...)
yi<
- yank inner angle brackets <...>
vi"
--- select inner quoted strings "..."
Macros
qa
- start recording macro a
q
- stop recording macro
@a
- run macro a
7@a
- run macro a
7 times
@@
--- repeat last macro
Advanced
.
- repeat last command
%
- jump between matching ()
or {}
~
- switch case (small, capital)
cf<char>
- change until next found occurrence of <char>
:read ~/path-to-file/filename
- insert a file below cursor (short :r
)