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