gpt4 book ai didi

具有脚本作用域的 vim 函数

转载 作者:行者123 更新时间:2023-12-02 23:29:22 25 4
gpt4 key购买 nike

我已经安装了Janus使用我的 MacVim 设置。为了了解vim脚本是如何工作的,我一直在阅读Janus使用的vimrc文件,但我不明白它的作者是如何使用函数的。例如,以下是 vimrc 中的函数之一:

function s:setupWrapping()
set wrap
set wrapmargin=2
set textwidth=72
endfunction

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

那么,该函数在语法上是否不正确但仍然有效,或者它在语法上是否正确但我找不到这么说的文档?

最佳答案

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

ZyX 在评论中纠正了我,指出与此答案的早期修订相矛盾,vim 不允许声明缓冲区范围函数。您可以声明一个全局函数,其名称类似于b:function_name,或者就此而言_:function_name,但这很令人困惑,而且可能是一个糟糕的主意,原因在评论中提到。

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

缓冲区范围的 Funcref 以及可能在全局或函数级范围之外的其他 Funcref(“本地”Funcref)不需要大写。但无论如何,它们的用处有限,因为 Funcref 必须引用全局或脚本范围函数(后者在语法上很尴尬)或字典函数;在后一种情况下,您必须使用 call(funcref, args, dict) 来调用它。

但无论如何,您正在寻找文档,所以我做了一个 :helpgrep Capital 并发现了这些智慧的金 block :

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

E124 : « 通过名称 {name} 定义一个新函数。该名称必须由字母数字字符和“_”组成,并且必须以大写字母或“s:”开头(见上文)。 » “参见上文”指针指的是 user-functions 部分和 local-function ,它提供了更多详细信息,但没有提及有关脚本范围函数的非大写的任何内容。 user-functions 提到函数名称必须以大写字母开头,以避免与内置函数混淆。

在其他作用域出现之前,函数名始终以大写开头的严格规则可能是正确的,其中脚本作用域似乎是第一个,或者至少是第一个能够包含函数声明的作用域。我猜测手册中断言此类规则的部分尚未更新以反射(reflect)现代 vim 的状态。

关于具有脚本作用域的 vim 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6164795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com