すべてのプロジェクトを配置するディレクトリがあります。たとえば、~/projects
としましょう。 s
というコマンドを作成しました。このコマンドは、1つの引数を取り、そのディレクトリに移動します。例:s foo
は私を~/projects/foo
に移動します。
私が欲しいのは、cd
のように機能する、ある種の完了コマンドを用意して、ヒットし続けることができるようにすることです。 tab さらに~/projects/...
ディレクトリに移動します。
基本的に、cd
には常に存在するプレフィックスが付いています。
man zshcompsys
でzstyleの補完を調べましたが、正しく理解するのに十分な知識がないことに気づきました。
これが 私自身の.zshrc
の例で、コピー/貼り付けスニペットとして保持しています。
# Try using the below template to set up zsh functions that act
# as aliases to cd and allow you to get autocomplete nicely.
project() { cd /path/to/project/$1; }
compctl -W /path/to/project/ -/ project
上記の両方の行の/path/to/project
セクションを編集するだけで、準備は完了です。
同様の効果を実現する別の方法は、ディレクトリのエイリアスを定義することです。
setopt auto_cd
alias -d s=~/projects
タイプ~s/
Tab~/projects
のサブディレクトリに変更します。コマンド引数で~s
を使用することもできます。
名前付きディレクトリハッシュテーブルにエントリを直接追加できます。
hash -d s="${HOME}/projects"
これで、~s
を使用してディレクトリを参照でき、cd
コマンドでタブ補完を使用できます。cd〜s /Tab
Zshのautocd
オプションが設定されている場合は、cd
を省略できます。
CDPATH
を変更できます。
export CDPATH="$CDPATH:$HOME/Repositories:$HOME/Repositories/jc/Projects"
これで、指定したディレクトリ内のすべてのサブディレクトリに、他のすべてのディレクトリから、現在のディレクトリのサブディレクトリであるかのようにアクセスできます。
➜ ~ /tmp
➜ /tmp pwd
/tmp
➜ /tmp MyAwesomeProject
~/Repositories/jc/Projects/MyAwesomeProject
➜ MyAwesomeProject git:(master) pwd
/Users/rafael/Repositories/jc/Projects/MyAwesomeProject
➜ MyAwesomeProject git:(master)