如何在 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 参数,这表明这些参数可以是动态的。

据我所知,这还不可能。选项是声明性的,只有这些选项的参数可以是动态的。

如果您提供有关您的用例的更多详细信息,我可能会建议其他方法。