我经常发现自己反转引号:
来自双引号 ""
单引号 ''
和
来自单引号 ''
双引号 ""
。
我知道有一种方法可以将单引号切换为双引号:
:%s/'\(\([^']*\)\)'/"\1"/g
以及将双引号切换为单引号的方法:
:%s/"\(\([^"]*\)\)"/'\1'/g
但我该怎么做两个操作 一起 不包括第二次交换中的第一个交换引号?
我经常发现自己反转引号:
来自双引号 ""
单引号 ''
和
来自单引号 ''
双引号 ""
。
我知道有一种方法可以将单引号切换为双引号:
:%s/'\(\([^']*\)\)'/"\1"/g
以及将双引号切换为单引号的方法:
:%s/"\(\([^"]*\)\)"/'\1'/g
但我该怎么做两个操作 一起 不包括第二次交换中的第一个交换引号?
如果字符串文字中没有转义引号,则不需要 确保正确配对引号,可以使用该命令
:%s/['"]/\="'\""[submatch(0)!='"']/g
通常,当你想要交换 A
& B
像这样,你需要一个中间步骤来替换 A
具有完全不同的东西,很可能在文档中是独一无二的,无论是一个不寻常的角色还是更长,更疯狂的东西 |x-monkeyz-x|
。
然后,您可以将所有B转换为As,最后转换为所有 |x-monkeyz-x|
对Bs。
例如,
'
同 !X!
"
同 '
!X!
同 "
这个更好: 在Vim中交换两个字符串的最简单方法?
使用 \=
:
:%s/'\([^']*\)'/\='"'.tr(submatch(1), '"', "'").'"'/g
。这假定两个字符仅用作引号,但您的初始代码也是相同的,除了我没有检查它们是否配对。
我通常使用像我名字这样的中间字符串,它不太可能出现在文本中: