Vim 的宏與文本對(duì)象
這一小節(jié)我們來講解一下 Vim 的文本對(duì)象和宏的概念,這兩個(gè)概念比較難理解。但是卻很重要,下面我們一起來看一下:
1. 文本對(duì)象
文本對(duì)象首先針對(duì)的就是文本。文本就包括單個(gè)字符,單詞,句子甚至段落。作為編輯器操作文本是最基本的功能。但是如何能高效的操作上述這些不同文本對(duì)象每個(gè)編輯器可能都不相同。Vim 也有它自有的特點(diǎn)。它把這些文本都稱之為文本對(duì)象。所以文本對(duì)象聽著高大上,其實(shí)很容易理解。簡單可以按照如下分類:
1.1 單詞/句子/段落
文本對(duì)象 | 說明 | 備注 |
---|---|---|
w | word | 單詞 |
s | sentence | 句子 |
p | paragraph | 段落 |
1.2 塊文本對(duì)象
文本對(duì)象 | 說明 | |
---|---|---|
]/[ | [] 塊 | |
)/(、b | ()塊 | |
>/< | <>塊 | |
}/{、B | {} 塊 | |
t | 標(biāo)簽塊: <> </> |
1.3 文本對(duì)象公式
在之前操作中有很多操作都已經(jīng)涉及到了文本對(duì)象操作,這里先拋出一個(gè)公式。后面會(huì)舉例說明。
{operator}{a}{object}
{operator}{i}{object}
daw = delete a word
ciw = change inner word
上述公式中 operator 之前已經(jīng)講過了,忘記的同學(xué)可以查看前面的內(nèi)容,或者最好可以通過 Vim 的幫助查看。object 就是我們上述講的三個(gè)文本對(duì)象??赡苄枰⒁獾木褪撬鼈冎g的 a 和 i。
- a: 包含尾部間隔空格
- i: 只是內(nèi)容本身,不包含尾部單詞間隔空格
2. 文本對(duì)象實(shí)戰(zhàn)操作
具體的指令和之前的增刪改查講過的并無二異。都是可以套用。這里不再贅述了。所以這里直接看看文本對(duì)象操作本身到底有何不一樣的地方。
2.1 開發(fā)場景——塊文本對(duì)象
刪除某段括號(hào)內(nèi)所有內(nèi)容。這里以 Golang 一段代碼為例。
Tips:大家可以根據(jù)這段代碼試試刪除小括號(hào)
2.2 通用場景——句子/段落
隨機(jī)打開 object.txt
文件,并刪除其中的一個(gè)句子,包括空格。然后刪除一個(gè)段落,不包括空格。
大家可以根據(jù)上述場景舉一反三。原理都是大同小異。
3. 宏
宏字面理解不太好理解。本質(zhì)就是個(gè)重復(fù)回放腳本。我們可以把經(jīng)常用到的固定步驟操作錄制下來,然后需要時(shí)候只用調(diào)用下就可以了,這就是宏。類似于數(shù)據(jù)庫里的存儲(chǔ)過程,或者是代碼腳本。
3.1 宏錄制步驟
- 普通模式下,q 鍵便是宏錄制/停止快捷鍵。
- 宏錄制后需要放在寄存器的,所以需要跟上寄存器名字q{register}。比如:qa
- 錄制完畢后,按下 q 鍵停止
- 調(diào)用時(shí)候只需要 @{register} 即可。就像微博一樣 @ 一下。
- 重復(fù)調(diào)用 n@{register}
3.2 宏操作指令
指令 | 說明 | |
---|---|---|
qa | 錄制宏到寄存器a | |
qA | 寄存器a中追加宏 | |
n@a | 執(zhí)行n遍寄存器 | |
@@ | 執(zhí)行一遍上一次操作 | |
:n,mnormal @a | n到m行執(zhí)行寄存器a中宏 | |
:let @a= ’ | 編輯宏 |
3.4 宏最佳實(shí)踐
- 規(guī)范光標(biāo)位置:0——推薦在行首
- 執(zhí)行編輯和操作
- 移動(dòng)光標(biāo)到容易回訪的位置:j
4. 宏實(shí)戰(zhàn)
我們?cè)诖a中通過宏批量加注釋。
錄制宏到 c 寄存器,錄制完之后批量調(diào)用宏 n@c:
使用 @@ 命令執(zhí)行一遍上一次的操作,為 main.go 文件的第4,21,25行增加注釋:
5. 總結(jié)
以上就是宏與文本對(duì)象的基本原理和相關(guān)內(nèi)容。尤其是宏的概念可以讓很多重復(fù)操作事半功倍。讓 Vim 變得更有用也更有趣。