我经常发现自己颠倒引号:
从双引号
""
到单引号 ''
和 ''
到双引号 ""
。
我知道有一种方法可以将单引号切换为双引号:
:%s/'\(\([^']*\)\)'/"\1"/g
以及将双引号切换为单引号的方法:
:%s/"\(\([^"]*\)\)"/'\1'/g
但是我如何同时进行这两项操作而不在第二次交换中包含第一个交换的报价?
通常,当您想要像这样交换
A
和 B
时,您需要一个中间步骤,将 A
替换为完全不同且很可能在文档中唯一的内容,无论是不寻常的字符还是更长的字符还有更疯狂的|x-monkeyz-x|
。
然后您可以将所有 B 转换为 As,最后将所有
|x-monkeyz-x|
转换为 B。
例如,
'
替换为 !X!
"
替换为 '
!X!
替换为 "
如果字符串文字中没有转义引号,则不需要 确保引号配对正确,可以使用命令
:%s/['"]/\="'\""[submatch(0)!='"']/g
我通常使用像我的名字这样的中间字符串,不太可能出现在文本中:
使用
\=
:
:%s/'\([^']*\)'/\='"'.tr(submatch(1), '"', "'").'"'/g
。这假设两个字符仅用作引号,但您的初始代码也执行相同的操作,只是 my 不检查它们是否配对。
正如这里有人所说:
:%s/"/*/g | %s/'/"/g | %s/*/'/g
这可以分别通过三个命令来完成。