2015年7月26日 星期日

Vim - Ch2 Vim 游標移動 與 編輯指令

 

這裡沒有全部的快捷建,是有挑過的,已經精選到不能再少了,再少就無法比滑鼠還快,失去學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  移至螢幕底第一個非空白字元。
和 PageDown,PageUp 不一樣,內文內容並未動,只是游標在動而已。


翻頁移動
  • 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 個字元,可重設)。
:set shiftwidth? 可得知目前的設定值。:set shiftwidth=4 可馬上重設為 4 個字元。shiftwidth 可簡寫成 sw。


[用心去感覺] 在終端外部複製貼上
如果在終端外部複製,在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。    

結束 v-mode 的方式亦可使用 Esc 鍵,或統一使用 Ctrl-c。圈選後可以使用常用的編輯指令
  • 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






技術提供:Blogger.