我有一个在gitlab repos中管理门票的小脚本。当我键入票证并按下选项卡时,我希望看到:
% ticket
new -- create a new ticket
# -- Number of ticket
-v -- increase verbosity为了做到这一点,我做了这个不起作用的事情:
#compdef ticket
#autoload
local -a reply
_regex_words commands "ticket commands" \
'new:create a new ticket' \
'-v:increase verbosity' \
'[1-9][0-9]#:open ticket #'
_regex_arguments _ticket /我明白,它无法完成我大脑中的数字--我也不希望它出去,装载可能有数千个数字。但是,指出一个数字是一个可能的完成将是很好的。[^\0]##\0'/ "${reply[@]}"
_ticket "$@"我明白,它无法完成我大脑中的数字--我也不希望它出去,装载可能有数千个数字。但是,指出一个数字是一个可能的完成将是很好的。
发布于 2021-10-31 23:00:58
_regex_words函数用于文字单词,而不是模式(除了单个*,其中单词可以缩写)。因此,您需要直接处理来自_regex_arguments的数字--如下所示:
#compdef ticket
local -a reply
_regex_words commands "ticket commands" \
'new:create a new ticket' \
'-v:increase verbosity'
_regex_arguments _ticket /它有点丑陋,这需要_message。这是通过_alternative实现它的一个副作用,但是在其他地方也有这种风格的例子。如果您有许多像-v这样的正常选项,那么最好对这些选项使用_arguments,而只对更复杂的区域使用_regex_arguments。顺便说一下,您的#autoload标记是多余的。compinit只查看第一行,#autoload或#compdef都会将其标记为可自动显示。[^\0]##\0'/ \
\( "${reply[@]}" \
\| 它有点丑陋,这需要D4。这是通过D5实现它的一个副作用,但是在其他地方也有这种风格的例子。如果您有许多像D6这样的正常选项,那么最好对这些选项使用D7,而只对更复杂的区域使用D8。顺便说一下,您的D9标记是多余的。D10只查看第一行,D11或D12都会将其标记为可自动显示。/[1-9][0-9]#\0/' ': _message -e numbers "open ticket"' \)
_ticket "$@"它有点丑陋,这需要D4。这是通过D5实现它的一个副作用,但是在其他地方也有这种风格的例子。如果您有许多像D6这样的正常选项,那么最好对这些选项使用D7,而只对更复杂的区域使用D8。
顺便说一下,您的D9标记是多余的。D10只查看第一行,D11或D12都会将其标记为可自动显示。
https://unix.stackexchange.com/questions/675580
复制相似问题