双引号用单引号,反之亦然

时间:2012-04-12 18:36:57

标签: regex vim quotes

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

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

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

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

4 个答案:

答案 0 :(得分:5)

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

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

例如,

  1. 将所有'替换为!X!
  2. 将所有"替换为'
  3. 将所有!X!替换为"
  4. 修改

    这样做更好:Easiest way to swap occurrences of two strings in Vim?

答案 1 :(得分:3)

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

  • 将单引号更改为UNLIKELY_STRING
  • 将双引号更改为单引号
  • 将UNLIKELY_STRING更改为双引号

答案 2 :(得分:3)

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

:%s/['"]/\="'\""[submatch(0)!='"']/g

答案 3 :(得分:2)

使用\=

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

。这假定两个字符仅用作引号,但您的初始代码也是相同的,除了我没有检查它们是否配对。