Vim#
Vim is a highly customizable, extensible text editor. The operator reaches for it on every Unix shell since it ships with every distro, and modal editing pays dividends once muscle memory is in. This page is a curated reference of the motions, edits, search-and-replace operators, and buffer / tab management that the operator uses day to day.
Global#
:help keyword open help for keyword
:o file open file
:saveas file save file as
:close close current pane
Move cursor#
h move cursor left
j move cursor down
k move cursor up
l move cursor right
H move to top of screen
M move to middle of screen
L move to bottom of screen
w jump forwards to the start of a word
W jump forwards to the start of a word (WORD)
e jump forwards to the end of a word
E jump forwards to the end of a word (WORD)
b jump backwards to the start of a word
B jump backwards to the start of a word (WORD)
0 jump to the start of the line
^ jump to first non-blank char of line
$ jump to the end of the line
g_ jump to last non-blank char of line
gg go to the first line of the document
G go to the last line of the document
5G go to line 5
fx jump to next occur of character x
tx jump to before next occur of char x
} jump to next paragraph
{ jump to previous paragraph
zz center cursor on screen
Ctrl + b move back one full screen
Ctrl + f move forward one full screen
Ctrl + d move forward 1/2 a screen
Ctrl + u move back 1/2 a screen
Insert mode#
i insert before the cursor
I insert at the beginning of the line
a insert (append) after the cursor
A insert (append) at end of the line
o append (open) new line below current line
O append (open) a new line above the current line
ea insert (append) at the end of the word
Esc exit insert mode
Editing#
r replace a single character
J join line below to the current one
cc change (replace) entire line
cw change (replace) to the start of the next word
ce change (replace) to the end of the next word
cb change (replace) to the start of the previous word
c0 change (replace) to the start of the line
c$ change (replace) to the end of the line
s delete character and substitute text
S delete line and substitute text (same as cc)
xp transpose two letters (delete and paste)
. repeat last command
u undo
Ctrl + r redo
Marking text#
v start visual mode
V start linewise visual mode
o move to other end of marked area
O move to other corner of block
aw mark a word
ab a block with ()
aB a block with {}
ib inner block with ()
iB inner block with {}
Esc exit visual mode
Ctrl + v start visual block mode
Visual cmds#
> shift text right
< shift text left
y yank (copy) marked text
d delete marked text
~ switch case
Cut, paste#
yy yank (copy) a line
2yy yank (copy) 2 lines
yw yank (copy) chars from the cursor start of next word
y$ yank (copy) to end of line
p put (paste) the clipboard after cursor
P put (paste) before cursor
dd delete (cut) a line
2dd delete (cut) 2 lines
dw delete (cut) chars from cursor to start of next word
D delete (cut) to the end of the line
d$ delete (cut) to the end of the line
d^ delete (cut) to the first non-blank character of the line
d0 delete (cut) to the beginning of the line
x delete (cut) character
Search, replace#
/pattern search for pattern
?pattern search backward for pattern
\vpattern extended pattern, non alphanumeric chars treated as regex
n repeat search in same direction
N repeat search in opposite direction
:%s/old/new/g replace all old with new throughout file
:%s/old/new/gc replace all old with new throughout file with confirmations
:noh remove highlighting of search matches
Search multiple files#
:vimgrep /pattern/ {file} search for pattern in multiple files
:cn jump to the next match
:cp jump to the previous match
:copen open a window containing the list of matches
Exiting#
:w write (save) the file
:w !sudo tee % write out the current file using sudo
:wq or :x or ZZ write (save) and quit
:q quit (fails if there are unsaved changes)
:q! or ZQ quit and throw away unsaved changes
Work multiple files#
:e file edit a file in a new buffer
:bnext or :bn go to the next buffer
:bprev or :bp go to the previous buffer
:bd delete a buffer (close a file)
:ls list all open buffers
:sp file open a file in a new buffer and split window
:vsp file open a file in a new buffer and vertically split window
Ctrl + ws split window
Ctrl + ww switch windows
Ctrl + wq quit a window
Ctrl + wv split window vertically
Ctrl + wh move cursor to the left window (vertical split)
Ctrl + wl move cursor to the right window (vertical split)
Ctrl + wj move cursor to the window below (horizontal split)
Ctrl + wk move cursor to the window above (horizontal split)
Tabs#
:tabnew or :tabnew file open a file in a new tab
Ctrl + wT move the current split window into its own tab
gt or :tabnext or :tabn move to the next tab
gT or :tabprev or :tabp move to the previous tab
<number>gt move to tab <number>
:tabmove <number> move current tab to the <$>th position
:tabclose or :tabc close the current tab and all its windows
:tabonly or :tabo close all tabs except for the current one
:tabdo command run the command on all tabs
:tabdo q run the command all tabs then close
References#
man 1 vim.