如何在 Fish shell 中实现选项的动态选项卡完成?
How to implement dynamic tab completion of options in Fish shell?
我想为 Fish 命令实现选项的动态选项卡完成。这对于 -a
开关来说很容易,但我不知道如何为 -l
开关做这件事。
考虑以下几行:
$ complete -c foo -a '(echo bar\nbaz\nbiz)' -f
$ complete -c foo -l '(echo bar\nbaz\nbiz)' -f
我的 shell 的行为如下:
$ foo b<tab>
bar baz biz
$ foo --<tab>
foo --\(echo\ bar\nbaz\nbiz\)
相反,我希望它建议三个选项 --bar
、--baz
和 --biz
。这可能吗?
编辑:现在我明白了。您只需让 "arguments" 以破折号开头即可。为了清楚起见,这里有一个使用函数的示例:
function get_foo_completions
echo --bar
echo --baz
echo --biz
set prev_arg (commandline -pco)[-1]
test "$prev_arg" = print
and echo --conditional
end
complete -c foo -a '(get_foo_completions)' -f
仅当前一个参数是 print
时才会打印 --conditional
参数,这表明这些参数可以是动态的。
据我所知,这还不可能。选项是声明性的,只有这些选项的参数可以是动态的。
如果您提供有关您的用例的更多详细信息,我可能会建议其他方法。
我想为 Fish 命令实现选项的动态选项卡完成。这对于 -a
开关来说很容易,但我不知道如何为 -l
开关做这件事。
考虑以下几行:
$ complete -c foo -a '(echo bar\nbaz\nbiz)' -f
$ complete -c foo -l '(echo bar\nbaz\nbiz)' -f
我的 shell 的行为如下:
$ foo b<tab>
bar baz biz
$ foo --<tab>
foo --\(echo\ bar\nbaz\nbiz\)
相反,我希望它建议三个选项 --bar
、--baz
和 --biz
。这可能吗?
编辑:现在我明白了。您只需让 "arguments" 以破折号开头即可。为了清楚起见,这里有一个使用函数的示例:
function get_foo_completions
echo --bar
echo --baz
echo --biz
set prev_arg (commandline -pco)[-1]
test "$prev_arg" = print
and echo --conditional
end
complete -c foo -a '(get_foo_completions)' -f
仅当前一个参数是 print
时才会打印 --conditional
参数,这表明这些参数可以是动态的。
据我所知,这还不可能。选项是声明性的,只有这些选项的参数可以是动态的。
如果您提供有关您的用例的更多详细信息,我可能会建议其他方法。