24

我想将选项卡完成添加到 Nodejs CLI 应用程序(并且最好动态生成选项卡完成)。

我发现了一些 npm 模块,但不确定如何真正实现它们:

https://github.com/hij1nx/complete

https://github.com/mklabs/node-tabtab

所以我正在寻找的是这样我可以拥有一个类似的nodejs文件:

my-cmd create arg1 arg2

但后来我可能想像这样自动完成:

my-cmd cr<tab> -> create

谢谢!

4

4 回答 4

15

使用我构建的煎蛋包。如果你有任何疑问,请联系我。

于 2015-12-16T11:15:29.943 回答
5

编辑 - 快速回答

在我回答之后,我一直在阅读 tabtab source 并注意到我也可以运行

 pkgname completion install 

安装完成。由于我的环境已经很脏,我不知道它是否真的做了什么,但在我看来就像它一样..

更长的答案

@CameronLittle 提供了很好的文档。

对于不耐烦的人,您可以从运行开始

sudo bash -c 'pkgname completion > /etc/bash_completion.d/pkgname'
source /etc/bash_completion.d/pkgname

这将为您当前的 bash 会话添加完成。

据我所知,新会话将自动完成。

为了使用户的流程无缝,您可以使用 package.json 中的installpostinstall钩子

https://docs.npmjs.com/misc/scripts

确保默认情况下不打印任何内容。表示运行pkgname应该没有输出,否则它将无法工作。

重要的!仅从 master 安装 tabtab

似乎 tabtab 有一个烦人的错误,该错误已在 master 中解决,但从未发布..

修复它的相关提交是这样的: https ://github.com/mklabs/node-tabtab/commit/f8473555bf7278a300eae31cbe3377421e2eeb26

它处理以 . 开头的字符串的完成--

如果从 2014 年 2 月开始提交,但截至(2015 年 1 月)的最新版本是 2014 年 1 月的 0.0.2 .. 我认为不会有更多版本。

因此,如果您想获得此修复,并且应该(!),请仅从 master 安装 tabtab。

不要像我一样浪费 2 个小时来弄清楚你做错了什么:)

我是如何得到这个答案的?TL;博士

虽然@CameronLittle 的回答给出了幕后的解释,但我想解释一下我是如何找到答案的。

我尝试使用包含tabtab有关安装它的明确部分的软件包。见https://www.npmjs.com/package/tabtab#completion-install

但是,这似乎对我不起作用。

查看他们指示添加的代码,我看到以下process.argv.slice(2)[0] === 'completion'内容让我运行命令pkgname completion,该命令输出以开头的内容

###-begin-pkgname-completion-###
### credits to npm, this file is coming directly from isaacs/npm repo
#
# Just testing for now. (trying to learn this cool stuff)
#
# npm command completion script
#
# Installation: pkgname completion >> ~/.bashrc  (or ~/.zshrc)
#

这些话this file is coming directly from isaacs/npm repo让我更加好奇。在此处的另一个答案之后,我查看了 /etc/bash_completion.d/npm - 它显示了相同的确切内容..等等评论。

我决定跑步

pkgname completion > /etc/bash_completion.d/pkgname

但是,这需要 sudo 权限,因此变成

sudo bash -c "pkgname completion > /etc/bash_completion.d/pkgname

然后,为了将它应用到当前的 bash 会话中,我必须运行

 source /etc/bash_completion.d/pkgname

瞧!有用!

当我尝试打开另一个终端时,它仍然有效,所以我认为它将适用于所有用户。如果没有 - 你应该将它添加到 .bashrc 或其他东西..

于 2015-01-15T20:27:33.217 回答
4

我想补充一点,有一个 npm 包 yargs可以为命令和选项启用 bash 完成快捷方式。

它可以选择输出 .bashrc 完成脚本。然后通过采购生成的脚本来启用 Bash 补全。

它目前是 npm 上一个积极维护的包,每月下载量超过一百万。

于 2015-05-23T10:13:28.737 回答
2

正如@Joe 所说,这是您用户的外壳提供的东西。对于 bash,您实际上创建并注册了一个函数,该函数在用户键入程序名称后进行选项卡时运行。该函数返回可用于自动完成的字符串。

有关介绍,请参阅本教程

http://www.debian-administration.org/article/316/An_introduction_to_bash_completion_part_1

我也喜欢这个例子,因为它很简单并且显示了需要做什么。它适用于 python 工具结构。

https://raw.githubusercontent.com/marcelor/fabric-bash-autocompletion/master/fab

于 2014-11-20T00:48:05.487 回答