使用 yargs 设置命令行补全
Setup command line completion with yargs
我正在使用节点 JS 创建脚本,并希望使用 yargs 启用异步命令行完成。
completion section of the yargs documentation 表示:"concat the generated script to your .bashrc or .bash_profile"
但是我没有看到任何关于如何生成脚本的信息。
documentation 不完全清楚如何做到这一点,但我想通了。
安装 yargs
npm install -g yargs
创建脚本(例如 script.js)
#! /usr/local/bin/node
var argv = require('yargs')
.completion('completion', function(current, argv, done) {
setTimeout(function() {
done([
'apple',
'banana'
]);
}, 500);
})
.argv;
保存脚本并设置权限
chmod +x script.js
在命令行上将命令名称(完成调用中的第一个参数)作为第一个参数传递给您的脚本。
./script.js completion
这将输出命令行完成块以添加到 .bashrc 或 .bash_profile
_yargs_completions()
{
local cur_word args type_list
cur_word="${COMP_WORDS[COMP_CWORD]}"
args=$(printf "%s " "${COMP_WORDS[@]}")
# ask yargs to generate completions.
type_list=`./shan.js --get-yargs-completions $args`
COMPREPLY=( $(compgen -W "${type_list}" -- ${cur_word}) )
# if no match was found, fall back to filename completion
if [ ${#COMPREPLY[@]} -eq 0 ]; then
COMPREPLY=( $(compgen -f -- "${cur_word}" ) )
fi
return 0
}
我正在使用节点 JS 创建脚本,并希望使用 yargs 启用异步命令行完成。
completion section of the yargs documentation 表示:"concat the generated script to your .bashrc or .bash_profile"
但是我没有看到任何关于如何生成脚本的信息。
documentation 不完全清楚如何做到这一点,但我想通了。
安装 yargs
npm install -g yargs
创建脚本(例如 script.js)
#! /usr/local/bin/node
var argv = require('yargs')
.completion('completion', function(current, argv, done) {
setTimeout(function() {
done([
'apple',
'banana'
]);
}, 500);
})
.argv;
保存脚本并设置权限
chmod +x script.js
在命令行上将命令名称(完成调用中的第一个参数)作为第一个参数传递给您的脚本。
./script.js completion
这将输出命令行完成块以添加到 .bashrc 或 .bash_profile
_yargs_completions()
{
local cur_word args type_list
cur_word="${COMP_WORDS[COMP_CWORD]}"
args=$(printf "%s " "${COMP_WORDS[@]}")
# ask yargs to generate completions.
type_list=`./shan.js --get-yargs-completions $args`
COMPREPLY=( $(compgen -W "${type_list}" -- ${cur_word}) )
# if no match was found, fall back to filename completion
if [ ${#COMPREPLY[@]} -eq 0 ]; then
COMPREPLY=( $(compgen -f -- "${cur_word}" ) )
fi
return 0
}