如何高效使用Vim

jiufreeman發表於2020-04-07

用vim 快兩年了 看過教程也不少,總的來說還是得自己多練習,當自己覺得有需要的時候,再新增功能。這裡分享個看過的最好的教程,出自貼吧的某個朋友,寫的很好

學會盲打

配置檔案先從最簡開始,在 伍級 前別考慮配置外掛,千萬別硬背命令,千萬別直接取用別人的配置檔案
基本還是長時間待在 insert mode 下,會覺得 vim 也不過爾爾,也不好用,

這個時候,編輯效率可能比用原來的一般編輯器還低,別人問使用什麼編輯器時,
多半會回答:vim 再配一個 nano, kate, kwrite, gedit, geany 或其他 IDE 之類的

養成習慣待在 normal mode(normal 不是白叫的),只有輸入時才進入 insert mode,輸入完馬上 <ESC>
學習 normal mode 下的移動命令,這個時候輸入文字標準流程:

  1. normal mode 移動命令準確定位游標(記住,搜尋命令也是移動命令)
  2. 進入 insert mode 編輯(進入 insert mode 別隻用 i,要習慣視乎情況,使用 I a A o O s C)
  3. <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 和 text-object i" 組成)

這個命令會找到當前游標所在行的下一個 " 括起來的字串,清除引號裡面的內容,並進入 insert mode 以方便修改
用起來比解釋起來簡單,你可用 const char* hello = "Hello world."; 類似這樣的程式碼來測試

yaB (由 yank operator 和 text-object aB 組成)

這個命令會將當前游標所在的程式碼塊({} 括起來的內容,包括花括號本身)複製到預設 register,
方便在其他地方用 p 貼出來(當然,寫程式碼不鼓勵 copy and paste),你可用用任何一個 {} 來測試,然後找另外一個地方 p

gUiw (由 make uppercase operator 和 text-object iw 組成)

這個命令會將當前游標所在的 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,嘗試幾個小時候因為覺得熱鍵太不"人性化”而放棄,
但偶爾會向人提起他見過江湖上有你這麼一號人物

相關文章