如何将选项卡完成添加到Nodejs CLI应用程序

我想添加选项卡完成到一个Nodejs CLI应用程序(最好dynamic生成选项卡完成)。

我发现了几个npm模块,但不知道如何真正实现它们:

https://github.com/hij1nx/complete

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

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

my-cmd create arg1 arg2 

但是,我可能想要自动完成:

 my-cmd cr<tab> -> create 

谢谢!

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

编辑 – 快速回答

我回答之后,不断阅读tabtab源文件,注意到我也可以运行

  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应该导致没有输出,否则它不会工作。

重要! 仅从主站安装tabtab

看来tabtab有一个烦人的错误,已经解决了主,但从来没有进入发布..

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

处理以--开头的string的完成。

如果从2014年2月份开始承诺,但是从2015年1月开始的最新版本是2014年1月份的0.0.2。我认为不会有更多的版本。

所以,如果你想得到这个修复,你应该(!),只安装主标签tabtab。

不要浪费2个小时搞清楚你做错了像我:)

我是如何得出这个答案的? TL; DR

虽然@ 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 

瞧! 有用!

当我试图打开另一个terminal,它仍然工作,所以我认为它将适用于所有用户。 如果没有 – 你应该把它添加到.bashrc或其他东西..

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

它可以select输出一个.bashrc完成脚本。 然后通过获取生成的脚本来启用Bash完成。

目前,这是一个在npm上积极维护的软件包,每月下载超过一百万次。

正如@Joe所说,这是你的用户的shell提供的东西。 对于bash,实质上是创build并注册一个在用户键入程序名后键入时运行的函数。 该函数返回可用于自动完成的string。

请参阅本教程的介绍

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