亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Vim 的宏與文本對象

這一小節我們來講解一下 Vim 的文本對象和宏的概念,這兩個概念比較難理解。但是卻很重要,下面我們一起來看一下:

1. 文本對象

文本對象首先針對的就是文本。文本就包括單個字符,單詞,句子甚至段落。作為編輯器操作文本是最基本的功能。但是如何能高效的操作上述這些不同文本對象每個編輯器可能都不相同。Vim 也有它自有的特點。它把這些文本都稱之為文本對象。所以文本對象聽著高大上,其實很容易理解。簡單可以按照如下分類:

1.1 單詞/句子/段落

文本對象 說明 備注
w word 單詞
s sentence 句子
p paragraph 段落

1.2 塊文本對象

文本對象 說明
]/[ [] 塊
)/(、b ()塊
>/< <>塊
}/{、B {} 塊
t 標簽塊: <> </>

1.3 文本對象公式

在之前操作中有很多操作都已經涉及到了文本對象操作,這里先拋出一個公式。后面會舉例說明。

{operator}{a}{object}
{operator}{i}{object}

daw = delete a word
ciw = change inner word

上述公式中 operator 之前已經講過了,忘記的同學可以查看前面的內容,或者最好可以通過 Vim 的幫助查看。object 就是我們上述講的三個文本對象??赡苄枰⒁獾木褪撬鼈冎g的 a 和 i。

  • a: 包含尾部間隔空格
  • i: 只是內容本身,不包含尾部單詞間隔空格

2. 文本對象實戰操作

具體的指令和之前的增刪改查講過的并無二異。都是可以套用。這里不再贅述了。所以這里直接看看文本對象操作本身到底有何不一樣的地方。

2.1 開發場景——塊文本對象

刪除某段括號內所有內容。這里以 Golang 一段代碼為例。

Tips:大家可以根據這段代碼試試刪除小括號

2.2 通用場景——句子/段落

隨機打開 object.txt 文件,并刪除其中的一個句子,包括空格。然后刪除一個段落,不包括空格。

大家可以根據上述場景舉一反三。原理都是大同小異。

3. 宏

宏字面理解不太好理解。本質就是個重復回放腳本。我們可以把經常用到的固定步驟操作錄制下來,然后需要時候只用調用下就可以了,這就是宏。類似于數據庫里的存儲過程,或者是代碼腳本。

3.1 宏錄制步驟

  • 普通模式下,q 鍵便是宏錄制/停止快捷鍵。
  • 宏錄制后需要放在寄存器的,所以需要跟上寄存器名字q{register}。比如:qa
  • 錄制完畢后,按下 q 鍵停止
  • 調用時候只需要 @{register} 即可。就像微博一樣 @ 一下。
  • 重復調用 n@{register}

3.2 宏操作指令

指令 說明
qa 錄制宏到寄存器a
qA 寄存器a中追加宏
n@a 執行n遍寄存器
@@ 執行一遍上一次操作
:n,mnormal @a n到m行執行寄存器a中宏
:let @a= ’ 編輯宏

3.4 宏最佳實踐

  • 規范光標位置:0——推薦在行首
  • 執行編輯和操作
  • 移動光標到容易回訪的位置:j

4. 宏實戰

我們在代碼中通過宏批量加注釋。

錄制宏到 c 寄存器,錄制完之后批量調用宏 n@c:

使用 @@ 命令執行一遍上一次的操作,為 main.go 文件的第4,21,25行增加注釋:

5. 總結

以上就是宏與文本對象的基本原理和相關內容。尤其是宏的概念可以讓很多重復操作事半功倍。讓 Vim 變得更有用也更有趣。