如何将制表符完成添加到带有两个参数的命令(并且制表符完成两个参数)?
How to add tab-completion to command with two arguments (and tab complete both)?
让我们有一个命令command
。此命令有一个选项 -o
,它接受 2 个参数。我想为这两个参数添加制表符补全。
我试过了
complete -c command -x -s o -a "complete first arg"
我无法向第二个参数添加制表符补全。
我想在未指定选项时自动完成 command
。这项工作很好:
complete -c command -a "no option completion"
但是当我在 -o
选项中的第一个参数之后点击制表符时,会显示那些 ^ 补全。
像这样:
command -o "fist" <tab>
no
option
completion
如果我不能为第二个参数添加补全,我想至少删除那些补全。
This command has an option -o that takes 2 arguments.
这很不寻常。你确定吗?
通常,您将拥有采用 一个 参数的选项,或者充当 "flags" 并更改所有其他参数的选项。所以你只需检查他们的存在。
“-o”“-old-style”选项也不像“--gnu-style”长选项或“-s”短选项那么常见,所以我建议仔细检查。
complete -c command -a "no option completion"
这意味着如果命令是 "command",则提供 "no"、"option" 和 "completion"。
没有指定条件,所以这些总是提供。
您想要的是使用 complete
的“--condition”(或“-n”)选项。这需要执行的脚本(作为字符串)。如果它 returns 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'
让我们有一个命令command
。此命令有一个选项 -o
,它接受 2 个参数。我想为这两个参数添加制表符补全。
我试过了
complete -c command -x -s o -a "complete first arg"
我无法向第二个参数添加制表符补全。
我想在未指定选项时自动完成 command
。这项工作很好:
complete -c command -a "no option completion"
但是当我在 -o
选项中的第一个参数之后点击制表符时,会显示那些 ^ 补全。
像这样:
command -o "fist" <tab>
no
option
completion
如果我不能为第二个参数添加补全,我想至少删除那些补全。
This command has an option -o that takes 2 arguments.
这很不寻常。你确定吗?
通常,您将拥有采用 一个 参数的选项,或者充当 "flags" 并更改所有其他参数的选项。所以你只需检查他们的存在。
“-o”“-old-style”选项也不像“--gnu-style”长选项或“-s”短选项那么常见,所以我建议仔细检查。
complete -c command -a "no option completion"
这意味着如果命令是 "command",则提供 "no"、"option" 和 "completion"。
没有指定条件,所以这些总是提供。
您想要的是使用 complete
的“--condition”(或“-n”)选项。这需要执行的脚本(作为字符串)。如果它 returns 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'