首页 > 解决方案 > 使用 vim 转义特定模式的单引号

问题描述

例如考虑下面的行

'{"place":"buddy's home"}'

我只想替换单引号buddy's。行首和行尾的单引号必须完好无损。所以结果线看起来像。

'{"place":"buddy\'s home"}'

可能有多行,每行中多次出现此类单引号。除了行的开头和结尾,我必须逃脱所有这些。

我可以使用 vim regex 找出这样的模式:/.'.这种模式确保单引号被两个字符包围,并且不在行首或行尾。但是我在如何在所有地方更换y's成时遇到了麻烦。y\'s

标签: regexvim

解决方案


如果正则表达式.'.足够准确,那么您可以将所有出现的地方替换为:

:%s/.\zs'\ze./\\'/g

除了使用\zeand\zs你也可以使用组(...)。不过,我发现这个版本的可读性略高一些。

请参阅:h /\zs:h /\ze了解更多信息。


推荐阅读