使用VIM替换命令,在对象的所有字段周围添加引号

3

我想要进行转换

{
  foo:"bar",
  hello:"world",
}

into

{
  "foo":"bar",
  "hello":"world",
}

我可以作为翻译员来帮忙翻译,以下是您需要翻译的内容:

我考虑使用一个这样的替代命令

s/(.*):/"<the_thing_captured_on_the_left>"/g

但是我如何访问:之前的内容并将其包装在引号中?

1个回答

3

请使用这个

:%s/\w\+:\@=/"&"/

\@= 应用于它之前的标记(在这种情况下为 :),表示“如果 : 匹配,则与其前面的零宽度匹配(:help /zero-width)。”

考虑到您展示的背景知识,其余部分应该很清楚。

同样,您也可以这样做:

:%s/\w\+\ze:/"&"/

\ze 意思是“匹配它后面的东西,但不要消耗它”。


1
你可以不使用 \%(\) 来获得相同的结果。 - romainl
我认为我在写的时候,脑海中想着应该对“它”应用一个量词或者其他什么东西,但后来发现我只需要对“:”应用\@=,而且我没有意识到可以去掉分组。感谢你指出这一点。 - Enlico

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