如何使用两个参数将制表符补全添加到命令中(并且两个制表符都补全)?

时间:2019-01-30 20:21:37

标签: fish tab-completion

我们有一个命令command。此命令具有一个带有两个参数的选项-o。我想将制表符补全添加到这两个参数中。

我尝试过

complete -c command -x -s o -a "complete first arg"

我但是无法将制表符补全添加到第二个参数。


我没有指定选项时希望自动完成command。这项工作正常:

complete -c command -a "no option completion"

但是当我在-o选项中的第一个参数后按Tab时,将显示这些^补全。

像这样:

command -o "fist" <tab>
no
option
completion

如果我不能为第二个参数添加补全,则至少要删除那些补全。

1 个答案:

答案 0 :(得分:3)

  

此命令有一个-o选项,它带有2个参数。

这很不寻常。你确定吗?

通常,您将具有带有一个参数的选项,或者具有充当“标志”并更改所有其他参数的选项。因此,您只需检查它们的存在。

“-o”“-old-style”选项也不如“ --gnu-style”长选项或“ -s”短选项那么普遍,因此我建议仔细检查。

  

complete -c命令-a“无选项完成”

这意味着如果命令是“命令”,则提供“ no”,“ option”和“ completion”。

没有指定条件,因此总是提供

您想要的是对complete使用“ --condition”(或“ -n”)选项。这需要执行的脚本(作为字符串)。如果返回0(即true),则会提供相应的完成操作(该complete调用的其余部分-选项和参数)。

类似

# The first condition is just to see that `commandline -opc`, 
# which tokenizes (-o) all tokens of the current process (-p) 
# up to (but not including) the cursor (-c)
# returns just one token - which must be the command.
#
# Alternatively this condition could also be 
# the inverse of the other conditions
# (offer this if nothing else would be)
complete -c command -n 'test (count (commandline -opc)) -lt 2' -a 'stuff for no argument'

# The first argument to the option we handle via "-a" to the option
complete -c command -o the-option -a 'the first argument'

# The second argument needs to be offered
# if the second-to-last token is the option.
#
# This is incomplete, because theoretically a token that
# _looks_ like the option could be offered as an argument to _another_ option.
complete -c command -n 'set -l option (commandline -opc)[-2]; test "$option" = "-o"' -a 'the second argument'