Vim Tips #3: Vim 命令的模式
當然,對於記憶力超強的人,可以全部記住這些按鍵,但是他們的學習方式實際上是受限的。我們需要做的不是記住各種按鍵序列,而是要理解 Vim 中命令組合的模式。
仔細思考我們的編輯需求,大多數時候,要麼是直接單個擊鍵滿足需求,要麼是先一個操作命令,然後一個移動命令,比如典型的按鍵重複操作,俗稱雙跳。
當我們開始接觸其他的特性,比如寄存器(Register)、重複(Repeat)的時候,可能會覺得 Vim 中的命令沒啥規律可行,實際上卻恰恰相反,Vim 中的命令模式非常固定,下面的命令模式不是我總結出來的,但我當年學 Vim 時看了之後頓悟了,也分享給你:
Vim 的命令模式具有一致性,但是通常裡面的部分是可選的,概括來說,包含四部分:
- 寄存器名稱(Register,可選,如果沒指定的話,就使用默認的未命名寄存器,至於寄存器我的個人感受是,在我學會之前,我不知道還有這麼精巧的東西,在絕大多數編輯器裡面,你只有一個寄存器,但是 Vim 中你有很多個)
- 重複次數(Repeat,直接給個數字就行,如果你不指定操作重複的次數,默認是一次)
- 操作(Operation,比如 d 用來刪除,y 用來複制等)
- 移動(Movement,與操作有關,比如 yy 就是用來複制當前行,通常來說移動是需要把你的游標移動到某個地方,移動的方式太多了,最常見的就是移動游標的方式)。
Vim 的所有命令基本都是這種模式,大多數時候你不需要寄存器,可能也不需要移動。
下面我們來舉幾個具體的例子:
3dwn
從當前位置往後刪除 3 個單詞,把內容放在未命名寄存器中。
"a13yjn
從當前位置往下複製 13 行,並且放在名字叫 a 的寄存器中。
"a13pn
把寄存器 a 中的內容粘貼 13 變,現在的問題是你得到了多少行?對 13 * 13 = 169 行。這個例子中並沒有展示寄存器的真正威力,關於這個以後再寫。
如果你看到這裡,請仔細結合你使用 Vim 的經歷,思考下是不是這樣,熟悉和理解了模式,你會發現,所有的命令其實都是同宗同源,把 Vim 用的很溜也不是一件難事。
以上,希望對你有用!
推薦閱讀:
※Vim 新人學習路線, 小技巧
※想用 vim 寫 python,python-mode 幫你搞定[視頻]
※SpaceVim release v0.6.0
※輕鬆使用cscope-tags-vim瀏覽C/C++源代碼