我想使用 vim search-and-replace 将所有“替换为”,反之亦然。有没有办法一步完成?我在想这样的事情:
:s/\("\|'\)/\1=="?':"/
当然,\1=="?':"
-part 是在 vim 中工作的东西。
提前致谢!
这是一个案例:help sub-replace-special
:
:s/["']/\=submatch(0) == '"' ? "'" : '"'/g
这匹配两个引号中的任何一个(以更简单的方式使用[...]
),然后使用三元运算符将每个引号转换为相反的引号。(对于更复杂的情况,您可以使用字典查找。)
另一种方法(更适合脚本)是使用内置tr()
函数。要将其应用于缓冲区,请使用getline()
/ setline()
:
:call setline('.', tr(getline('.'), "'\"", "\"'"))
Unix工具的力量;)
:%!tr "'\"" "\"'"
您可以使用abolish.vim插件轻松完成此操作。
Abolish.vim有一个:Subvert
命令,它为您提供了一种在它自己的小 DSL 中搜索和替换的不同方法。
:%S/{\",'}/{',\"}/g
可能是最懒惰/最简单的方法:
:%s/'/__/g | %s/"/'/g | %s/__/"/g
三个基本步骤合二为一:
'
为__
(或随机的东西)"
为'
__
为"
然后将它们与|
符号结合起来。
我确信一些 vim 向导会有更好的解决方案,但这对我有用。