V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JoiT
V2EX  ›  Vim

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

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

    前言

    在 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
    喜欢手写正则 感觉更快
    wsdjeg
        3
    wsdjeg  
       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 专业砸场子
    SpaceVim
        5
    SpaceVim  
       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   ·   我们的愿景   ·   实用小工具   ·   3531 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 04:50 · PVG 12:50 · LAX 21:50 · JFK 00:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.