zsh 완성을 작성하려는 소프트웨어 프로젝트가 있습니다. 미리 만들어진 많은 완성 항목을 제공하는 패키지를 설치한 후 여기에 배치된 것을 발견했습니다.
/usr/share/zsh/site-functions
그래서 완성 스크립트를 작성하고 거기에도 넣었습니다. …그리고 실패로 인해 좌절감을 느낍니다. 나는 다음을 시도했습니다 :
- 위 디렉터리의 원본 스크립트에 대한 Symlink입니다.
- 스크립트 사본을 위의 디렉토리에 직접 배치하십시오.
- 내 로그인 셸을 zsh로 설정합니다(다른 셸에서 전환하는 대신).
- (가능한) 합계
compinit
의 모든 순열rehash
. - 원본 스크립트를 단순화하여 잘못되지 않도록 합니다.
- 다른 스크립트의 내용을 변경합니다. 변경 사항이 적용되었으므로 디렉토리가 정확하고 zsh가 그곳에서 완료 스크립트를 감지하고 있습니다.
단순화된 스크립트는 다음과 같습니다.
#compdef aura
_arguments -s \
'-V[Version!]' \
'-h[Helpppp]'
그리고 내 .zshrc의 현재 내용입니다. 나는 일반적으로 zsh 사용자가 아닙니다.
autoload -U compinit
compinit
zstyle ':completion:*' rehash true
귀하가 제공할 수 있는 통찰력에 감사드립니다. 내가 무엇을 놓치고 있나요?
편집: /usr/share/zsh/site-functions의 내용은 다음과 같습니다.
_ack _adb _android _attach _aura _baselayout _bpython _brew _bundle _cap _choc _coffee _cower _cpanm _debuild _dhcpcd _ditz _emulator _eselect _fab _gas _gcc-config _geany _gem _genlop _gentoolkit _gentoo_packages _git-flow _github _git-pulls _git-wtf _google _gradle _heroku _jmeter _jmeter-plugins _jonas _knife _language_codes _layman _lein _lunar _lunchy _manage.py _mosh _mvn _node _optirun _pacman _pactree _pear _perf _periscope _pgsql_utils _pip _pkcon _play _port _portage _portage_utils _pygmentize _redis-cli _rvm _sbt _scala _sdd _setup.py _showoff _smartmontools _srm _ssh-copy-id _subliminal _symfony _systemd _teamocil _thor _tmuxinator _vagrant _virtualbox _vnstat _vpnc _yaourt
답변1
여기서 뭔가 잘못될 수 있다고 생각합니다.
fpath
완성 코드가 포함된 파일은 배열에 나열된 디렉터리에 있어야 합니다 . 좋아요 ; 아래에 자신의 파일을 배치하면 안 됩니다 /usr/share
. zsh는 상관하지 않지만 운영 체제의 패키지 관리자가 파일을 삭제하거나 덮어쓸 수 있으며 파일을 백업하거나 다른 시스템에 복사하는 등의 작업을 잊어버릴 수도 있습니다. /usr/local
시스템의 모든 사용자가 사용할 수 있도록 하려면 홈 디렉토리에서 해당 사용자만 사용할 수 있도록 하십시오. (를 호출하기 전에 ) fpath
디렉터리에 디렉터리를 추가 할 수 있습니다 ..zshrc
compinit
fpath=(~/lib/zsh $fpath)
파일의 첫 번째 줄 #compdef
뒤에는 공백이 오고 그 뒤에는 공백으로 구분된 하나 이상의 명령 이름이 와야 합니다. 파일에 잘못된 문자가 없는지 확인하십시오. 특히 파일에는 Windows 줄 끝이 아닌 Unix 줄 끝(LF)이 있어야 합니다(CRLF - 길 잃은 CR로 인해 명령이 선택되지 않을 수 있음).
이 compinit
함수는 처음 실행될 때 캐시 파일을 생성하여 다음 번에 더 빠르게 실행되도록 합니다. 파일 이름은 ~/.zcompdump
. 여기에는 aura _aura
함수의 코드가 아닌 명령 이름과 완성 함수(예:) 간의 연관성이 포함됩니다 . 때로는 이를 재생성해야 할 수도 있습니다. 특히 #compdef
기존 파일의 줄을 변경하면 compinit
파일을 다시 읽지 않습니다. -C
에 전달하지 않는 한 compinit
새 파일을 선택하지만 #compdef
다음에 zsh를 시작하기 전에 해당 줄을 가져와야 합니다. 그렇지 않은 경우 캐시 파일( rm ~/.zcompdump
)을 삭제하고 zsh(더 정확하게는 실행 compinit
)를 다시 시작합니다.