zsh는 새로운 자동 완성 스크립트를 거부합니다

zsh는 새로운 자동 완성 스크립트를 거부합니다

zsh 완성을 작성하려는 소프트웨어 프로젝트가 있습니다. 미리 만들어진 많은 완성 항목을 제공하는 패키지를 설치한 후 여기에 배치된 것을 발견했습니다.

/usr/share/zsh/site-functions

그래서 완성 스크립트를 작성하고 거기에도 넣었습니다. …그리고 실패로 인해 좌절감을 느낍니다. 나는 다음을 시도했습니다 :

  1. 위 디렉터리의 원본 스크립트에 대한 Symlink입니다.
  2. 스크립트 사본을 위의 디렉토리에 직접 배치하십시오.
  3. 내 로그인 셸을 zsh로 설정합니다(다른 셸에서 전환하는 대신).
  4. (가능한) 합계 compinit의 모든 순열 rehash.
  5. 원본 스크립트를 단순화하여 잘못되지 않도록 합니다.
  6. 다른 스크립트의 내용을 변경합니다. 변경 사항이 적용되었으므로 디렉토리가 정확하고 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디렉터리에 디렉터리를 추가 할 수 있습니다 ..zshrccompinit

fpath=(~/lib/zsh $fpath)

파일의 첫 번째 줄 #compdef뒤에는 공백이 오고 그 뒤에는 공백으로 구분된 하나 이상의 명령 이름이 와야 합니다. 파일에 잘못된 문자가 없는지 확인하십시오. 특히 파일에는 Windows 줄 끝이 아닌 Unix 줄 끝(LF)이 있어야 합니다(CRLF - 길 잃은 CR로 인해 명령이 선택되지 않을 수 있음).

compinit함수는 처음 실행될 때 캐시 파일을 생성하여 다음 번에 더 빠르게 실행되도록 합니다. 파일 이름은 ~/.zcompdump. 여기에는 aura _aura함수의 코드가 아닌 명령 이름과 완성 함수(예:) 간의 연관성이 포함됩니다 . 때로는 이를 재생성해야 할 수도 있습니다. 특히 #compdef기존 파일의 줄을 변경하면 compinit파일을 다시 읽지 않습니다. -C에 전달하지 않는 한 compinit새 파일을 선택하지만 #compdef다음에 zsh를 시작하기 전에 해당 줄을 가져와야 합니다. 그렇지 않은 경우 캐시 파일( rm ~/.zcompdump)을 삭제하고 zsh(더 정확하게는 실행 compinit)를 다시 시작합니다.

관련 정보