래퍼 내부의 실행 파일에 대한 zsh 자동 완성 제안 플래그를 만드는 방법은 무엇입니까?

래퍼 내부의 실행 파일에 대한 zsh 자동 완성 제안 플래그를 만드는 방법은 무엇입니까?

저는 Arch Linux와 zsh를 사용하고 있습니다. 나는 그것을 사용하고 있다삼키다와 같은 다른 명령에 대한 래퍼로서 zsh 자동 완성이 내가 입력한 후에 플래그/매개변수를 제안하여 자동 완성이 for와 비슷 하지만 플래그가 없도록 만들고 devour cmd args...싶습니다 . 예를 들어 제안되어야 하는 플래그를 입력합니다 .cmdcmddevoursudodevourdevour id <TAB>id

을 확인했지만 /usr/share/zsh/functions/Completion/Unix/_sudo자동 완성 zsh 스크립트에 대해 잘 모르기 때문에 원하는 동작을 얻으려면 여기에서 무엇을 추출해야 할지 모르겠습니다.

이러한 래퍼에 대한 자동 완성 스크립트를 어떻게 만들 수 있나요?

답변1

devour다른 명령의 접두사일 뿐이고 자체적으로 옵션이 없는 경우 다음을 사용하세요._precommand완전한 기능. 이것이 zsh가 eval, time, noglob, nohup등을 위한 것입니다.

compdef _precommand devour

접두사 명령에 옵션이 있는 경우 이러한 옵션을 수행하는 방법을 지정하는 일반적인 방법은 다음과 같습니다._arguments기능. 최소한 전달한다는 -S -A "-*"것은 _arguments접두사 옵션이 명령 이름 뒤에 완료될 필요가 없으며 --명령 이름 앞에 나타날 수 있음을 의미합니다(이렇게 하면 명령 이름이 대시로 시작할 수 있습니다). 별칭, 함수 또는 내장 명령이 아닌 외부 명령만 명령 이름으로 사용할 수 있도록 지정하려면 첫 번째 인수( ) 1의 완성 형식을 지정합니다 _command_names -e. *( )에 전달된 옵션이 아닌 다른 인수 에 대한 완성 기능을 제공합니다._normal -p $service. 이는 _arguments매우 복잡한 구문 분석을 수행하고 예상치 못한 곳에서 구두점 및 공백 문제를 수행합니다. (오류의 영향은 전혀 완료되지 않는 것부터 메뉴 완료가 예상되는 프롬프트를 표시하지 않거나 특정 중첩 컨텍스트에서 잘못된 것을 완료하는 등 매우 사소한 문제까지 다양합니다.) 의심스러운 경우 아래 코드 조각을 확인하거나 zsh와 함께 제공되는 완성 기능에서.

#compdef my_prefix
_arguments -S -A '-*' : \
  '1:command: _command_names -e' '*:: : _normal -p $service'

_fakeroot그리고_setsid몇 가지 훌륭하고 간단한 예가 있습니다. 좀 더 자세한 예는 다음과 같습니다._sudo그리고_xargs.

바라보다사용자 정의 명령에 대한 동적 zsh 자동 완성완성 기능을 배치하는 방법과 위치에 대한 일반적인 조언입니다.

이 답변은 귀하가 "새로운 스타일"(1990년대 중반에 추가된) 완성 시스템을 사용하고 compinit있고 .zshrc.

관련 정보