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