Jon*_*ono 20 javascript autocomplete command-line-interface node.js
我想将标签完成添加到Nodejs CLI应用程序(最好是动态生成标签完成).
我发现了几个npm模块但不确定如何真正实现它们:
https://github.com/hij1nx/complete
https://github.com/mklabs/node-tabtab
所以我正在寻找的是所以我可以有一个nodejs文件,如下所示:
my-cmd create arg1 arg2
Run Code Online (Sandbox Code Playgroud)
但是我可能想要自动完成,如:
my-cmd cr<tab> -> create
Run Code Online (Sandbox Code Playgroud)
谢谢!
我回答后,我继续阅读tabtab源代码,发现我也可以运行
pkgname completion install
Run Code Online (Sandbox Code Playgroud)
安装完成。因为我的环境已经很脏了,我不知道它是否真的做了什么,但在我看来它确实做了..
@CameronLittle 提供了很好的文档。
对于不耐烦的,你可以从跑步开始
sudo bash -c 'pkgname completion > /etc/bash_completion.d/pkgname'
source /etc/bash_completion.d/pkgname
Run Code Online (Sandbox Code Playgroud)
这将为您当前的 bash 会话添加完成。
据我所知,新会话将自动完成。
为了使用户的过程无缝,您可以使用package.json 中的install和postinstall钩子
https://docs.npmjs.com/misc/scripts
确保默认情况下不打印任何内容。意味着运行pkgname应该导致没有输出,否则它将无法工作。
似乎 tabtab 有一个烦人的错误,该错误已在 master 中解决,但从未发布过..
修复它的相关承诺是这样的:https : //github.com/mklabs/node-tabtab/commit/f8473555bf7278a300eae31cbe3377421e2eeb26
它处理以--.开头的字符串的完成。
从 2014 年 2 月开始的提交,但是(2015 年 1 月)的最新版本是 2014 年 1 月的 0.0.2 .. 我认为不会有更多版本。
所以如果你想得到这个修复,你应该(!),只从 master 安装 tabtab。
不要像我一样浪费 2 个小时弄清楚你做错了什么:)
虽然@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)
#
Run Code Online (Sandbox Code Playgroud)
这些话this file is coming directly from isaacs/npm repo让我更加疑惑。按照此处的其他答案,我查看了 /etc/bash_completion.d/npm - 它显示了相同的确切内容......所以评论。
我决定跑
pkgname completion > /etc/bash_completion.d/pkgname
Run Code Online (Sandbox Code Playgroud)
但是,这需要 sudo 权限,因此变为
sudo bash -c "pkgname completion > /etc/bash_completion.d/pkgname
Run Code Online (Sandbox Code Playgroud)
然后,为了将其应用于当前的 bash 会话,我必须运行
source /etc/bash_completion.d/pkgname
Run Code Online (Sandbox Code Playgroud)
瞧!有用!
当我尝试打开另一个终端时,它仍然有效,所以我认为它适用于所有用户。如果没有 - 你应该将它添加到 .bashrc 或其他东西中。
小智 5
我想补充一点,有一个 npm 包 yargs可以为命令和选项启用 bash 完成快捷方式。
它可以选择输出 .bashrc 完成脚本。然后通过获取生成的脚本来启用 Bash 补全。
目前,它是 npm 上一个积极维护的软件包,每月下载量超过 100 万次。
| 归档时间: |
|
| 查看次数: |
7966 次 |
| 最近记录: |