EDIT: 這裡有個不錯的連結可以當做初學參考
http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/
這篇文章是給剛開始接觸vim的版友參考的
因為vim指令繁多,剛接觸時會很難接受它的邏輯
好像要將許多字母的對應全部都記起來,才會發揮vim的威力(雖然這麼說也沒錯:p)
也看到很多新人會上網列印vim cheat sheat
可是記不清楚各式指令,最後還是把vim當作記事本使用...
因此呢,想分享一些能幫助學習vim的心法,還有幫助記憶指令的撇步
如果版友有更多錦囊密技,也請掏寶分享,讓Editor版活絡起來吧!
vim or vi like editor最大的特色,就是有多種模式 (mode)
這也是vi/vim被認為難學的理由之一
關於mode的設計,vgod大在blog上面有一篇深入討論的文章:
http://blog.vgod.tw/2009/12/07/text-editing/
後來文字編輯器變得越來越複雜,快速鍵也大量增加,這時在有限的空間內
分配快速鍵的位置並且讓使用者容易學習又不容易忘記就成了一件困難的事
。現代的一般編輯器,包括很多寫程式用的IDE,大量使用各種混合Ctrl、
Shift、Alt的快速鍵,這種快速鍵設計哲學是把每一個功能對應到一組複合
鍵上。理所當然的,功能越多,快速鍵就越多越難記。
...
vi的這種設計避免了快速鍵的組合爆炸(想想看如果把各種組合都對應到一
個ctrl-alt快速鍵會有多少個..),並且讓使用者能完全使用鍵盤來精確、
快速的編輯一個文件,一旦熟悉這種操作後,手都不用離開鍵盤,不管是寫
程式或是寫文章都有了一種人機合一的流暢感,心中想到哪裡游標就能精確
移動到哪裡,不管多複雜的文字操作都能快速解決,心中的爽快感其實是難
以用筆墨形容的。
vim本身有11種模式,限於篇幅就先鎖定在normal and insert mode吧
一般進到vim時,會是在normal mode底下
大部分的複製、剪貼、滾動、移動游標、跳躍到書籤、錄製巨集
等"動作"都是在這個mode下完成的
要進入文字編輯模式,得按i
切回normal mode可以用esc或是^-[(ctrl-[的意思)
在normal mode底下,我暫時先將最常用的指令分成三類
action: insert, yank, delete, paste... (慣例中我們將複製稱作yank而非copy)
number: repeat action/motion
motion: cursor motion
其中最有特色的就是repeat number的部份
幾乎所有的指令都可以用number來重複(除了insert mode中的指令)
從數字著手我覺得會更容易感受到vim 的"文法"
比如說:
5b 向左移動5個單字 (移動單位和移動指令是合併的)
5^f 滾動5頁
6yy 複製6段 (變成複合句了)
d% 剪下這個括號內的所有內容
以上的動作都只需要花兩三個字元就可以做到
由於vi/vim有相當多的指令可以做各種動作
像是在單字間移動、段落、單字內、括號批配、頁首/尾、檔首/尾、行首/尾
等等
熟悉的動作指令越多,越能做出滑鼠無法做到的快速移動
同時可以跟action指令結合(action, motion在中文都通稱動作,真難翻...)
讓編修文字變得更有效率!
了解vim的文法,就可以來記憶一下幾個常用的motion
k w (a word) b (back a word) e (end of a word)
h l ^ (head of indent line) 0 (head of line)
j $ (end of line)
hjkl是上下左右,如果要追求高速的文字輸入效率
使用home row的效果會比使用上下左右高 (不知道home row是什麼請自己去查)
因此現在你可以操作看看vim指令了!
5k 向上五行
5w 向右五個字(游標在字首)
5e 向右五個字(游標在字尾)
$ 直接跳到行尾,重複次數無意義XD
剩下的請自己排列組合XD
然後來看幾個最常用的action指令:
d{motion} delete 刪除(所有的刪除都是剪下,會進入剪貼簿)
y{motion} yank 複製
c{motion} change 刪除並進入insert mode(可翻作刪修)
p paste 貼上
注:{motion}可以是複合的動作指令,如5w
注:paste因為和其他幾個指令性質有點不太相同,所以用不同的標色
我認為最核心的指令就是d,y,c,其他類似他們的指令都只是變形而已
現在可以將d,y,c跟其他的指令做組合:
d5w 刪五個字(到字首)
c^ 刪修到行首
不過如果每個動作都要跟其他動作指令做結合,就太慢了
所以就出現了幾種變形:
D 刪到行尾
C 刪修到行尾
dd 刪除整行
cc 刪修整行
yy 複製整行
Y 這也是複製整行...其實我比較希望是複製到行尾 ~"~
(順便問下版友,action到行首有沒有d^外更方便的按法啊?)
在這些motion前面可以加number,如:
5yy 複製五行
5cc 刪除五行再進入insert mode
另外有時候會需要以字元為單位的編輯,所以還有幾個小變形:
s substitude 刪修一個字元
x x 刪除一個字元
r replace 刪修一個字元再回到normal mode
R replace mode 取代模式
跟行單位的指令類似,在前面也可以加number:
5s 刪掉五個字元再進入insert mode
5x 刪五個字元
5r 將五個字元都換成新輸入的一個字元
R 每個輸入字元都會取代現在游標所在位置的字元
2R 取代的字會重複一次
看到這邊會不會有點頭昏眼花了呢XD
整理一下所有的指令:
k w (a word) b (back a word) e (end of a word)
h l ^ (head of indent line) 0 (head of line)
j $ (end of line)
刪除 複製 刪修 取代
d y c r
D Y C R (mode)
dd yy cc 貼上
x s p
切換mode
i (normal to insert)
R (normal to replace)
esc or ^-[ (back to normal)
其實沒有很多吧XD
這篇文章篇幅看起來很長,是為了要讓新進讀者能理解vim的文法
之後應該不會用這麼囉唆的語句來舉例了吧@ @|||