要查找的字符串的反向顺序和要在vim中替换的字符串

时间:2012-01-17 12:37:36

标签: vim replace

我经常发现自己正在做

:s/foo/bar/g
*move to different line*
:s/bar/foo/g

在不同的行上。是否有一种简单的方法来交换它们,以便我可以快速执行第二个版本?

3 个答案:

答案 0 :(得分:2)

您可以尝试Abolish插件(git homepage):

 :Subvert/{foo,bar}/{bar,foo}/g

没有插件:

 :%s/foo\|bar/\=submatch(0) ==# 'foo' ? 'bar' : 'foo'/g

答案 1 :(得分:2)

快速使用一次选项是执行以下操作

:s/~/<c-r>//g<cr>

~匹配最后一次替换,<c-r>/将插入"/寄存器中的当前搜索字符串。因此,翻转替换。一句警告是~只能使用一次,因为替换后它会被更改。在替换之间进行搜索也会导致"/寄存器发生变化。

作为替代方案,您可以尝试使用命令行窗口在任何其他窗口中编辑命令,如文本。

使用q:从正常模式打开命令行窗口或从命令行按 ctrl -f (假设'cedit'的默认设置)。

Drew Neil有一个与refining search patterns via the command-window类似的vimcasts剧集。

:h /~
:h c_CTRL-R
:h quote/
:h cmdwin
:h q:
:h 'cedit'

答案 2 :(得分:1)

您可以在vim中使用dict

:%s/foo\|bar/\={'foo':'bar', 'bar':'foo'}[submatch(0)]/g