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
)を再開します。