11

我经常发现自己颠倒引号:
从双引号""到单引号''
从单引号''到双引号""

我知道有一种方法可以将单引号切换为双引号:
:%s/'\(\([^']*\)\)'/"\1"/g

还有一种将双引号切换为单引号的方法:
:%s/"\(\([^"]*\)\)"/'\1'/g

但是如何在不包括第二次交换中的第一个交换引号的情况下同时执行这两个操作?

4

4 回答 4

6

通常,当您想要像这样交换A&时B,您需要一个中间步骤,在该步骤中您替换A为完全不同的东西,并且在文档中很可能是唯一的,无论是不寻常的字符还是更长更疯狂的东西|x-monkeyz-x|

然后,您可以将所有 B 转换为 As,最后将所有 B 转换|x-monkeyz-x|为 B。

例如,

  1. 全部替换'!X!
  2. 全部替换"'
  3. 全部替换!X!"

编辑

这更好:在 Vim 中交换两个字符串的最简单方法?

于 2012-04-12T18:58:52.913 回答
3

我通常使用不太可能出现在文本中的中间字符串,例如我的名字:

  • 将单引号更改为 UNLIKELY_STRING
  • 将双引号改为单引号
  • 将 UNLIKELY_STRING 更改为双引号
于 2012-04-12T18:59:22.823 回答
3

如果字符串文字中没有转义引号,并且不需要确保正确的引号配对,则可以使用该命令

:%s/['"]/\="'\""[submatch(0)!='"']/g
于 2012-04-13T08:04:07.243 回答
2

使用\=

:%s/'\([^']*\)'/\='"'.tr(submatch(1), '"', "'").'"'/g

. 这假设这两个字符都只用作引号,但您的初始代码也做同样的事情,除了 my 不检查它们是否配对。

于 2012-04-12T18:56:07.330 回答