oeasy教您玩轉(zhuǎn)vim - 81 - # 宏macro的進(jìn)階
宏的進(jìn)階 macro
回憶
關(guān)于宏,上次有4個(gè)要點(diǎn)
qa 開(kāi)始錄制宏
q 結(jié)束錄制宏
@a 應(yīng)用宏
qA 追加錄制宏
甚至可以編輯宏
"ap 把宏作為文本粘貼出來(lái)
編輯之后
"ayy把新的宏裝在進(jìn)入a寄存器reg
這個(gè)宏還可以怎么玩呢???
建立環(huán)境
vi
oeasy.txt
插入一下內(nèi)容
a. oeasy
b. o2z
c. o3z
d. o9z

錄制新宏
qa0W~hjq
qa 在a寄存器里面開(kāi)始錄制
0 到行頭
W 跳一個(gè)大詞
~ 改變當(dāng)前光標(biāo)位置字符的大小寫(xiě)
j 向下一行
q 停止錄制
查看宏
:reg a
應(yīng)用宏
正常模式下直接命令的方式
應(yīng)用99行
應(yīng)用到當(dāng)前行
@a
99@a
u回來(lái)
用命令行的方式
切換模式并對(duì)2-4行執(zhí)行@a
切換到normal模式并對(duì)當(dāng)前行執(zhí)行@a
:normal @a
:2,4 normal @a
u回來(lái)
追加宏
gg
回到最初qAkA.<Esc>jq
qA
追加錄制宏到a寄存器k
是為了抵消上面的j
A
追加在本行最后.
寫(xiě)一個(gè).
<Esc>
退回到正常模式j
向下一行q
退出錄制這部分內(nèi)容,就被追加到宏a里面
可以
:reg a
看到0W~hjkA.<esc>j
:% normal @a
u回來(lái)
修改宏 macro
:reg a
目前
0W~hjkA.<esc>j
中jk
彼此抵消在文檔最后把寄存器a中的存儲(chǔ)的宏粘貼出來(lái)
Go"ap出來(lái)
修改為
0W~A.<esc>j
重新定義宏a
"ay$
觀察宏a
:reg a
批量執(zhí)行
:% normal @a
多文件執(zhí)行
除了
oeasy.txt
之外還有
o2z.txt
、o3z.txt
:!cp oeasy.txt o2z.txt
:!cp oeasy.txt o3z.txt
批量執(zhí)行
保存所有文件修改
對(duì)于args中的每個(gè)文件中的每一行執(zhí)行a這個(gè)宏
g global全局執(zhí)行
匹配任何字符匹配每一行.*
如果是
o.*
對(duì)應(yīng)的是以o開(kāi)頭的每一行normal @a 正常模式下執(zhí)行@a
列出所有參數(shù)
添加當(dāng)前文件夾下的所有txt文檔
:arga *.txt
:args
:argdo g/.*/normal @a
:argdo w
快速執(zhí)行
@@
執(zhí)行上一條宏
:2,5@
第2-5行執(zhí)行上一條宏
遞歸執(zhí)行宏
文件還是這樣的
oeasy.txt
a. oeasy
b. o2z
c. o3z
d. o9z
qaqqa0W~j@aq
停止錄制
執(zhí)行宏a
往下跳一行
改變大小寫(xiě)
跳大詞
到第一列
開(kāi)始錄制a
把a(bǔ)宏清空
qaq
qa
0
W
~
j
@a
q
然后運(yùn)行
這樣他就是自己執(zhí)行自己
直到最后一行無(wú)法再遞歸調(diào)用
就自動(dòng)跳出了
并行執(zhí)行
有素材如下
-錄制宏
import { FUNC1 } from "oeasy";
import { FUNC2 } from "o2z";
import { FUNC3 } from "o3z";
import function from "o9z";
import { FUNC4 } from "o9z";
import { FUNC5 } from "orz";
qa0f{gui{jq
往下一行
把{}里面的內(nèi)容小寫(xiě)
跳到{
到第1列
開(kāi)始錄制宏a
qa
0
f{
gui{
j
q 停止錄制
運(yùn)行宏
99@a
會(huì)卡到第4行
因?yàn)檎也坏絳
這個(gè)時(shí)候可以并發(fā)執(zhí)行
:1,$ normal @a
從第1行到最后一行每一行都在normal模式下執(zhí)行@a
總結(jié)
關(guān)于宏,我們回憶一下
qa 開(kāi)始錄制宏
q 結(jié)束錄制宏
@a 應(yīng)用宏
qA 追加錄制宏
控制寄存器內(nèi)容其實(shí)就是控制宏
宏還有一些特性
可以多文件執(zhí)行宏
可以并發(fā)運(yùn)行宏
可以遞歸執(zhí)行宏
宏是隨錄隨用的的
我想把一些東西固定下來(lái),讓他到時(shí)候不用定義就能執(zhí)行
可以么???
下次再說(shuō)!
[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (https://gitee.com/overmind1980/oeasyvim)
[藍(lán)橋?qū)嶒?yàn)樓 邀請(qǐng)碼FJWYIMGB] (https://www.lanqiao.cn/courses/2840)