當(dāng)前位置:首頁(yè) > IT技術(shù) > 系統(tǒng)服務(wù) > 正文

vim 從嫌棄到依賴(5)——普通模式的一些操作
2022-04-19 11:15:54

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

快速翻閱文本

跳轉(zhuǎn)光標(biāo)的操作,之前介紹過 h j k l w等操作,但是在閱讀代碼的時(shí)候,僅僅根據(jù)這幾個(gè)操作,效率著實(shí)有點(diǎn)低,即使使用類似 數(shù)字 + j/k 的方式來(lái)進(jìn)行行間跳轉(zhuǎn),效率也一般。這里再介紹幾個(gè)操作

  • ctrl + f: 向下翻頁(yè)
  • ctrl + b: 向上翻頁(yè)

這里沒有什么具體的例子,各位小伙伴只需要找到一個(gè)大一點(diǎn)的文件試試就能看到效果
翻頁(yè)
除了使用這種翻到下一頁(yè)或者上一頁(yè)的操作之前,還可以相對(duì)于光標(biāo)滾屏

  • zt: 將光標(biāo)所在行移動(dòng)到窗口頂端
  • zb: 將光標(biāo)所在行移動(dòng)到窗口底端
  • zz: 將光標(biāo)所在行移動(dòng)到窗口中央

相對(duì)于光標(biāo)移動(dòng)
這個(gè)提供兩個(gè)問題:

  1. 為什么沒有將他們放到前面跟 h j k l 這類的操作一塊講呢,當(dāng)然是因?yàn)槲彝浟税?。。。。這個(gè)理由雖然很重要,但是并不是主要理由。大家可以先猜猜。
  2. 既然這個(gè)操作能大幅度提高我們閱讀代碼的效率,那為什么使用頻率還會(huì)這么低呢

有興趣的小伙伴可以先不看后面的解答,自己操作一下,特別是在認(rèn)真閱讀代碼的時(shí)候。可能就會(huì)有跟我下面說(shuō)的一樣的體驗(yàn)

好了,現(xiàn)在公布我的答案:

  1. 針對(duì)問題一,我的答案是,這幾個(gè)操作并不屬于motion 那一類,小伙伴們?cè)谠囼?yàn)的時(shí)候可以仔細(xì)觀察一下光標(biāo),光標(biāo)相對(duì)于窗口的位置其實(shí)并沒有發(fā)生變化。
  2. 大家在閱讀代碼的時(shí)候使用它們會(huì)不會(huì)覺得跳轉(zhuǎn)太多了,每次跳轉(zhuǎn)都感覺跟前面讀過的銜接不上呢。體驗(yàn)非常不好,還不如我一直使用 jjjjjjjjj 甚至 10j 之類的操作?,F(xiàn)在我采取折中的辦法,就是翻頁(yè)的快捷鍵我用,但是我將其映射為了 10j (如何映射快捷鍵以及如何定制自己的vim在后面說(shuō))

撤銷

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

例如下面的例子:

  • 我們先使用 cw 替換一個(gè)單詞,然后刪除一行。
    修改文本
  • 使用u 恢復(fù)上一次的修改,也就是恢復(fù)刪除的一行
    撤銷修改
  • 使用 ctrl + r 執(zhí)行反撤銷,即再次刪除上次恢復(fù)的一行
    反撤銷
    uctrl+u 是操作符,它們符合之前介紹的 operat = 數(shù)字 + operator的公式,因此如果想要恢復(fù)到最開始的狀態(tài),可以使用 2u

2u 撤銷兩次修改

普通模式下對(duì)數(shù)字文本進(jìn)行遞增遞減操作

假設(shè)我們這么一段代碼

var foo = 5 + i;

現(xiàn)在希望改為

var foo = 10 + i;

我們當(dāng)然可以使用cw 來(lái)刪除5,然后在插入模式下寫入10。但是這里要介紹一個(gè)新的方法——使用 Ctrl + a 來(lái)在數(shù)字文本上進(jìn)行遞增操作,它也是一個(gè)操作符。符合之前的公式。這里假設(shè)光標(biāo)在 5 的位置,然后執(zhí)行 5 Ctrl+a 來(lái)實(shí)現(xiàn)將5這個(gè)數(shù)字文本遞增5個(gè)的操作
遞增
遞減操作使用 Ctrl x 。

下面請(qǐng)各位試試這么幾種情況:

  1. 如果光標(biāo)不在數(shù)字位置,執(zhí)行 Ctrl a 會(huì)發(fā)生什么呢?
  2. 假設(shè)代碼中有不止一個(gè)位置有數(shù)字,光標(biāo)也不在某個(gè)具體數(shù)字上,執(zhí)行Ctrl + a 又會(huì)發(fā)生什么呢?
  3. 當(dāng)前行沒有數(shù)字,在后面幾行有數(shù)字,執(zhí)行Ctrl a 會(huì)發(fā)生什么呢?

下面公布答案
如果光標(biāo)不在數(shù)字所在位置,該命令會(huì)在本行往后查找第一個(gè)出現(xiàn)數(shù)字的地方,并將光標(biāo)跳轉(zhuǎn)到該處,然后執(zhí)行加1的操作。

花了這么多篇幅總算將普通模式下的一些操作說(shuō)完了,后面將會(huì)進(jìn)入按照順序分別講述,插入模式、選擇模式、命令模式。請(qǐng)感興趣的小伙伴關(guān)注一下本專欄,有想要了解的內(nèi)容也歡迎留言,等我按計(jì)劃更新完了我想寫的內(nèi)容之后會(huì)考慮安排上的,在此謝謝小伙伴的捧場(chǎng)

本文摘自 :https://www.cnblogs.com/

開通會(huì)員,享受整站包年服務(wù)立即開通 >