Shell
zsh 補全:以任何順序為文件和 –options 提供補全
我有範例命令
foo
,它採用一個或多個文件名,以及 3 個 –options 的任意組合。此外,可以在命令行上的任何位置,在文件名之前、之後或之間指定選項。foo --bbb file.txt --aaa file2.txt --ccc
我有這個完成文件,我在其中指定了藥水:
#compdef foo local -a args args+=( '--aaa' '--bbb' '--ccc' )
我必須在最後添加什麼,以便使用我的 –options 完成本地文件?
您可以
compadd
根據需要多次呼叫內置函式來聲明更多完成。通常,這是通過“新”完成系統的許多輔助功能之一發生的。您可以做的最簡單的事情是同時呼叫
compadd
和_files
。#compdef foo local -a args args=(--aaa --bbb --ccc) compadd -- $args _files
而不是
compadd
直接呼叫,您應該呼叫一個幫助函式,例如_describe
它允許根據上下文配置完成並具有描述。#compdef foo local args args=('--aaa:Enable aye' '--bbb:Enable bee' '--ccc:Enable sea') _describe -o 'Options' args _files
該
_arguments
函式通常可以更輕鬆地指定命令的完成,儘管在您的簡單情況下並沒有太多好處。如果您的命令支持--
指示後面的所有內容--
是文件名而不是選項,請使用它,即使它以破折號開頭 - 這就是_arguments
’s-S
option 的作用。before 選項表示該*
選項可能出現多次;沒有它,如果它已經存在,將不會再次提供該選項。#compdef foo _arguments -S \ '*--aaa[Enable aye]' \ '*--bbb[Enable bee]' \ '*--ccc[Enable sea]' \ '*:file:_files'
如果您的命令支持
--help
以與 GNU 建立的事實標準足夠接近的格式列印幫助,您可以告訴_arguments
解析 的輸出--help
,然後您只需要指定無法從--help
輸出中推斷出的更精細的行為.#compdef foo _arguments --
如果您不需要從
--help
輸出中推斷出的任何內容,則無需定義完成函式:只需聲明_gnu_generic
為命令的完成函式即可。compdef _gnu_generic foo