在VIM中录制宏时搜索字符串

3
我想使用vim为列表中的对象添加一个新字段。每个对象的行数不同,但是最后一个字段对于每个对象都相同。
由于新字段对于每个对象都相同,因此我想创建一个vim宏,将静态字段插入到每个对象的末尾,并在前一行插入逗号。我的问题是,我无法在宏记录器中执行字符串搜索。
这里是我想要完成的示例:
输入: [ { "prop1": 10, "prop2": 30, "last": 99 }, { "prop1": 80, "last": 10 }, { "propA": 33, "propB": 90, "propC": 38, "last": 100 } ]
期望输出: [ { "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中键入以下内容来完成此操作:qq/last ENTER $ a, ESC p q。我已经将“new: 0”复制到剪贴板中。似乎搜索部分不起作用,因为每次运行宏时,它都会将光标起始的行粘贴而不是在下一个字符串“last”的行上插入。
1个回答

2
  • 您可以执行此命令:

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

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

首先复制此行:

 "new": 0

然后执行这些按键操作:

qqq
qq/last ENTER A,ESCpq 

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

(这段内容无需翻译,已经是中文了)

1
谢谢你的解决方案。我尝试了您提供的相同的宏,但我意识到在Sublime Text中以vi模式运行时它不起作用,但当我在unix终端中运行vi时它可以正常工作。我将接受您的答案,因为它确认了我的最初尝试,并说服我在终端中尝试它。 - Donovan McMurray
1
该宏旨在在vi/vim中运行。如果您想在不同的编辑器sublime中使用它,您需要检查绑定并了解vintage包中支持什么和不支持什么。那时您就可以知道并理解为什么它无法工作。 - Meninx - メネンックス

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接