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の後にスペースが続き、その後にスペースで区切られた1つ以上のコマンド名が続く必要があります。ファイルに無効な文字がないことを確認してください。特に、ファイルにはWindows行末ではなくUnix行末(LF)が必要です(CRLF - 失われたCRのためにコマンドが選択されない可能性があります)。

このcompinit関数は、最初に実行されたときにキャッシュファイルを生成し、次回より速く実行できるようにします。ファイル名は~/.zcompdump。これには、aura _aura関数のコードではなく、コマンド名と完成関数(たとえば)の間の関連性が含まれます。時にはそれを再生成する必要があります。特に、#compdef既存のファイルの行を変更すると、compinitファイルは再読み込みされません。-Cに渡さない限り、compinit新しいファイルを選択しますが、#compdef次にzshを起動する前にその行をインポートする必要があります。そうでない場合は、キャッシュファイル(rm ~/.zcompdump)を削除してzsh(より正確には実行compinit)を再開します。

おすすめ記事