我经常发现自己颠倒了报价:
**从双引号""到单引号''**和从单引号''到双引号""。
""
''
我知道有一种方法可以将单引号转换为双引号::%s/'\(\([^']*\)\)'/"\1"/g个还有一种将双引号转换为单引号的方法::%s/"\(\([^"]*\)\)"/'\1'/g个但是我如何在第二次交换中不包括第一次交换的引号的情况下同时进行这两个操作呢?
:%s/'\(\([^']*\)\)'/"\1"/g
:%s/"\(\([^"]*\)\)"/'\1'/g
nwsw7zdq1#
通常,当你想像这样交换A和B时,你需要一个中间步骤,用完全不同的东西替换A,并且很可能在文档中是唯一的,无论是不寻常的字符还是更长更疯狂的东西,比如|x-monkeyz-x|。然后,您可以将所有的Bs转换为As,最后将所有的|x-monkeyz-x|转换为Bs。比如说,1.将所有'替换为!X!1.将所有"替换为'1.将所有!X!替换为"
A
B
|x-monkeyz-x|
'
!X!
"
更好的:Easiest way to swap occurrences of two strings in Vim?
ejk8hzay2#
如果字符串字面量中没有转义引号,并且不需要它来确保正确的引号配对,则可以使用命令
:%s/['"]/\="'\""[submatch(0)!='"']/g
字符串
ve7v8dk23#
我通常使用一个中间字符串,比如我的名字,它不太可能出现在文本中:
bkhjykvo4#
使用\=:
\=
:%s/'\([^']*\)'/\='"'.tr(submatch(1), '"', "'").'"'/g
字符串这假设两个字符都只作为引号,但是初始代码也是这样做的,只是my不检查它们是否配对。
7cjasjjr5#
就像这里有人说的:
:%s/"/*/g | %s/'/"/g | %s/*/'/g
字符串这可以分别通过三个命令来完成。也可以通过两个命令来完成:
:%s/'\|\("\)/"\1/g | %s/""/'/g
型
5条答案
按热度按时间nwsw7zdq1#
通常,当你想像这样交换
A
和B
时,你需要一个中间步骤,用完全不同的东西替换A
,并且很可能在文档中是唯一的,无论是不寻常的字符还是更长更疯狂的东西,比如|x-monkeyz-x|
。然后,您可以将所有的Bs转换为As,最后将所有的
|x-monkeyz-x|
转换为Bs。比如说,
1.将所有
'
替换为!X!
1.将所有
"
替换为'
1.将所有
!X!
替换为"
编辑
更好的:Easiest way to swap occurrences of two strings in Vim?
ejk8hzay2#
如果字符串字面量中没有转义引号,并且不需要它来确保正确的引号配对,则可以使用命令
字符串
ve7v8dk23#
我通常使用一个中间字符串,比如我的名字,它不太可能出现在文本中:
bkhjykvo4#
使用
\=
:字符串
这假设两个字符都只作为引号,但是初始代码也是这样做的,只是my不检查它们是否配对。
7cjasjjr5#
就像这里有人说的:
字符串
这可以分别通过三个命令来完成。也可以通过两个命令来完成:
型