我经常发现自己正在做
:s/foo/bar/g
*move to different line*
:s/bar/foo/g
在不同的行上。是否有一种简单的方法来交换它们,以便我可以快速执行第二个版本?
答案 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