看板 Linux 關於我們 聯絡資訊
大家來學 VIM(一個歷久彌新的編輯器)[四] 複製(yank) yank 是什麼意思?有疑問的請查一下字典吧!就好像是中醫治療 中的「拔罐」的意思啦(是不是叫「拔罐」?知道的朋友指正一下 吧)!反正在 vi(m) 中,她就是複製 copy 的意思。這在 vi(m) 的思考邏輯裡,就是「拔」yank 起來,「放」put 上去。其實複 製的指令就是 y 一個而已,為什麼要獨立成一個單元來說明呢? 因為 vi(m) 複製、貼上的功能實在太獨特了,再配合第三單元介 紹的數目字,及 vi(m) 內部的緩衝區來使用的話,您會發現,原 來 vi(m) 肚子裡還暗藏著秘密武器。 ◎ 指令說明 yy 複製游標所在行整行。或大寫一個 Y。 2yy 或 y2y 複製兩行。ㄟ,請舉一反三好不好!:-) y^ 複製至行首,或 y0。不含游標所在處字元。 y$ 複製至行尾。含游標所在處字元。 yw 複製一個 word。 y2w 複製兩個字。 yG 複製至檔尾。 y1G 複製至檔首。 p 小寫 p 代表貼至游標後(下)。 P 大寫 P 代表貼至游標前(上)。 ※ 整行的複製,按 p 或 P 時是插入式的貼在下(上)一行。 非整行的複製則是貼在游標所在處之後(前)。 "ayy 將本行文字複製到 a 緩衝區 ※ a 可為 26 個英文字母中的一個,如果是小寫的話,原先的 內容會被清掉,如果是大寫的話是 append 的作用,會把內 容附加到原先內容之後。 ※ " 是 Enter 鍵隔壁的那一個同上符號(ditto marks)。 "ap 將 a 緩衝區的內容貼上。 ※ 緩衝區的術語在 vim 稱為 registers,vim 擴充了相當多的 功能,有興趣深入的朋友請 :h registers。您用 d、c、s、 x、y 等指令改變或刪除的內容都是放在 registers 中的。 例如:您用 dd 刪除的一行,也是可以使用 p 來貼上的。只 要是在緩衝區的內容都可以使用 p 來貼上,不是一定要 y 起 來的內容才能用 p。因此您認為 p 是 paste 也可以,認為是 put 可能較正確。 5"ayy 複製五行內容至 a 緩衝區。 5"Ayy 再複製五行附在 a 內容之後,現在 a 中有十行內容了! ※ ㄟ!不要我一直用 a 您就認為只有 a 可以用喔。26 個英文 字母都可以的,交叉運用下,您會發覺 vi(m) 肚量不小。 ※ 問題來了!忘記誰是誰的時候怎麼辦? :reg(冒號命令)就 會列出所有 registers 的代號及內容。您現在就試著按看看 咦!怎麼還有數目字、特殊符號的緩衝區,原來您剛剛刪除 的就預設放在 " 這個緩衝區,然後依序是 0,1,2,...9。也 就是說您按 p 不加什麼的話,是取出 " 緩衝區的內容的。 % 指的是目前編輯的檔案,# 指的是前一次編輯的檔案。還 有其它的呀!因為沒什麼重要,就請 :h registers 吧! registers 有個 "s" 結尾,不要搞錯了,而且 Tab 的補全 鍵 vim 也支援的,也就是說您鍵入 :h regi 再按 Tab 鍵, vim 就會幫您補全,按了 Tab 後發現不是您要的,那就繼續 按,總會出現您要的。:-) ※ Tab 補全的功能,elvis 也有,但叫出 registers 列表的命令 則沒有,您得自行記憶在您的腦袋瓜子裡。而且 elvis 的補全 能力並沒 vim 強。 ◎ 天大的指令 . 這是什麼?ㄚ,是英文句點啦!沒錯,就是英文句點。什麼意 思?重複前次的編輯動作。這個指令太高明了,只要是編輯動 作(移動游標不算,冒號命令也不算)都可以按英文句點來重 複,要重複幾次都可以。 例如:您按了 yy,然後按 p 就會複製一整行,如果要重複這個動 作的話,就可以按 . ,也可以把游標移到其它地方後再按。其它 dd,dw,r,cw 等編輯指令都可以這樣來重複。如果您要重複做某 些編輯動作時,千萬千萬一定要想到有這麼一個英文句點重複指令 。ㄚ,拜託啦!您一定要記得常用這個指令。 ◎ 疑難雜症 1. 那 mouse 中鍵的剪貼功能還有嗎? 當然還有,不管在 console 或 X terminal 中都照用不誤。 當然在 windows 下的話就不能用了,複製用 Ctrl-c,貼上 用 Shift-Insert 來代替。Ctrl-v 在 vim 中另有作用,在 windows 下就不必去麻煩它了。 2. ㄟ,我從 netscape 用 mouse copy 東東過來的時候,常常都 搞得天下大亂耶! 要設成 :set paste,預設是 map 至 F9 鍵的,您要 copy 之 前先按一下 F9,copy 完後再按一次 F9 來回復。這是 vim 的 擴充功能,elvis 沒有。那在 elvis 怎麼辦?只好 :set noai 了。在 GUI 的版本應不會有這種情形。 ※ set 的功能先不必去理它,往後會有一個單元專門討論。 朋友!您睡著了嗎?不要被嚇到了,您只要開個檔案,親自操作一 下就能心領神會。那用 mouse 不是更方便嗎?不見得,yyp 來複 製貼上一整行比較快,還是用 mouse 來拉比較快?您可以試看看 。 下回預告:尋找、替換。 ※ 有錯誤的地方,請指正,謝謝! ※ 未經作者同意,請勿移作商業用途。 ※ 如果各位的 BBS 站,news server 因故本系列文章並不完整, 您可以來信向在下索取,很樂意寄一份給您。 -- ======= Edward Lee [email protected]