rcompgen
位于 utils
包(package)。 说明
本页记录了一种从部分完成的命令行生成相关完成的机制。它本身并不是有用的,而是与使用它作为后端的其他机制结合使用。使用部分列出的函数提供了简单的控制和查询机制。实际的接口由一些未导出的函数组成,下面将进一步说明。
用法
rc.settings(ops, ns, args, dots, func, ipck, S3, data, help,
argdb, fuzzy, quotes, files)
rc.status()
rc.getOption(name)
rc.options(...)
.DollarNames(x, pattern)
.AtNames(x, pattern)
## Default S3 method:
.DollarNames(x, pattern = "")
## S3 method for class 'list'
.DollarNames(x, pattern = "")
## S3 method for class 'environment'
.DollarNames(x, pattern = "")
## Default S3 method:
.AtNames(x, pattern = "")
findMatches(pattern, values, fuzzy)
参数
ops |
逻辑标志。在 |
ns |
逻辑标志。控制与命名空间相关的完成。 |
args |
逻辑标志。启用函数参数的完成。 |
dots |
逻辑标志。如果禁用,则从函数参数列表中删除 |
func |
逻辑标志。启用函数检测。如果启用,可自定义扩展名(默认为 |
S3 |
逻辑标志。当 |
ipck |
|
data |
逻辑标志。启用 |
help |
逻辑标志。通过查看帮助索引文件,可以完成以问号开头的帮助请求。 |
argdb |
逻辑标志。当 |
fuzzy |
逻辑标志。启用模糊匹配,如果未找到精确匹配,则考虑接近但不精确的匹配(例如,具有不同的大小写)。此函数是实验性的,详细信息可能会发生变化。在 |
quotes |
逻辑标志。启用完成R引号内的代码。这通常会导致文件名完成,但也可能取决于上下文(例如,当左引号前面带有 |
files |
逻辑标志。已弃用。请改用 |
name , ... |
user-settable选项。目前有效的名称是
用法与 |
x |
计算并返回 |
pattern |
一个正则表达式。仅返回匹配的名称。 |
values |
给出要在其中找到匹配项的候选值集的字符串。 |
细节
有多种类型的完成,其中一些可以使用 rc.settings
禁用。 rc.settings
的参数都是逻辑标志,用于打开和关闭特定的可选完成函数。默认情况下,除 ipck
、 func
和 fuzzy
之外的所有设置均处于启用状态。如果您的 CPU 周期很有价值,请关闭更多函数;你仍然会保持基本的完成度。
最基本的级别一旦激活补全函数就无法关闭,它提供搜索路径上可见的名称的补全以及一些特殊关键字(例如 TRUE
)。如果正在完成的部分‘word’(又名令牌)为空(因为完成次数过多),则不会尝试这种类型的完成。下面说明了更高级的完成类型。
- 提取器
$
和@
后完成: -
当
ops
设置打开时,将尝试在$
和@
之后完成。这需要对前缀进行求值,除非涉及显式函数调用(涉及使用[
、$
等的隐式函数调用不会禁止求值),否则会尝试求值。$
和@
提取器之后的有效完成分别由通用函数.DollarNames
和.AtNames
确定。提供了一些基本方法,并且可以为自定义类编写更多方法。findMatches
函数可用于此目的。 - 命名空间内的补全:
-
当
ns
设置打开时,当标记前面有::
或:::
运算符时,将尝试在命名空间内完成。此外,基本完成机制已扩展为包括所有加载的命名空间,即,如果"foopkg"
是加载的命名空间,则foopkg::
成为foo
的有效完成。包命名空间的完成仅适用于已加载的命名空间,即如果未加载
MASS
,则MAS
将不会完成为MASS::
。但是,如果命名空间尚未加载,则在表观命名空间内尝试完成将尝试加载该命名空间,例如尝试在MASS::fr
上完成将加载MASS
(如果尚未加载)。 - 完成帮助项目:
-
当
help
设置打开时,如果标记前面有?
,则会尝试完成帮助主题。支持前缀(例如class
、method
)以及包含特殊字符的引用帮助主题。 - 函数参数的完成:
-
当
args
设置打开时,只要认为合适,就会尝试完成函数参数。如果在上一个提示中输入了相关函数(在请求完成时)(这特别意味着正在键入当前行以响应继续提示,通常是+
),则当前使用的机制将失败。请注意,用换行符分隔是可以的。生成的可能的参数完成列表可能会产生误导。非泛型函数没有问题(除了
...
被列为完成;这是故意的,因为它表明该函数可以接受更多参数)。然而,对于泛型函数,在不评估参数的情况下几乎不可能给出可靠的参数列表(甚至在某些情况下也不可能),这是有风险的(除了难以编码之外,这也是它没有评估的真正原因)甚至没有尝试过),特别是当该参数本身是内联函数调用时。我们的妥协是考虑该泛型的所有当前可用方法的参数。这有两个缺点。首先,并非所有列出的完成都适合当前正在构造的调用。其次,对于具有多种方法的泛型(例如print
和plot
),需要考虑许多匹配,这可能需要相当长的时间。尽管存在这些缺点,我们相信这种行为比唯一的其他实用替代方案(仅列出泛型参数)更有用。目前仅支持这种方式的 S3 方法,并且可以使用
S3
设置将其关闭。由于参数可以是未命名的R只要参数完成,函数调用、其他类型的完成也适用。由于通常存在比任何特定函数的形式参数更多的可见对象,因此可能的参数完成通常隐藏在一堆其他可能性中。但是,请记住,对于空白标记,基本完成是被抑制的。这对于列出函数的可能参数很有用。例如,尝试完成
seq([TAB]
和seq(from = 1, [TAB])
都将只列出参数seq
(或其任何方法),同时尝试完成seq(length[TAB]
将列出length.out
论证和length(
函数尽可能完成。请注意,不会尝试删除已提供的参数,因为这会导致进一步的速度损失。 - 特殊函数:
-
对于一些特殊函数(
library
、data
等),第一个参数会被特殊对待,即抑制正常完成,并且如果设置有要求,则启用一些特定于函数的完成。ipck
设置控制library
和require
是否在已安装的软件包上完成,默认情况下处于禁用状态,因为第一次调用installed.packages
可能很耗时(例如,当软件包安装在远程网络文件上时)服务器)。但请注意,installed.packages
的调用结果会被缓存,因此后续调用通常很快,因此即使在这种情况下,打开此选项也不是特别繁重。
findMatches
是一个实用函数,在内部使用来确定匹配。它可用于编写 .DollarNames
或 .AtNames
的方法,主要好处是它将考虑当前的 fuzzy
设置。
值
如果在不带任何参数的情况下调用rc.settings
,它将返回当前设置作为命名逻辑向量。否则,它将不可见地返回NULL
。
rc.status
以列表形式返回内部(未导出)环境的内容,该环境用于记录上次完成尝试的结果。这对于调试很有用。对于此类使用,在键入对 rc.status
本身的调用时必须抵制使用完成的诱惑,因为这将成为执行调用时的最后一次尝试。
返回列表中主要感兴趣的项目是:
comps |
最后一次调用 |
token |
已完成(或将要完成)的令牌,由上次调用 |
linebuffer |
完整的行,由最后一次调用 |
start |
行缓冲区中令牌的起始位置,由最后一次调用 |
end |
行缓冲区中令牌的结束位置,由最后一次调用 |
fileName |
逻辑,指示光标当前是否在引号内。 |
fguess |
光标当前所在函数的名称。 |
isFirstArg |
逻辑性强。如果光标位于函数内部,它是第一个参数吗? |
此外,组件settings
和options
分别给出设置和选项的当前值。
rc.getOption
和 rc.options
的行为分别与 getOption
和 options
非常相似。
findMatches
返回与输入模式匹配的值,同时考虑到 fuzzy
标志。
未导出的API
包中有几个未导出的函数。其中,有一些是特殊的,因为它们提供了 API,其他机制可以通过该 API 使用此包提供的函数(它们是未导出的,因为它们不应该由用户直接调用)。这些函数的用法是:
.assignToken(text) .assignLinebuffer(line) .assignStart(start) .assignEnd(end) .completeToken(custom = TRUE) .retrieveCompletions() .getFileComp() .guessTokenFromLine() .win32consoleCompletion(linebuffer, cursorPosition, check.repeat = TRUE, minlength = -1) .addFunctionInfo(...)
前四个函数通过指定要完成的标记 ( text
) 并指示标记放置在迄今为止键入的完整行中的位置( start
和 end
,应该是整数)来设置完成尝试(line
)。
令牌的潜在完成由以下方式生成.completeToken
,并且完成可以作为R特征向量使用.retrieveCompletions
。用户可以通过设置指定此函数的替代品rc.options("custom.completer")
;如果不NULL
,调用此函数来计算潜在的完成情况。此函数旨在帮助解决不适合作为 R 代码完成的情况。请参阅源代码了解更多详细信息。可以通过设置禁用自定义完成custom = FALSE
调用时.completeToken
.
如果光标位于引号内,则可能会抑制完成。可以在调用 .completeToken
后使用函数 .getFileComp
来确定是否是这种情况(返回 TRUE
),并生成认为有用的替代补全。在大多数情况下,文件名完成是一个合理的后备方案。
提供.guessTokenFromLine
函数用于尚未将行分成标记的后端。它要求已经设置了行缓冲区和端点(光标位置),并且它本身设置了标记和开始位置。它以字符串形式返回标记。
.win32consoleCompletion
在精神上类似,但更适合 Windows GUI(或者更确切地说,任何没有自己的完成设施的前端)。它需要行缓冲区和光标位置作为参数,并返回包含三个组件的列表: addition
、 possible
和 comps
。如果当前位置有明确的扩展名,addition
包含应在光标处插入的附加文本。如果存在不止一种可能性,则它们可以作为 possible
中预格式化字符串的字符向量使用,也可以作为 comps
中的单个字符串使用。 possible
由使用当前 width
选项格式化的行组成,因此在控制台上一次打印一行将是列出它们的合理方式。 comps
是相同完成的空格分隔(折叠)列表,以防前端希望以其他方式显示它。
minlength
参数可用于在令牌太短时抑制完成(如果将前端设置为在每次按键时尝试完成,这可能很有用)。如果 check.repeat
是 TRUE
,则会检测是否连续多次请求相同的完成,并且仅在这种情况下才返回不明确的完成。这是模拟 GNU Readline 行为的尝试,其中单个 TAB 完成任何明确的部分,并且仅在两个连续的 TAB 上报告多种可能性。
随着各种前端接口的发展,这些函数的细节也可能发生变化。
函数 .addFunctionInfo
可用于添加有关特定函数允许的参数名称的信息。调用它时允许使用多个命名参数,其中标签是函数名称,值是表示有效参数的字符向量。当 argdb
设置为 TRUE
时,这些将用作相关函数的有效参数名称的来源。
注意
如果您对主动评估代码片段感到不舒服,则应该设置 ops = FALSE
。否则,尝试完成 foo@ba
将评估 foo
,尝试完成 foo[i, 1:10]$ba
将评估 foo[i, 1:10]
等。这应该不会太糟糕,因为显式函数调用(涉及括号)不会以这种方式评估。但是,这将影响承诺和延迟加载符号。
作者
Deepayan Sarkar, deepayan.sarkar@r-project.org
相关用法
- R readRegistry 读取 Windows 注册表配置单元
- R removeSource 从函数或语言对象中删除存储的源
- R read.DIF 从电子表格输入数据
- R remove.packages 删除已安装的软件包
- R relist 允许重新列出未列出()的对象
- R roman 罗马数字
- R read.socket 从套接字读取或写入
- R rtags 类似 Etags 的 R 标记实用程序
- R read.table 数据输入
- R recover 错误后浏览
- R read.fortran 以类似 Fortran 的方式读取固定格式数据
- R read.fwf 读取固定宽度格式文件
- R select.list 从列表中选择项目
- R COMPILE 编译用于 R 的文件
- R browseVignettes 在 HTML 浏览器中列出晕影
- R hasName 检查姓名
- R nsl 按主机名查找 IP 地址
- R edit 调用文本编辑器
- R create.post 准备电子邮件和帖子的辅助函数
- R hsearch-utils 帮助搜索实用程序
- R download.packages 从类似 CRAN 的存储库下载软件包
- R DLL.version MS Windows 上的 DLL 版本信息
- R ls.str 列表对象及其结构
- R Rscript R 前端脚本
- R bug.report 发送错误报告
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 A Completion Generator for R。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。