在我可以使用的功能内:
s/foo/bar/ge
,但仅替换当前行。 我想替换当前的选择。我尝试过
'<,'>s/foo/bar/ge
没有成功。
感谢您的帮助。
答案 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
。