我应该使用功能还是功能!在vim脚本中?

时间:2013-12-06 11:04:19

标签: vim

我想我理解functionfunction!之间的区别:如果已存在具有相同名称的函数function!,则默认替换它,但function会产生错误。

我最终总是使用function!。因为如果我迟早使用简单的function它会返回并咬我:

E122: Function my_lib#MyHandyFunction already exists, add ! to replace it

是否有任何情况应该使用简单function而不使用!

2 个答案:

答案 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的用户将会遇到他们从未预料到的事情!