在vim中有条件地替换

Vin*_*nce 7 vi vim

我想用vim搜索和替换来替换所有"with",反之亦然.有没有办法一步到位?我想的是这样的事情:

:s/\("\|'\)/\1=="?':"/
Run Code Online (Sandbox Code Playgroud)

当然,\1=="?':"-part是在vim中运行的东西.

提前致谢!

Ing*_*kat 15

这是一个案例:help sub-replace-special:

:s/["']/\=submatch(0) == '"' ? "'" : '"'/g
Run Code Online (Sandbox Code Playgroud)

这匹配两个引号中的任何一个(以更简单的方式[...]),然后使用三元运算符将每个引号转换为相反的引号.(对于更复杂的情况,您可以使用字典查找.)

  • @EnricoMariaDeAngelis:`:s/\([mp] \)\(.\)/\= submatch(2).(submatch(1)=='m'?'1':'2')/ g` (2认同)