我想我理解function
和function!
之间的区别:如果已存在具有相同名称的函数function!
,则默认替换它,但function
会产生错误。
我最终总是使用function!
。因为如果我迟早使用简单的function
它会返回并咬我:
E122: Function my_lib#MyHandyFunction already exists, add ! to replace it
是否有任何情况应该使用简单function
而不使用!
?
答案 0 :(得分:6)
在脚本中,使用:function!
并没有什么坏处,但您应该使用脚本本地(s:Foo
)或自动加载范围(myscript#Foo
)函数来正确命名它们。因此,:function
的覆盖错误有助于提醒您重新定义全局函数,但在脚本中,您不需要这种预防措施。
如果要在开发期间重新加载脚本(而不是重新启动整个Vim), 要使用:function!
。 (像我的ReloadScript plugin这样的插件可以处理包含警卫。)
另一个经验点:我使用:function!
的大多数插件,可能是为了方便重新加载。
同样适用于:command!
和:normal!
,其中(通常)应使用带!
的版本。
答案 1 :(得分:1)
您通常应该使用function
。这样做,你至少可以识别名称冲突的时间。
默认情况下使用function!
时,您没有任何反馈要覆盖现有功能(即更改现有功能)!
只需查看您发布的错误消息:
E122: Function my_lib#MyHandyFunction already exists, add ! to replace it
这意味着:小心,老兄!如果您现在使用function!
,my_lib#MyHandyFunction
的用户将会遇到他们从未预料到的事情!