单引号中的双引号,反之亦然

Posted

技术标签:

【中文标题】单引号中的双引号,反之亦然【英文标题】:Double quotes in single quotes and vice versa 【发布时间】:2012-04-25 03:51:13 【问题描述】:

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

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

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

但我如何一起进行这两项操作,而不在第二次交换中包含第一个交换的引号?

【问题讨论】:

在单个命令中使用哈希映射替换多个单词:%s/\/\='foo':'bar' ,'bar':'baz','baz':'foo'[submatch(0)]/gc .. 这里 foo -> bar, bar -> baz, baz -> foo. 【参考方案1】:

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

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

【讨论】:

`@ib,转义引号是什么意思?您的正则表达式也适用于您自己的正则表达式(带有转义引号?) - btw tnx :) @Remonn:我的意思是在您操作的文本中引用转义语法。如果您在 Vim 脚本字符串文字上运行这些替换,那么 "one\"two" 将更改为 'one\'two',它与原始文字表示的字符串不同。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

例如,

    将所有' 替换为!X! 将所有" 替换为' 将所有!X! 替换为"

编辑

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

【讨论】:

【参考方案4】:

使用\=:

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

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

【讨论】:

以上是关于单引号中的双引号,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中的双引号与单引号[重复]

循环遍历双引号但忽略单引号中的双引号

Prettier 不适用于将可视代码中的双引号更改为单引号

单引号字符串中的双引号 - NodeJs

核心数据关系映射:值表达式中的双引号自动变成单引号

Django自动将文本字段中的双引号转换为单引号