Copied from Linux Training Academy
- Global
- Cursor Movements
- Insert Mode
- Editing
- Marking Text (Visual Mode)
- Visual Commands
- Registers
- Marks
- Macros
- Cut and Paste
- Exiting
- Search and Replace
- Search in Multiple Files
- Working With Multiple Files
- Tabs
:help keyword
– open help for keyword:o file
– open file:saveas file
– save file as:close
– close current window
h
– move cursor leftj
– move cursor downk
– move cursor upl
– move cursor rightH
– move to top of screenM
– move to middle of screenL
– move to bottom of screenw
– jump forwards to the start of a wordW
– jump forwards to the start of a word (words can contain punctuation)e
– jump forwards to the end of a wordE
– jump forwards to the end of a word (words can contain punctuation)b
– jump backwards to the start of a wordB
– 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 lineg_
– jump to the last non-blank character of the linegg
– go to the first line of the documentG
– go to the last line of the document5G
– go to line 5fx
– jump to next occurrence of character xtx
– jump to before next occurrence of character x}
– jump to next paragraph (or function/block, when editing code){
– jump to previous paragraph (or function/block, when editing code)zz
– center cursor on screenCtrl + b
– move back one full screenCtrl + f
– move forward one full screenCtrl + d
– move forward 1/2 a screenCtrl + u
– move back 1/2 a screen
Tip: Prefix a cursor movement command with a number to repeat it. For example, 4j moves down 4 lines.
i
– insert before the cursorI
– insert at the beginning of the linea
– insert (append) after the cursorA
– insert (append) at the end of the lineo
– append (open) a new line below the current lineO
– append (open) a new line above the current lineea
– insert (append) at the end of the wordEsc
– exit insert mode
r
– replace a single characterJ
– join line below to the current linecc
– change (replace) entire linecw
– change (replace) to the end of the wordc$
– change (replace) to the end of the lines
– delete character and substitute textS
– delete line and substitute text (same as cc)xp
– transpose two letters (delete and paste)u
– undoCtrl + r
– redo.
– repeat last command
v
– start visual mode, mark lines, then perform an operation (such as d-delete)V
– start linewise visual modeCtrl + v
– start blockwise visual modeo
– move to the other end of marked areaO
– move to other corner of blockaw
– mark a wordab
– a block with ()aB
– a block with {}ib
– inner block with ()iB
– inner block with {}Esc
– exit visual mode
>
– shift text right<
– shift text lefty
– yank (copy) marked textd
– delete marked text~
– switch case
:reg
– show registers content"xy
– yank into register x"xp
– paste contents of register x
Tip: Registers are being stored in ~/.viminfo, and will be loaded again on next restart of vim.
Tip: Register 0 contains always the value of the last yank command.
:marks
– list of marksma
– set current position for mark A`a
– jump to position of mark Ay`a
– yank text to position of mark A
qa
– record macro aq
– stop recording macro@a
– run macro a@@
– rerun last run macro
yy
– yank (copy) a line2yy
– yank (copy) 2 linesyw
– yank (copy) the characters of the word from the cursor position to the start of the next wordy$
– yank (copy) to end of linep
– put (paste) the clipboard after cursorP
– put (paste) before cursordd
– delete (cut) a line2dd
– delete (cut) 2 linesdw
– delete (cut) the characters of the word from the cursor position to the start of the next wordD
– delete (cut) to the end of the lined$
– delete (cut) to the end of the linex
– delete (cut) character
:w
– write (save) the file, but don’t exit:w !sudo tee %
– write out the current file using sudo:wq
– write (save) and quit:x
– write (save) and quitZZ
– write (save) and quit:q
– quit (fails if there are unsaved changes):q!
- quit and throw away unsaved changesZQ
– quit and throw away unsaved changes
/pattern
– search for pattern?pattern
– search backward for pattern\vpattern
– ‘very magic’ pattern: non-alphanumeric characters are interpreted as special regex symbols (no escaping needed)n
– repeat search in same directionN
– 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
:vimgrep /pattern/ {file}
– search for pattern in multiple files (e.g. :vimgrep /foo/ **/*):cn
– jump to the next match:cp
– jump to the previous match:copen
– open a window containing the list of matches
:e file
– edit a file in a new buffer:bnext
– go to the next buffer:bn
– go to the next buffer:bprev
– go to the previous buffer: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 windowCtrl + ws
– split windowCtrl + ww
– switch windowsCtrl + wq
– quit a windowCtrl + wv
– split window verticallyCtrl + 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)
:tabnew
or:tabnew file
– open a file in a new tabCtrl + wT
– move the current split window into its own tabgt
– move to the next tab:tabnext
– move to the next tab:tabn
– move to the next tabgT
– move to the previous tab:tabprev
– move to the previous tab: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:tabdo command
– run the command on all tabs (e.g.:tabdo q
– closes all opened tabs)