在vim中有条件地替换

时间:2013-06-27 08:13:00

标签: vim vi

我喜欢使用vim搜索和替换来替换所有"用'反之亦然。有没有办法一步到位?我想到这样的事情:

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

当然\1=="?':" - 部分在vim中起作用。

提前致谢!

5 个答案:

答案 0 :(得分:14)

这是:help sub-replace-special

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

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

答案 1 :(得分:3)

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

:call setline('.', tr(getline('.'), "'\"", "\"'"))

答案 2 :(得分:3)

unix工具的强大功能;)

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

答案 3 :(得分:2)

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

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

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

这个插件特别荣幸地在Vimcasts.org上播放了一个由三部分组成的截屏视频 献给它:onetwothree

答案 4 :(得分:0)

可能是最懒/最简单的方式:

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

三个基本步骤合并为一行:

  1. '转换为__(或随机的内容)
  2. "转换为'
  3. __转换为"
  4. 然后将它们与|符号组合。

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