【问题标题】:Searching for string while recording a macro in VIM在 VIM 中录制宏时搜索字符串
【发布时间】:2017-03-15 22:20:39
【问题描述】:

我想使用 vim 向列表中的对象添加一个新字段。每个对象的行数不一样。但是,每个对象的最后一个字段都是相同的。

每个对象的新字段都是相同的,所以我想我可以创建一个 vim 宏,在每个对象的末尾插入静态字段,并在前一行插入一个逗号。不过,我的问题是我无法在宏记录器中执行字符串搜索。

这是我想要完成的一个示例:

Input: [ { "prop1": 10, "prop2": 30, "last": 99 }, { "prop1": 80, "last": 10 }, { "propA": 33, "propB": 90, "propC": 38, "last": 100 } ]

Desired Output: [ { "prop1": 10, "prop2": 30, "last": 99, "new": 0 }, { "prop1": 80, "last": 10, "new": 0 }, { "propA": 33, "propB": 90, "propC": 38, "last": 100, "new": 0 } ]

我尝试通过在 vim 中输入以下内容来完成此操作:q q /last ENTER $ a , ESC p q。我已将"new: 0 复制到我的剪贴板。似乎搜索部分不起作用,因为每次我运行宏时,它都会粘贴光标开始的行,而不是字符串“last”的下一个实例的行。

【问题讨论】:

    标签: vim macros


    【解决方案1】:
    • 你可以执行这个命令:

      :%s#\v^(\s*)"last":\s*\d*\zs#,\r\1"new": 0#g

    • 您仍然可以使用宏来实现:

    首先拉下这一行:

     "new": 0
    

    然后执行这些击键:

    qqq
    qq/last ENTER A,ESCpq 
    

    注意:ENTER 和 ESC 是键盘上的键

    【讨论】:

    • 感谢您的解决方案。我尝试了您提供的相同宏,但我意识到虽然在 vi 模式下它在 Sublime Text 中不起作用,但当我在 unix 终端中运行 vi 时它起作用。我会接受你的回答,因为它证实了我最初的尝试并说服我在终端中尝试。
    • 这个宏应该在 vi/vim 中运行。如果您想在 sublime 中使用它,它是一个 不同的编辑器,您需要检查绑定并知道哪些是支持的,哪些不是复古包中的。到那时你就可以知道并理解它为什么不工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    相关资源
    最近更新 更多