매개변수 중 하나가 URL(예: 문자열)이어야 하고 몇 가지 선택적 매개변수가 있는 zsh 완성을 위한 사용자 정의 스크립트가 있습니다. --AAA --BBB --CCC:
_arguments -S : \
'--AAA' \
'--BBB' \
'--CCC' \
'1: :'
그러나 완성은 URL 매개변수가 제공되는 경우에만 작동합니다.
myscript URL --A<TAB>
이 작업은 자동으로 수행됩니다.--AAA
하지만 내가 가지고 있는 경우:
myscript --A<TAB>
그런 다음 일치하는 유일한 옵션인 AAA를 나열하지만 그렇게 해도 자동 완성되지 않습니다 --AA<TAB>
. 수동으로 입력해야 합니다.
완료 스크립트를 다음과 같이 변경할 때:
_arguments -S : \
'--AAA' \
'--BBB' \
'--CCC'
자동 완성 매개변수는 작동하지만 URL을 제공하면 다른 옵션이 완료되지 않습니다.
그렇다면 내 스크립트가 URL(예: 문자열 인수 - zsh가 현재 위치에서 파일 이름 완성을 시작하는 것을 원하지 않음)을 예상하고 선택적 인수가 이 URL 앞이나 뒤에 완료될 수 있음을 완료하도록 zsh에 어떻게 지시합니까? ?
참고: URL을 자동 완성하려는 것이 아닙니다. 저는 이 URL 문자열 전후에 작업을 수행하고 싶습니다.
답변1
게시된 코드를 사용한 후 myscript --A
Tabzsh는 옵션 또는 비옵션 매개변수 번호 1을 완성하려고 시도합니다. 매개변수 1의 연산은 비어 있으며 다음에 속합니다.수동"(따옴표가 없는 단일 공백)" 아래에 설명되어 있습니다(작업에 0개 이상의 공백 문자만 포함된 경우 실제로 트리거됩니다).
이는 매개변수가 필요하지만 이에 대한 일치 항목을 생성하는 것이 불가능하거나 바람직하지 않은 경우에 유용합니다. 메시지가 표시되지만 완료 항목은 나열되지 않습니다.
표시할 메시지가 없습니다. 메시지 입력은 단일 공백이므로 "표시" 작업은 시각적 효과가 없습니다. 그러나 메시지를 표시하는 내부 작업(_message
) 실행, 특히compstate[insert]
비어 있도록 설정되어 있습니다. 이는 유효한 완료가 하나만 있는 경우에도 완료가 모호하다는 신호를 완료 사용자 인터페이스에 보냅니다.
해결책은 zsh가 생각하도록 명시적으로 준비하는 것입니다.안 끝났어, 생각하기보다는완료되었지만 생성할 수 없습니다.. 다음 중 하나가 작동합니다.
_arguments … '1: :()'
_arguments … '1: :{}'
_arguments … '1: : true'
인수가 URL인 경우 아마도 를 사용해야 합니다 _urls
. 이렇게 하면 입력 후에 옵션만 완료됩니다 -
(URL이 a로 시작하지 않거나 -
매우 공격적인 하위 문자열 완성이 설정되어 있는 경우).