vimscript:如何替换当前选择?

时间:2019-02-06 16:00:38

标签: vim

在我可以使用的功能内:

s/foo/bar/ge

,但仅替换当前行。 我想替换当前的选择。我尝试过

'<,'>s/foo/bar/ge

没有成功。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这很好:

fun! Foo()
    '<,'>s/foo/bar/ge
endfun

但是,如果尚未建立视觉选择,您可能会得到E20: Mark not set。要定义'<,'>标记,必须已经可视模式;但这也可以通过用于调用该函数的:命令来完成,因此这不成问题(:help :map-<expr>之类的特殊情况除外)。如果仅在功能内建立视觉选择,则需要保留它。代替

:normal! Vjj

追加<Esc>离开可视模式(并设置标记):

:execute normal! "Vjj\<Esc>"

请注意,对选择内容进行硬编码通常是不好的风格;您通常希望映射在选择行或[count]行或当前行/整个缓冲区上起作用。为此,建议使用range属性定义函数。有关详细信息,请参见:help function-range-example