如何在Fish Shell中实现选项的动态制表符完成?

时间:2019-04-25 08:48:54

标签: fish

我想为Fish命令实现选项的动态制表符完成。对于-a开关来说,这很容易,但是我不知道如何为-l开关做到这一点。

请考虑以下几行:

$ complete -c foo -a '(echo bar\nbaz\nbiz)' -f
$ complete -c foo -l '(echo bar\nbaz\nbiz)' -f

我的外壳的行为如下:

$ foo b<tab>
  bar  baz  biz

$ foo --<tab>
  foo --\(echo\ bar\\nbaz\\nbiz\) 

相反,我希望它建议三个选项--bar--baz--biz。这可能吗?

1 个答案:

答案 0 :(得分:1)

edit:现在我了解得更多了。您可以通过使“参数”以短划线开头来实现。下面是使用函数进行说明的示例:

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

仅当前一个参数为--conditional时,才会显示print参数,这说明它们可以是动态的。

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

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