我经常发现自己反转引号:
从双引号""
到单引号''
和
从单引号''
到双引号""
。
我知道有一种方法可以将单引号切换为双引号:
:%s/'\(\([^']*\)\)'/"\1"/g
一种将双引号切换为单引号的方法:
:%s/"\(\([^"]*\)\)"/'\1'/g
但如何在不包含第二次交换中的第一个交换引号的情况下同时执行 一起 这两项操作?
答案 0 :(得分:5)
通常,当您想要交换A
&像这样B
,你需要一个中间步骤,用一个完全不同的东西替换A
,并且很可能在文档中是唯一的,无论是一个不寻常的角色还是更长的东西,像|x-monkeyz-x|
更疯狂
然后,您可以将所有B转换为As,最后将所有|x-monkeyz-x|
转换为B。
例如,
'
替换为!X!
"
替换为'
!X!
替换为"
这样做更好:Easiest way to swap occurrences of two strings in Vim?
答案 1 :(得分:3)
我通常使用像我名字这样的中间字符串,不太可能出现在文本中:
答案 2 :(得分:3)
如果字符串文字中没有转义引号,则不需要 确保正确配对引号,可以使用命令
:%s/['"]/\="'\""[submatch(0)!='"']/g
答案 3 :(得分:2)
使用\=
:
:%s/'\([^']*\)'/\='"'.tr(submatch(1), '"', "'").'"'/g
。这假定两个字符仅用作引号,但您的初始代码也是相同的,除了我没有检查它们是否配对。