如何将选项卡完成添加到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中的install
和postinstall
挂钩
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