在Vim中替换字符串周围的引号?

rav*_*uya 29 vi vim replace surround

我有类似的东西<Foobar Name='Hello There'/>,需要将单引号更改为双引号.我尝试了:s/\'.*\'/\"\0\"但它最终产生了<Foobar Name="'Hello There'"/>.更换\0\1只生产双引号中一个空字符串-是有一些特殊的语法我失踪,我需要做的只是发现的字符串("你好")里面的引号分配\1

kej*_*len 58

还有surround.vim,如果你想经常这样做的话.你cs'"用来改变周围的引号.


rui*_*rui 23

您需要使用分组:

:s/\'\(.*\)\'/\"\1\"
Run Code Online (Sandbox Code Playgroud)

这种方式参数1(即\ 1)将对应于由\(和\)分隔的任何内容.


ray*_*d09 14

%s/'\([^']*\)'/"\1"/g

您将需要使用[^']*而不是.*其他

'apples' are 'red' 会转换成 "apples' are 'red"

  • 或者使用 `.\{-}` 代替 `.*`。参见`:help /\{-`。 (3认同)

小智 8

除非我错过了什么,否则s/\'/"/g不行?


Ban*_*get 6

只是一个FYI - 用单个替换所有双引号,这是正确的正则表达式 - 基于上面rayd09的例子

:%s/"\([^"]*\)"/'\1'/g
Run Code Online (Sandbox Code Playgroud)