![zshは新しいオートコンプリートスクリプトを拒否します](https://linux33.com/image/44234/zsh%E3%81%AF%E6%96%B0%E3%81%97%E3%81%84%E3%82%AA%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%97%E3%83%AA%E3%83%BC%E3%83%88%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E6%8B%92%E5%90%A6%E3%81%97%E3%81%BE%E3%81%99.png)
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
の後にスペースが続き、その後にスペースで区切られた1つ以上のコマンド名が続く必要があります。ファイルに無効な文字がないことを確認してください。特に、ファイルにはWindows行末ではなくUnix行末(LF)が必要です(CRLF - 失われたCRのためにコマンドが選択されない可能性があります)。
このcompinit
関数は、最初に実行されたときにキャッシュファイルを生成し、次回より速く実行できるようにします。ファイル名は~/.zcompdump
。これには、aura _aura
関数のコードではなく、コマンド名と完成関数(たとえば)の間の関連性が含まれます。時にはそれを再生成する必要があります。特に、#compdef
既存のファイルの行を変更すると、compinit
ファイルは再読み込みされません。-C
に渡さない限り、compinit
新しいファイルを選択しますが、#compdef
次にzshを起動する前にその行をインポートする必要があります。そうでない場合は、キャッシュファイル(rm ~/.zcompdump
)を削除してzsh(より正確には実行compinit
)を再開します。