Modes: #command_mode → undo, redo, find and replace, quit ( Esc ) #insert_mode → you type text (press i in view mode) #visual_mode → that is used to highlight and edit text in bulk.
VIM CHEATSHEET WEBSITE: http://www.vim.org/
https://vim.sourceforge.io/docs.php
y → copy d → cut p → paste ctrl + sft + V → paste from clipboard (ctrl + sft + V) or (shift + insert) → paste from clipboard (crtl + shift + c) → copy to clipboard
CURSOR MOVEMENTS
h move left j move down k move up l move right w jump by start of words (punctuation considered words) W jump by words (spaces separate words) e jump to end of words (punctuation considered words) E jump to end of words (no punctuation) b jump backward by words (punctuation considered words) B jump backward by words (no punctuation) ge jump backward to end of words 0 (zero) start of line ^ first non-blank character of line $ end of line
-
move line upwards, on the first non blank character
-
move line downwards, on the first non blank character
BOOKMARKS
:marks list all the current marks
ma make a bookmark named a at the current cursor position
a go to position of bookmark a 'a go to the line with bookmark a . go to the line that you last edited
INSERT MODE
i start insert mode at cursor I insert at the beginning of the line a append after the cursor A append at the end of the line o open (append) blank line below current line O open blank line above current line Esc exit insert mode
EDITING
r replace a single character (does not use insert mode) R enter Insert mode, replacing characters rather than inserting J join line below to the current one cc change (replace) an entire line cw change (replace) to the end of word C change (replace) to the end of line ct’ change (replace) until the ’ character (can change ’ for any character) s delete character at cursor and substitute text S delete line at cursor and substitute text (same as cc) xp transpose two letters (delete and paste, technically) u undo CTRL-r redo . repeat last command ~ switch case g~iw switch case of current word gUiw make current word uppercase guiw make current word lowercase gU make lowercase until end of line
indent line one column to right
<< indent line one column to left == auto-indent current line ddp swap current line with next ddkp swap current line with previous :%retab fix spaces / tabs issues in whole file :r [name] insert the file [name] below the cursor. :r !{cmd} execute {cmd} and insert its standard output below the cursor.
DELETING TEXT
x delete current character X delete previous character dw delete the current word dd delete (cut) a line dt’ delete until the next ’ character on the line (replace ’ by any character) D delete from cursor to end of line :[range]d delete [range] lines
COPYING AND MOVING TEXT
yw yank word yy yank (copy) a line 2yy yank 2 lines y$ yank to end of line p put (paste) the clipboard after cursor/current line P put (paste) before cursor/current line :set paste avoid unexpected effects in pasting :registers display the contents of all registers “xyw yank word into register x “xyy yank line into register x :[range]y x yank [range] lines into register x “xp put the text from register x after the cursor “xP put the text from register x before the cursor “xgp just like “p”, but leave the cursor just after the new text “xgP just like “P”, but leave the cursor just after the new text :[line]put x put the text from register x after [line]
VISUAL MODE
v start visual mode, mark lines, then do command (such as y-yank) V start linewise visual mode o move to other end of marked area U upper case of marked area CTRL-v start visual block mode O move to other corner of block aw mark a word ab a () block (with braces) ab a {} block (with brackets) ib inner () block ib inner {} block Esc exit visual mode
VISUAL MODE COMMANDS
shift right
< shift left c change (replace) marked text y yank (copy) marked text d delete marked text ~ switch case
VISUAL MODE SHORTCUTS
v% selects matching parenthesis vi{ selects matching curly brace vi” selects text between double quotes vi’ selects text between single quotes
SPELLING
]s next misspelled word [s previous misspelled word zg add word to wordlist zug undo last add word z= suggest word
EXITING
:q quit Vim. This fails when changes have been made. :q! quit without writing. :cq quit always, without writing. :w save without exiting. :wq write the current file and exit. :wq! write the current file and exit always. :wq {file} write to {file}. Exit if not editing the last :wq! {file} write to {file} and exit always. :[range]wq[!] 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!”).
SEARCH/REPLACE
/pattern search for pattern ?pattern search backward for pattern n repeat search in same direction N repeat search in opposite direction
-
search forward, word under cursor
search backward, word under cursor
set ic ignore case: turn on set noic ignore case: turn off :%s/old/new/g replace all old with new throughout file :%s/old/new/gc replace all old with new throughout file with confirmation :argdo %s/old/new/gc | wq open multiple files and run this command to replace old with new in every file with confirmation, save and quit
MULTIPLE FILES
:e filename edit a file in a new buffer
:tabe filename edit a file in a new tab (Vim7, gVim)
:ls list all buffers
:bn go to next buffer
:bp go to previous buffer
:bd delete a buffer (close a file)
:b1 show buffer 1
:b vimrc show buffer whose filename begins with “vimrc”
:bufdo
WINDOWS
:sp f split open f :vsp f vsplit open f CTRL-w s split windows CTRL-w w switch between windows CTRL-w q quit a window CTRL-w v split windows vertically CTRL-w x swap windows CTRL-w h left window CTRL-w j down window CTRL-w k up window CTRL-w l right window CTRL-w + increase window height CTRL-w - decrease window height CTRL-w < increase window width CTRL-w > decrease window width CTRL-w = equal window CTRL-w o close other windows zz Centers the window to the current line
QUICKFIX WINDOW
copen open quickfix window cclose close quickfix window cc [nr] display error [nr] cfirst display the first error clast display the last error [count]cn display [count] next error [count]cp display [count] previous error
PROGRAMMING
% show matching brace, bracket, or parenthese gf edit the file whose name is under or after the cursor gd when the cursor is on a local variable or function, jump to its declaration ” return to the line where the cursor was before the latest jump gi return to insert mode where you inserted text the last time CTRL-o move to previous position you were at CTRL-i move to more recent position you were at
FILE
o open in prev window go preview t open in new tab T open in new tab silently i open split gi preview split s open vsplit gs preview vsplit
DIRECTORY
o open & close node O recursively open node x close parent of node X close all child nodes of current node recursively e explore selected dir
BOOKMARK
o open bookmark t open in new tab T open in new tab silently D delete bookmark
TREE NAVIGATION
P go to root p go to parent K go to first child J go to last child CTRL-j go to next sibling CTRL-k go to prev sibling
FILESYSTEM
C change tree root to the selected dir u move tree root up a dir U move tree root up a dir but leave old root open r refresh cursor dir R refresh current root m show menu cd change the CWD to the selected dir
TREE FILTERING
I hidden files f file filters F files B bookmarks
OTHER
q close the NERDTree window A zoom (maximize-minimize) the NERDTree window ? toggle help