Vim Tips #3: Vim 命令的模式

最近 Stack Overflow 宣布成功幫助 100W 開發者退出 Vim 可以看出,在很多的初學者眼中,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++源代碼

TAG:Vim | 开发工具 | 效率 |