1. 程式人生 > 其它 >vim 從嫌棄到依賴(5)——普通模式的一些操作

vim 從嫌棄到依賴(5)——普通模式的一些操作

通過前面幾章內容的鋪墊,基本已經介紹完了普通模式的大部分內容,按照進度下面會依次介紹插入模式、命令模式、選擇模式的一些操作。根據不同模式提供功能的多少和使用頻率,篇幅會有長有短。本來這篇文章應該介紹插入模式的。但是我在整理最近寫的內容的時候發現我忘記了一些不太常用但是很好用的一些小技巧,所以這篇文章我們還是停留在普通模式下。

快速翻閱文字

跳轉游標的操作,之前介紹過 h j k l w等操作,但是在閱讀程式碼的時候,僅僅根據這幾個操作,效率著實有點低,即使使用類似 數字 + j/k 的方式來進行行間跳轉,效率也一般。這裡再介紹幾個操作

  • ctrl + f: 向下翻頁
  • ctrl + b: 向上翻頁

這裡沒有什麼具體的例子,各位小夥伴只需要找到一個大一點的檔案試試就能看到效果

除了使用這種翻到下一頁或者上一頁的操作之前,還可以相對於游標滾屏

  • zt: 將游標所在行移動到視窗頂端
  • zb: 將游標所在行移動到視窗底端
  • zz: 將游標所在行移動到視窗中央


這個提供兩個問題:

  1. 為什麼沒有將他們放到前面跟 h j k l 這類的操作一塊講呢,當然是因為我忘記了啊。。。。這個理由雖然很重要,但是並不是主要理由。大家可以先猜猜。
  2. 既然這個操作能大幅度提高我們閱讀程式碼的效率,那為什麼使用頻率還會這麼低呢

有興趣的小夥伴可以先不看後面的解答,自己操作一下,特別是在認真閱讀程式碼的時候。可能就會有跟我下面說的一樣的體驗

好了,現在公佈我的答案:

  1. 針對問題一,我的答案是,這幾個操作並不屬於motion 那一類,小夥伴們在試驗的時候可以仔細觀察一下游標,游標相對於視窗的位置其實並沒有發生變化。
  2. 大家在閱讀程式碼的時候使用它們會不會覺得跳轉太多了,每次跳轉都感覺跟前面讀過的銜接不上呢。體驗非常不好,還不如我一直使用 jjjjjjjjj 甚至 10j 之類的操作。現在我採取折中的辦法,就是翻頁的快捷鍵我用,但是我將其對映為了 10j (如何對映快捷鍵以及如何定製自己的vim在後面說)

撤銷

撤銷在普通模式下使用 u,反撤銷使用 Ctrl+r
vim的撤銷是撤銷上次修改,結合之前介紹的. 命令的部分,我們可以知道上次修改指的是從進入插入模式那一刻起到退回到普通模式為止,進行的一系列的修改。根據這個特徵,我們可以很方便的定義撤銷哪些內容。例如在寫這篇文章的時候我進入插入模式進行編寫。然後在需要構思的地方退回到普通模式,想到了一些再次進入插入模式編輯,一旦發現有問題就可以在普通模式下撤銷上次的修改。

例如下面的例子:

  • 我們先使用 cw 替換一個單詞,然後刪除一行。
  • 使用u 恢復上一次的修改,也就是恢復刪除的一行
  • 使用 ctrl + r 執行反撤銷,即再次刪除上次恢復的一行

    uctrl+u 是操作符,它們符合之前介紹的 operat = 數字 + operator的公式,因此如果想要恢復到最開始的狀態,可以使用 2u

普通模式下對數字文字進行遞增遞減操作

假設我們這麼一段程式碼

var foo = 5 + i;

現在希望改為

var foo = 10 + i;

我們當然可以使用cw 來刪除5,然後在插入模式下寫入10。但是這裡要介紹一個新的方法——使用 Ctrl + a 來在數字文字上進行遞增操作,它也是一個操作符。符合之前的公式。這裡假設游標在 5 的位置,然後執行 5 Ctrl+a 來實現將5這個數字文字遞增5個的操作

遞減操作使用 Ctrl x

下面請各位試試這麼幾種情況:

  1. 如果游標不在數字位置,執行 Ctrl a 會發生什麼呢?
  2. 假設程式碼中有不止一個位置有數字,游標也不在某個具體數字上,執行Ctrl + a 又會發生什麼呢?
  3. 當前行沒有數字,在後面幾行有數字,執行Ctrl a 會發生什麼呢?

下面公佈答案
如果游標不在數字所在位置,該命令會在本行往後查詢第一個出現數字的地方,並將游標跳轉到該處,然後執行加1的操作。

花了這麼多篇幅總算將普通模式下的一些操作說完了,後面將會進入按照順序分別講述,插入模式、選擇模式、命令模式。請感興趣的小夥伴關注一下本專欄,有想要了解的內容也歡迎留言,等我按計劃更新完了我想寫的內容之後會考慮安排上的,在此謝謝小夥伴的捧場