首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有脚本作用域的vim函数

带有脚本作用域的vim函数
EN

Stack Overflow用户
提问于 2011-05-29 06:43:20
回答 2查看 2.8K关注 0票数 7

我已经用我的MacVim安装程序安装了Janus。为了了解vim脚本是如何工作的,我一直在通读Janus使用的vimrc文件,我不明白这篇文章的作者是如何使用函数的。例如,以下是vimrc中的一个函数:

代码语言:javascript
复制
function s:setupWrapping()
  set wrap
  set wrapmargin=2
  set textwidth=72
endfunction

现在,根据vim手册的Defining a function部分,“函数名称必须以大写字母开头。”根据手册的Local mappings and functions部分,“在脚本中定义函数时,可以在名称前面加上"s:”,以使其成为脚本的本地函数。“但是,在将函数名的作用域指定为脚本本地时,没有提到函数名可以以小写字母开头。

那么,这个函数在语法上是错误的,但仍然可以工作,还是语法上正确,但我找不到说明这一点的文档?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-29 09:12:48

据我所知,函数名的大写规则是为了避免与vim的内置函数冲突。脚本本地函数不存在冲突的可能性,因此限制不适用于它们似乎是合理的,因为您必须始终在它们前面加上名称空间限定符。

ZyX在评论中纠正了我,指出与这个答案的早期版本相矛盾的是,vim不允许声明缓冲区范围的函数。您可以使用诸如b:function_name_:function_name之类的名称来声明全局函数,但由于注释中提到的原因,这是一个令人困惑的想法,而且可能是一个糟糕的想法。

在字典中声明的函数不需要大写。

缓冲区作用域的Funcref,以及全局或函数级作用域之外的其他Funcref(“局部”Funcref)不需要大写。但它们的用处有限,因为Funcref必须引用全局或脚本范围的函数(后者在语法上比较笨拙)或字典函数;在后一种情况下,您必须使用call(funcref, args, dict)调用它。

但不管怎样,你正在寻找文档,所以我做了一个:helpgrep capital,找到了这些智慧的金块:

E704:Funcref变量必须以大写开头,"s:“、"w:”、"t:“或"b:”。

E124:«使用名称{ name }定义一个新函数。名称必须由字母数字字符和'_‘组成,并且必须以大写或"s:“开头(请参见上文)。»“查看上面”指针引用了user-functionslocal-function部分,这两个部分提供了更多细节,但没有提到脚本范围函数的非大写。user-functions提到函数名必须以大写字母开头,以避免与内置函数混淆。

可能在其他作用域出现之前,始终以大写开头的函数名的严格规则是正确的,脚本作用域似乎是第一个,或者至少是第一个能够包括函数声明的作用域。我猜手册中断言这样一个规则的部分只是没有更新以反映现代vim的状态。

票数 8
EN

Stack Overflow用户

发布于 2011-05-29 07:25:20

我想你永远不会知道有没有文档,但是你找不到它。

然而,我看过Derek Wyatt在他的博客上的vimrc文件,他总是在函数名中使用大写的第一个字母。

这仅仅证明了he‘s也阅读了手册。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6164795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档