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 matchpairsin 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
ya` - 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:wqor:xorZZ- 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