這裡沒有全部的快捷建,是有挑過的,已經精選到不能再少了,再少就無法比滑鼠還快,失去學vim的樂趣了QQ
常用的游標移動 (大致依照移動距離排列,由小到大。)
字元間移動
- h 左,或 方向鍵 或 Backspace
- j 下,或 方向鍵 或 Enter
- k 上,或 方向鍵
- l 右,或 方向鍵 或 Space
[用心去感覺] 使用 hjkl 鍵的移動
使用 hjkl 鍵的移動是為了使手不必離開打字區以加快打字的速度,如果不習慣就使用方向鍵吧!
單行間移動
- w 移至次一個字字首(英文單字)。
- b 移至前一個字字首(英文單字)。
- 0 移至行首
- $ 移至行尾
跨行移動
- n
n 為數字。游標向下移動 n 列 - :n 或 nG 移至第 n 行行首。
- ) 移至下一個句子(sentence)首。
- ( 移至上一個句子(sentence)首。
- } 移至下一個段落(paragraph)首。
- { 移至上一個段落(paragraph)首。
- % 這是{},[],()匹配,例如您的游標現在在 { 上只要按 %,就會跑到相匹配的 } 上,寫程式時很好用。
以當前螢幕為準的移動
- H 移至螢幕頂第一個非空白字元。
- M 移至螢幕中間第一個非空白字元。
- L 移至螢幕底第一個非空白字元。
翻頁移動
- Ctrl-f 即 PageDown 翻頁。
- Crtl-b 即 PageUp 翻頁。
檔首尾移動
- G 移至檔尾(最後一行的第一個非空白字元處)
- gg 移至檔首(第一行之第一個非空白字元處)
常用的編輯指令
進入 i-mode 的指令
- i 在游標所在字元前開始輸入文字(insert)。
- a 在游標所在字元後開始輸入文字(append)。
- o 在游標所在行下開一新行來輸入文字(open)。
- I 在行首開始輸入文字。
- A 在行尾開始輸入文字。
- O 在游標所在行上開一新行來輸入文字。
- J 將下一行整行接至本行(Joint)。
刪除指令
- x 刪除游標所在處之字元。
- X 刪除游標前之字元。
- dd 刪除一整行(delete line)。
- dw 刪除一個字(delete a en word)。
- dG 刪至檔尾。
- d1G 刪至檔首。或 dgg(只能用於 vim)。
- D 刪至行尾,或 d$(含游標所在處字元)。
- d0 刪至行首,或 d^(不含游標所在處字元)。
複製 (yank)
- yy 複製游標所在行整行。或大寫一個 Y。
- y^ 複製至行首,或 y0。不含游標所在處字元。
- y$ 複製至行尾。含游標所在處字元。
- yw 複製一個 word。
- yG 複製至檔尾。
- y1G 複製至檔首。
貼上 (paste, put)
- p 小寫 p 代表貼至游標後(下)。
- P 大寫 P 代表貼至游標前(上)。
取代指令
- r 取代一個字元
- R 取代字元至按 Esc 為止。
- cc 取代整行內容。或大寫 S 亦可。
- cw 替換一個英文字(word),中文不適用。(change)
- C 取代至行尾,即游標所在處以後的字都會被替換。或 c$。
- c0 取代至行首,或 c^。
- u 這個太重要了,就是 undo 鍵。
- Crtl+r 這個也是很重要,就是 redo 鍵。
簡單重排功能
- >> 整行向右移一個 shiftwidth(預設是 8 個字元,可重設)。
- << 整行向左移一個 shiftwidth(預設是 8 個字元,可重設)。
[用心去感覺] 在終端外部複製貼上
如果在終端外部複製,在vim裡貼上(Ctrl + v)時,記得加 :set paste 防止排版亂掉。
另外還有一勞永逸的方式,在你的 ~/.vimrc 裏面加上一行 set clipboard=unnamed,之後所有的複製貼上都會根據系統剪貼簿的內容更變,或是更變系統剪貼簿。
重要且很酷的編輯功能!
加上數目字
除了游標移動指令可以加上數字進行"接技"外,其他指令也有這個功能,數字通常代表要處理幾次的意思。這功能只有vim才有,非常潮,潮到出水~ 下面是一些範例 :
- 5dd 刪除游標所在處(含)起算以下五行內容。
- 2yy 複製兩行。
- 3r 按了 3r 後,您鍵入一個英文字,則三個字元皆會被您所鍵入的英文取代。
- 5J 將五行合併成一行。
- 3x 刪除三個字元。
- y2w 複製兩個字。
- 5i A Ecs 插入五個 A。
- 2i system Esc 插入 systemsystem。
- 5G 游標移至第五行,是從檔首開始起算。
- 5l 移至右第五個字元處,當然 j 是可以用方向鍵取代的。所有移動指令都可以加上數目字來控制。
使用緩衝區 (register)
緩衝區的術語在 vim 稱為 registers,vim 擴充了相當多的功能,有興趣深入的朋友請 :h registers。用 d、c、s、x、y 等指令改變或刪除的內容都是放在 registers 中的。例如:您用 dd 刪除的一行,也是可以使用 p 來貼上的。只要是在緩衝區的內容都可以使用 p 來貼上,不是一定要 y 起來的內容才能用 p。因此您認為 p 是 paste 也可以,認為是 put 可能較正確。下面是一些範例 :
- "ayy 將本行文字複製到 a 緩衝區
- "ap 將 a 緩衝區的內容貼上。
- 5"ayy 複製五行內容至 a 緩衝區。
- 5"Ayy 再複製五行附在 a 內容之後,現在 a 中有十行內容了!
a 可為 26 個英文字母中的一個,26 個英文字母都可以的,交叉運用下,您會發覺 vi(m) 肚量不小。如果是小寫的話,原先的內容會被清掉,如果是大寫的話是 append 的作用,會把內容附加到原先內容之後。
忘記誰是誰的時候怎麼辦?:reg(冒號命令)就會列出所有 registers 的代號及內容。另外,還有數目字、特殊符號的緩衝區,如果按 p 不加什麼的話,是取出 " 緩衝區的內容的。% 指的是目前編輯的檔案,# 指的是前一次編輯的檔案。其他用法 :h registers 有詳述。
標示指令
- v 小寫 v,這是屬於字元標示(character visual),按下 v 後就可以移動游標,游標走過的地方就會標示起來。再按一次 v 就會結束 v-mode。用 mouse 拉出的標示區也是屬於這類的標示。
- V 大寫 V,這是行標示(line visual),按下 V 後會整行標示起來(包括行首前空白的部分),您移動上下鍵,會標示多行。 mouse 連按三次左鈕,也是屬於此類的標示。再按一次 V 就會結束 v-mode。
- Ctrl-v 這是方塊標示(block visual),可縱向標示矩形區域。再按一次 Ctrl-v 就會結束 v-mode。
- d 刪除標示區內容。
- y 複製標示區內容。
- "ay 把標示區內容存於 a 緩衝區中。也可以用 "ap 來貼上。
- Shift-> 標示區內容向右移一個 Tab。
- Shift-< 標示區內容向左移一個 Tab。
重複前次的編輯動作 .
. 重複前次的編輯動作。只要是編輯動作都可以按英文句點來重複,要重複幾次都可以。非常常用且好用!
References
鳥哥的 Linux 私房菜 - 第九章、vim 程式編輯器
http://linux.vbird.org/linux_basic/0310vi.php#vi_vim_why
vgod/vimrc
https://github.com/vgod/vimrc
大家來學VIM(一個歷久彌新的編輯器) 作者:Edward Lee
http://www.study-area.org/tips/vim/index.html