2016-11-29 10 views
0

내 선택에 맞는 쉘을 선택하여 zsh를 굽히려고하고 있으며 구문의 완성과 작동에 완전히 몰입하고 있습니다. 내 사용 사례는 이것이다 :여러 반복 옵션이있는 Zsh 완료

  • 정상 파일 완료 : ansible-playbook -e vars/file_name.yml
  • 앞에 추가 된 파일 완료 : ansible-playbook -e @vars/file_name.yml
  • 나는 '-e'옵션 지원 아래 세 가지 변화를 'ansible-플레이 북'에 대한 완료를 원하는
  • 임의의 문자열 : ansible-playbook -e key=value

나는 친절했다 https://github.com/zsh-users/zsh-completions/blob/master/src/_ansible-playbook으로 시작하지만, 접두사 파일 경로 지정을 지원하기 위해 수정이 필요합니다. 이에

... 
"(-D --diff)"{-D,--diff}"[when changing (small files and templates, show the diff in those. Works great with --check)]"\ 
"(-e --extra-vars)"{-e,--extra-vars}"[EXTRA_VARS set additional variables as key=value or YAML/JSON]:extra vars:(EXTRA_VARS)"\ 
'--flush-cache[clear the fact cache]'\ 

:이를 위해 I는 다음 행 (는 -e 라인) 변경

... 
"(-D --diff)"{-D,--diff}"[when changing (small files and templates, show the diff in those. Works great with --check)]"\ 
"(-e --extra-vars)"{-e,--extra-vars}"[EXTRA_VARS set additional variables as key=value or YAML/JSON]:extra vars:__at_files"\ 
'--flush-cache[clear the fact cache]'\ 

을 상기 '__at_files'기능 추가 :

__at_files() { 
    compset -P @; _files 
} 

것은이 될 수있다 매우 싫은 냄새가 났지만 전에는 이런 일이 발생하지 않은 사람에게 이것이 내 문제를 해결했음을 기쁘게 생각합니다.

"-e"매개 변수가 여러 개있는 경우 이는 완전히 실패합니다 (도커가 -v 또는 -p 인수를 여러 개 허용하는 것과 유사 함). 이것이 의미하는 바는 첫 번째 '-e'매개 변수는 내 접두사가 붙은 완성 작업을 갖지만 그 이후의 모든 '-e'매개 변수는 '벙어리'가되어 정상적인 '_ 파일'완성 만 허용 할 수 있습니다.

ansible-playbook -e key=value -e @vars/file 

을하지만이 파일 자체에 대한 완료 것 : 그래서 다음이 제대로 완료되지 않습니다

ansible-playbook -e key=value -e vars/file 

내가 난장판을 했습니까? 이 특정 완료 플러그인의 '-M'옵션에 대해 동일한 유형의 동작이 표시됩니다 ('벙어리'가되어 기본 파일 완성을 수행함). 나는 정확한 용어 나 용어의 조합을 단순히 검색하지 않았을 수도 있고, 아마도 이것을 다루는 것에서 놓친 다소 복잡한 문서에서 찾을 수도 있지만, 며칠 만에이 경험을 파헤 치면서 길을 잃었습니다. 여러 -e 옵션이 유효한 경우

답변

1

의 _arguments 사양 *로 시작해야 그래서 대신 :

"(-e --extra-vars)"{-e,--extra-vars}"[EXTR .... 

사용 :

\*{-e,--extra-vars}"[EXTR ... 

(-e --extra-vars) 부분은 옵션의 목록을 나타냅니다 수 없습니다 지정된 것을 따르십시오. 아마도 예를 들어 유효 할 수 있기 때문에 더 이상 필요하지 않습니다. 예 :