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,要習慣視乎情況,使用IaAoOsC等) <ESC>返回normal mode
這個時候, 編輯效率應會恢復到和你之前用的普通編輯器一樣,甚至有少量提高。
學習什麼是 operator (命令
dyc等),什麼是 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),你可以用任何一個{}來測試,然後找另外一個地方pgUiw(由 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,嘗試幾個小時候因爲覺得熱鍵太不"人性化”而放棄, 但偶爾會向人提起他見過江湖上有你這麼一號人物。