zsh 완료: 순서에 상관없이 파일 완료 및 --옵션 제공

zsh 완료: 순서에 상관없이 파일 완료 및 --옵션 제공

foo하나 이상의 파일 이름과 3개의 --옵션 조합을 사용하는 샘플 명령이 있습니다 . 또한 옵션은 명령줄 어디에서나(파일 이름 앞, 뒤, 사이) 지정할 수 있습니다.

foo --bbb file.txt --aaa file2.txt --ccc

물약을 지정하는 완료 파일이 있습니다.

#compdef foo

 local -a args

 args+=(
    '--aaa'
    '--bbb'
    '--ccc'
 )

--options를 사용하여 로컬 파일을 완성하려면 끝에 무엇을 추가해야 합니까?

답변1

전화해도됩니다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함수를 사용하면 명령 완성을 더 쉽게 지정할 수 있지만 간단한 경우에는 큰 이점이 없습니다. 명령이 --뒤에 오는 모든 항목이 --옵션이 아닌 파일 이름임을 나타내는 것을 지원하는 경우(대시로 시작하더라도) 반드시 이를 사용하십시오. 이것이 _argumentss -S옵션의 역할입니다. before 옵션은 해당 *옵션이 없으면 해당 옵션이 여러 번 나타날 수 있음을 나타냅니다. 해당 옵션이 이미 존재하는 경우 해당 옵션은 다시 제공되지 않습니다.

#compdef foo
_arguments -S \
    '*--aaa[Enable aye]' \
    '*--bbb[Enable bee]' \
    '*--ccc[Enable sea]' \
    '*:file:_files'

명령이 --helpGNU가 확립한 사실상의 표준에 가까운 형식으로 도움말 인쇄를 지원하는 경우 _arguments구문 분석된 출력을 알릴 수 있으며 출력에서 ​​추론할 수 없는 보다 정교한 동작을 --help지정하면 됩니다 .--help

#compdef foo
_arguments --

출력에서 추론된 것 외에 다른 것이 필요하지 않은 경우 --help완성 함수를 정의할 필요가 없습니다._gnu_generic명령의 완성 기능으로.

compdef _gnu_generic foo

관련 정보