如何删除vim中支架内的重复线路?

如何删除vim中支架内的重复线路?,vim,Vim,我有一个json文件,它有重复的值,我希望使用vim删除这些值。以下是一个例子: { { "greetings" : [ "hello", "hello", "hola", "hola" ] }, ... } 到 到目前为止,我能够成功地删除所有重复的行,除了最后的行。有一个额外的“,”打破了我的匹配,我最终以 { { "greetings" : [ "hello", "hola", "ho

我有一个json文件,它有重复的值,我希望使用vim删除这些值。以下是一个例子:

{
  { "greetings" : [
      "hello",
      "hello",
      "hola",
      "hola"
    ]
  }, ...
}

到目前为止,我能够成功地删除所有重复的行,除了最后的行。有一个额外的“,”打破了我的匹配,我最终以

{
  { "greetings" : [
      "hello",
      "hola",
      "hola"
    ]
  }, ...
}

由于重复的行彼此相邻,因此可以使用
\1
再次匹配字符串,并使用
,\?
使逗号可选:

:%s/^\(.\+\),\?\n\1\n/\1\r/gc
如果需要将搜索和替换限制为某些块,可以先使用匹配块:

:g/[\[^[\]*]/%s/^\(.\+\),\?\n\1\n/\1\r/g 

由于重复的行彼此相邻,因此可以使用
\1
再次匹配字符串,并使用
,\?
使逗号可选:

:%s/^\(.\+\),\?\n\1\n/\1\r/gc
如果需要将搜索和替换限制为某些块,可以先使用匹配块:

:g/[\[^[\]*]/%s/^\(.\+\),\?\n\1\n/\1\r/g 

复制的线是否彼此相邻?是。所有重复项都分组在新行中。重复项是否彼此相邻?是。所有重复项都以新行组合在一起。@DJMcMayhem,谢谢你的提示。我不知道
\v
选项这是一个很好的方法。然而,问题是将替换限制在一个区块内。您建议的替换解决方案还将删除所有右括号。e、 g.
},}
@Feras。当然您可以使用
g/./
首先匹配块。请参阅更新的解决方案。@DJMcMayhem,谢谢您的提示。我不知道
\v
选项这是一个很好的方法。然而,问题是将替换限制在一个区块内。您建议的替换解决方案还将删除所有右括号。e、 g.
},}
@Feras。当然您可以使用
g/./
首先匹配块。请参阅更新的解决方案。