Các phím tắt để sử dụng Vi/Vim editors
September 15, 2017 by Kinh Nguyen
Global
:help keyword
- open help for keyword:o file
- open file:saveas file
- save file as:close
- close current paneK
- open man page for word under the cursor
Cursor movement
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)%
- move to matching character (default supported pairs: ‘()’, ‘{}’, ‘[]’ - use:h matchpairs
in vim for more info)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 xFx
- jump to previous occurence of character xTx
- jump to after previous occurence of character x;
- repeat previous f, t, F or T movement,
- repeat previous f, t, F or T movement, backwards}
- 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.
Insert mode - inserting/appending text
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
Editing
r
- replace a single characterJ
- join line below to the current onecc
- 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
Marking text (visual mode)
v
- start visual mode, mark lines, then do a command (like y-yank)V
- start linewise visual modeo
- move to other end of marked areaCtrl
+v
- start visual block modeO
- 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
Visual commands
>
- shift text right<
- shift text lefty
- yank (copy) marked textd
- delete marked text~
- switch case
Registers
: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
:marks
- list of marksma
- set current position for mark A- ``a` - jump to position of mark A
y
a` - yank text to position of mark A
Macros
qa
- record macro aq
- stop recording macro@a
- run macro a@@
- rerun last run macro
Cut and paste
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
Exiting
:w
- write (save) the file, but don’t exit:w !sudo tee %
- write out the current file using sudo:wq
or:x
orZZ
- write (save) and quit:q
- quit (fails if there are unsaved changes):q!
orZQ
- quit and throw away unsaved changes
Search and replace
/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
Search in multiple files
-
: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