编辑 - 快速回答
在我回答之后,我一直在阅读 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 中的install
和postinstall
钩子
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 或其他东西..