替换Vim中字符串的引号?
我有类似于<Foobar Name='Hello There'/>
的东西,需要将单引号更改为双引号。我试过:s/\'.*\'/\"\0\"
,但最终产生了<Foobar Name="'Hello There'"/>
。替换\0
与\1
只在双引号内产生一个空字符串 - 是否有一些特殊的语法,我错过了,我只需要使引号内的找到的字符串(“你好有”)分配给\1
?替换Vim中字符串的引号?
你需要用分组:
:s/\'\(.*\)\'/\"\1\"
这样的参数1(即\ 1)将对应于任何由\分隔(和\)。
您需要围绕您希望捕捉的表达部分放置括号。
s/\'\(.*\)\'/"\1"/
但是,您可能会遇到无意的匹配问题。你可以简单地用文件中的双引号替换任何单引号?
除非我失去了一些东西,不会s/\'/"/g
工作?
你有正确的想法 - 你想有"\1"
作为你的替代条款,但你需要首先在捕获组1中放置“你好”部分(0是整个匹配)。尝试:
:%/'\(.*\)'/"\1"
%s/'\([^']*\)'/"\1"/g
你将要使用的[^']*
代替.*
否则
'apples' are 'red'
将转换为:"apples' are 'red"
或者使用'。\ { - }'而不是'。*'。见':help/\ { - '。 – 2012-06-16 10:08:22
只是一个供参考 - 以取代单一的所有双引号,这是正确的正则表达式 - 基于以上
:%s/"\([^"]*\)"/'\1'/g
rayd09的例子假设你想这样做对整个文件...
N模式:
ggvG$ [SHIFT+:]
X模式:
'<,'>/'/" [RET]
这是我的妥协,但我觉得它不太对,特别是如果在属性中有单引号。我不认为这可能发生在XML中,但它可能发生在需要相同解决方案的道路上。 – ravuya 2010-01-20 17:59:29
单引号属性中的单引号应该是''',双引号属性中的双引号应该是'"'。当然,单引号可能存在于双引号属性中,反之亦然...... – ephemient 2010-01-20 18:44:13