9

我想使用 vim search-and-replace 将所有“替换为”,反之亦然。有没有办法一步完成?我在想这样的事情:

:s/\("\|'\)/\1=="?':"/

当然,\1=="?':"-part 是在 vim 中工作的东西。

提前致谢!

4

5 回答 5

17

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

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

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

于 2013-06-27T08:48:37.427 回答
3

另一种方法(更适合脚本)是使用内置tr()函数。要将其应用于缓冲区,请使用getline()/ setline()

:call setline('.', tr(getline('.'), "'\"", "\"'"))
于 2013-06-27T08:52:14.540 回答
3

Unix工具的力量;)

:%!tr "'\"" "\"'"

于 2013-06-27T09:04:03.780 回答
2

您可以使用abolish.vim插件轻松完成此操作。

Abolish.vim有一个:Subvert命令,它为您提供了一种在它自己的小 DSL 中搜索和替换的不同方法。

:%S/{\",'}/{',\"}/g

这个插件获得了特殊的荣誉,在 Vimcasts.org 上有专门的三部分截屏视频:

于 2013-06-27T08:54:16.447 回答
0

可能是最懒惰/最简单的方法:

  :%s/'/__/g | %s/"/'/g | %s/__/"/g

三个基本步骤合二为一:

  1. 转换'__ (或随机的东西)
  2. 转换"'
  3. 转换 __"

然后将它们与|符号结合起来。

我确信一些 vim 向导会有更好的解决方案,但这对我有用。

于 2013-06-27T08:37:04.540 回答