vim 录制宏,自动循环执行组合操作 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JoiT
V2EX    Vim

vim 录制宏,自动循环执行组合操作

  •  
  •   JoiT 2018-09-01 15:40:59 +08:00 3265 次点击
    这是一个创建于 2671 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    在 vim 中录制宏的意思就是把一段操作录制下来,然后可以重复执行。打个比方,我有一个文本,一共 50000 行,我要在每一行后面加一个英文句号。这个操作如果手动做的话效率非常低。这时候我可以这样,在每一行后面加一个英文句号,然后让 vim 自动重复执行这个操作,这是非常有规律的。

    要在一行后面加英文句号的操作有两种主要方法

    第一种,在 normal 模式下,执行:

    $a. 
    操作演示:

    演示 1

    第二种,在 normal 模式下,执行:

    A. 

    操作演示:

    演示 2

    宏的详细操作

    我们在使用 vim 的时候,有时候一不小心在 normal 模式下按到 q,然后再按一个键(比如 t )的时候左下角会出现一个 recording @t,这其实就开启了宏录制,你接下来的 vim 内操作全部都会被记录,直到你再次按下 q 的时候,宏就录制完成了,我们暂且称之为:宏存储在 t 寄存器中,你想使用那一段宏的时候,只需要按下 @t 就可以了,如果你要循环 100 次数,就执行 100@t,如果想使用其他的键(比如 abcd )也是可以的。

    接下来是操作演示,我这里已经写了一个 50000 行的文本文件,我现在要使用宏在每一行的后面加上一个英文句号:

    宏录制完整操作

    操作分解:

    第一步

    vim test 

    用 vim 打开一个名为 test 的文件,它里面已经有 50000 行内容了

    第二步

    我在文件的顶部加了一个空行,这样子做是因为我想要循环执行在每一行后面加句号这个动作,那我得一行行衔接下去,所以我把光标一开始定位在那个空行里面,这样我的第一个动作就是要到下一行,这样我就可以循环往下执行了

    第三步

    qt 

    打开宏录制,我用的还是 t,打开录制之后,左下角出现了 recording @t 的字样,说明已经开始录制了。然后我就先到下一行,然后在末尾加了一个句号,最后再次按下 q 键,录制完毕,这样我的宏就做好了,t 寄存器里面保存的操作就是:

    下一行 -> 光标定位到行尾 -> 进入 insert 模式 -> 输入句号 -> ESC

    翻译成 vim 的操作就是:

    j$a. 

    jA. 

    第四步

    现在就可以调用了,我调用了三个回合

    10@t 100@t 1000@t 

    我先循环调用 10 次宏,来试一下录制的对不对,发现录制正确之后,再调用了 100 次,也是完全正确的,最后我调用了 1000 次,执行有点慢,cpu 被吃了很多,但还是正确执行了。其实我们可以在宏的录制中给 10 行加句号,这样调用 1000 次会快一点,我这里只是演示而已,就不去折腾了。

    我的公众号

    曼妮小代码

    博客

    https://www.cnblogs.com/JoiT/p/recording_vim.html

    第 1 条附言    2018-09-03 09:57:50 +08:00
    哈哈 蟹蟹捧场 开心
    7 条回复    2018-09-03 23:08:29 +08:00
    kingcc
        1
    kingcc  
       2018-09-01 16:48:54 +08:00 via Android
    推广?
    PythonAnswer
        2
    PythonAnswer  
       2018-09-02 01:12:12 +08:00 via iPhone
    喜欢手写正则 感觉更快
    7jmS8834H50s975y
        3
    7jmS8834H50s975y  
       2018-09-02 13:54:46 +08:00
    关于 Vim 这篇文章足够了:

    https://github.com/wsdjeg/vim-galore-zh_cn
    wocanmei
        4
    wocanmei  
       2018-09-02 16:44:20 +08:00 via iPhone
    @wsdjeg 专业砸场子
    nG29DOMuRYTWfcSr
        5
    nG29DOMuRYTWfcSr  
       2018-09-03 09:26:21 +08:00 via Android
    @wocanmei 不是砸场子,这篇包括上一篇作者写的都很好。
    sbw
        6
    sbw  
       2018-09-03 13:35:22 +08:00
    难道不是 ctrl+v 然后 Ga 然后输入 . 然后 Esc 就搞定了?
    ivechan
        7
    ivechan  
       2018-09-03 23:08:29 +08:00
    宏确实很好用,无脑~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     929 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 20:28 PVG 04:28 LAX 12:28 JFK 15:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86