VIM 練級指南
Note
原文爲回覆吧友提問, 發表於 此帖四樓, 故內容有針對性, 措辭也稍嫌戲謔, 更與該帖上下文聯繫密切, 原不適合紀錄此處, 無奈貼吧環境不適合長久保存, 故轉錄於此, 除排版及明顯打字錯漏外, 並不修改。
一直都想寫些類似的東西, 但一直因爲各種原因沒完成, 現在隨便寫個簡陋的, 以後有時間再整理, 可按照這個練級。
學會盲打
之貳
將我這貼複製保存起來,以備後用,貼吧東西難保存。
配置文件先從最簡開始, 在 5 級前別考慮配置插件, 千萬別硬背命令, 千萬別直接取用別人的配置文件。
基本還是長時間待在
insert mode
下, 會覺得 Vim 也不過爾爾, 也不好用。這個時侯, 編輯效率可能比用原來的一般編輯器還低, 別人問使用什麼編輯器時, 多半會回答:Vim 再配一個 nano, kate, kwrite, gedit, geany 或其它 IDE 之類的。
養成習慣待在
normal mode
(normal 不是白叫的), 只有輸入時才進入insert mode
, 輸入完馬上<ESC>
學習normal mode
下的移動命令, 這個時侯輸入文字標準流程:normal mode
移動命令準確定位光標(記住,搜索命令也是移動命令)- 進入
insert mode
編輯(進入insert mode
別只用i
,要習慣視乎情況,使用I
a
A
o
O
s
C
等) <ESC>
返回normal mode
這個時候, 編輯效率應會恢復到和你之前用的普通編輯器一樣,甚至有少量提高。
學習什麼是 operator (命令
d
y
c
等),什麼是 motion (所有能移動光標的命令,h j k l w e f t / ?
等等)。 學習 operator + motion 的方式,如ct.
(將當前光標到.
【點】之間的內容刪除並進入insert mode
準備修改) 學習基礎的 Ex 命令,:s
什麼的。這個時侯,編輯效率開始明顯提高,在用其它一般編輯器時,會開始覺得不習慣和低效率。
學習 text-objects,知道 operator + text-objects 的方法,可進行手術般精準的定位和修改。 既然你主要用在 c/c++,舉一些在這個情況下有用的例子:
ci"
(由 change operator
c
和 text-ojbectsi"
組成) 這個命令會找到當前光標所在行的下一個"
括起來的字符串,清除引號裏面的內容,並進入insert mode
以方便修改。 用起來比解釋起來簡單,你可用const char* hello = "Hello world";
類似這樣的代碼來測試。
yaB
(由 yank operator
y
和 text-objectaB
組成) 這個命令會將當前光標所在的代碼塊({}
括起來的內容,包括花括號本身)複製到默認register
, 方便在其它地方用p
貼出來(當然,寫代碼不鼓勵 copy and paste),你可以用任何一個{}
來測試,然後找另外一個地方p
gUiw
(由 make uppercase operator
gU
和 text-objectiw
組成) 這個命令會將當前光標所在的word
全部變成大寫, 如將max_size
變成MAX_SIZE
這個時候,開始知道爲什麼 Vim 精確高效,而且並不是因爲全鍵盤無需鼠標。
習慣 operator + motion 後,發現 . 命令很好用,多注意使用可重複的命令組合, 練習使用書簽定位,
q
記錄宏,使用多個register
,使用args
,使用buffer
, 使用其他的 Ex 命令。這個時候,想不起沒用 Vim 之前的日子是怎麼過來的。
開始 map 經常反覆使用的命令,開始寫 vimscript,開始知道自己需要什麼樣的插件。 試推薦幾個: pathogen 或 vundle,tagbar, CtrlP, Gundo, UltiSnips,surround,Syntastic,Conque,ack.vim,vim-commentary,fugitive(如果是 git 用戶)。 還有不少,但多對 c/c++ 沒直接幫助,就不提了。
這個時候,對其他編輯器提不起興趣,或許 emacs 除外。
擁有完全個人化的 vimrc,基本進入化境,成爲江湖上的傳說, 常有旁人觀察你編輯後,激起雄心壯志想要學 Vim,嘗試幾個小時候因爲覺得熱鍵太不"人性化”而放棄, 但偶爾會向人提起他見過江湖上有你這麼一號人物。