我们有一个命令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
如果我不能为第二个参数添加补全,则至少要删除那些补全。
答案 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'