Skip to content

Instantly share code, notes, and snippets.

@nerdalert
Last active November 8, 2023 23:38
Show Gist options
  • Star 14 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save nerdalert/5f80853b4e195204bc6d to your computer and use it in GitHub Desktop.
Save nerdalert/5f80853b4e195204bc6d to your computer and use it in GitHub Desktop.
VIM Cheatsheet

VIM Cheatsheet

Cursor movement

h - move cursor left
j - move cursor down
k - move cursor up
l - move cursor right
w - jump forwards to the start of a word
W - jump forwards to the start of a word (words can contain punctuation)
e - jump forwards to the end of a word
E - jump forwards to the end of a word (words can contain punctuation)
b - jump backwards to the start of a word
B - jump backwards to the start of a word (words can contain punctuation)
0 - jump to the start of the line
^ - jump to the first non-blank character of the line
$ - jump to the end of the line
G - go to the last line of the document
5G - go to line 5

^D ^U - scroll half a page up, down
^F ^B - scroll page up, down

Tip Prefix a cursor movement command with a number to repeat it. For example, 4j moves down 4 lines. Insert mode - inserting/appending text

i - insert before the cursor
I - insert at the beginning of the line
a - insert (append) after the cursor
A - insert (append) at the end of the line
o - append (open) a new line below the 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

Copy and Paste a Line

yy - move the cursor to the line you want to duplicate/copy and esc-yy
p  - move the cursor to the line you want to paste at and hit p

Editing

r - replace a single character
J - join line below to the current one
cc - change (replace) entire line
cw - change (replace) to the end of the word
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)
u - undo
Ctrl + r - redo
. - repeat last command
(v)= - Fix indentation
=G - Reindents the current cursor till end of buffer
== - Fix indentation of current line
gg=G - Fix indentation of entire file
< or > - Indent line

Marking text (visual mode)

v - start visual mode, mark lines, then do a command (like y-yank)
V - start linewise visual mode
o - move to other end of marked area
Ctrl + v - start visual block mode
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

Set commands

set number - show line numbers
set showcmd - show command in bottom bar
set cursorline - highlight current line
set showmatch - highlight matching [{()}]

Visual commands

> - shift text right
< - shift text left
y - yank (copy) marked text
d - delete marked text
~ - switch case

Cut, copy and paste

yy - yank (copy) a line
2yy - yank (copy) 2 lines
yw - yank (copy) 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) word
D - delete (cut) to the end of the line
d$ - delete (cut) to the end of the line
x - delete (cut) character

Exiting and saving

:w - write (save) the file, but dont exit
:wq - write (save) and quit
:x - write (save) and quit
:q - quit (fails if there are unsaved changes)
:q! - quit and throw away unsaved changes

Search and replace

/pattern - search for pattern
?pattern - search backward for pattern
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

Working with multiple files

:e filename - 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)
:sp filename - open a file in a new buffer and split window
:vsp filename - 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

Tabs

:tabnew filename or :tabn filename - 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
#gt - move to tab number #
:tabmove # - move current tab to the #th position (indexed from 0)
:tabclose or :tabc - close the current tab and all its windows
:tabonly or :tabo - close all tabs except for the current one

Explore

:Explore - explore file directory
:Explore! - explore file directory with vertical splitting
:bd - exit explore
:Sexplore - split-screen explorer
:Hexplore - horizontal split-screen explorer
:Vexplore - vertical slit-screen explorer
:Texplore - tabbed full-screen explorer
:gt - switch between tabs
:tabn - Next tab
:tabb - Back tab

Misc

:s/foo/bar/g - Change each 'foo' to 'bar' in the current line
:%s/foo/bar/g - Change each 'foo' to 'bar' in all the lines
(visual):'<,'>s/foo/bar/g - highlight and replace all selected in visual mode
Ctrl + z - exit vim (use fg+enter to enter vim again)

~/.vimrc

syntax enable           " enable syntax processing
set tabstop=4       " number of visual spaces per TAB    

vim-cheatsheet-1

@Robokishan
Copy link

add Shift+% for parentheses

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment