2017-03-15 100 views
0

我想使用vim向列表中的对象添加新字段。每个对象的行数不相同。但是,每个对象的最后一个字段是相同的。在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”。

回答

0
  • 您可以执行此命令:

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

  • 你仍然可以实现,使用宏:

第一抽出这条线:

"new": 0 

然后执行这些击键:

qqq 
qq/last ENTER A,ESCpq 

注:ENTER和ESC是键盘上

+0

谢谢你的解决方案的关键。我尝试了你提供的同一个宏,但是我意识到虽然在vi模式下它不能在Sublime Text中工作,但是它在我在unix终端中运行vi时起作用。我会接受你的回答,因为它确认了我最初的尝试,并说服我在终端试用。 –

+0

**宏是为了在vi/vim **中运行。如果你想在崇高使用它是一个**不同的编辑器**,你需要检查绑定,并知道什么是支持和什么不是复古包。那时你可以知道并理解它为什么不起作用。 –