
使ってみようcdablevars.zshrc
、私のファイルに設定してください
# Set directory variables
setopt cdablevars
Home=/Users/benjamin
ただし、タブが完了する前にを実行するcd Home
必要があります。cd Home/Desktop/
最初の端末ウィンドウでは、Home
タブ補完機能は使用できません。実行した後にcd Home
。タブ補完が自動的に認識されるように変数を設定できますか?
答え1
/_cd
組み込み機能の完成者は以下を提供します。cd
pushd
名前ディレクトリに追加されました名前ディレクトリハッシュテーブル(hash -d
および$nameddirs
関連配列を参照)
これらの内容は、対応する名前付きディレクトリを参照するときに入力されます。名前付きディレクトリハッシュの完全なビルドを実行しても、アイテムのみが追加されますhash -df
(~user
文書に指定されています)。
一般的なzsh
対話型セッションには何百ものグローバル変数があり、そのほとんどはディレクトリを含みません。それらを完成させることは非生産的です。
また、これはcdablevars
歴史的な遺物に近く、主にtcsh
予想以上の問題を含む多くの問題を引き起こし、発生するユーザーに対応するためのものです。私は個人的にそれを離れたいと思います。バラよりパスを評価するとzshが遅くなります。これについて詳しく学んでください。
しかし、とにかく、cd ~Ho
Tab(使用して~...
明らかにIMOがより良い)に追加しない限り、その有無にかかわらずcdablevars
完全ではありません。Home
名前ディレクトリハッシュテーブル。
hash -d
それにもかかわらず、必要に応じてincludeを使用できますhash -d ${(k)parameters}
。
答え2
完了が常に機能しない理由
具体的な効果はcdable_vars
cd foo
で許可されるショートカットですcd ~foo
。チルダ拡張いつを~foo
表すことができるのは、値がスラッシュで始まる変数です。$foo
foo
これ完全なコード~foo
パラメータは実際には認識されません。コマンドを使用せずに問題を再現できます。cd
最初はecho ~f
Tab完了しませんが、~foo
このコマンドを実行すると完了します。
2番目に成功した理由は、アドイン~foo
をfoo
正常に使用したためです。名前付きディレクトリハッシュテーブル(次からアクセスnameddirs
大量に)、それが~foo
完成コードが探しているものです。
特定の変数に対して機能させる方法
foo
絶対パスを含む変数を定義したら、次を実行します。
hash -d foo=$foo
値が変更された場合は、このコマンドを再実行する必要はありませんfoo
。
自動的に機能させる方法
私が考えることができる唯一の方法は、_tilde
コード補完を通じて、または名前付きディレクトリハッシュテーブルにそのパラメータを強制的に追加して、パラメータ名を名前付きディレクトリとしてサポートするようにパッチすることです。
未テスト:_tilde
アイテムを強制的に追加するように修正されましたnameddirs
。
if [[ -o cdable_vars ]]; then
local p
for p in ${(k)parameters[(R)scalar*]}; do
if [[ ${(P)p} == /* ]]; then : ~$p 2>/dev/null; fi
done
fi