すべてのプロジェクトを保存しているディレクトリがあります。たとえば、 とします。~/projects
というコマンドを作成しました。s
このコマンドは 1 つの引数を受け取り、そのディレクトリに移動するものです。例:s foo
は に移動します~/projects/foo
。
私が欲しいのは、何らかの補完コマンドがあり、それを押し続けることでディレクトリのさらに奥に進むことがcd
できるようにすることです。tab~/projects/...
基本的に、cd
常に存在する接頭辞が付きます。
の zstyle 補完について調べてみましたman zshcompsys
が、十分に理解するには知識が足りないことに気づきました。
答え1
以下は例です自分の.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
で準備完了です。
答え2
同様の効果を実現する別の方法は、ディレクトリのエイリアスを定義することです。
setopt auto_cd
alias -d s=~/projects
~s/
Tabのサブディレクトリに変更するには、と入力します。コマンド引数でも~/projects
使用できます。~s
答え3
名前付きディレクトリ ハッシュ テーブルにエントリを直接追加できます。
hash -d s="${HOME}/projects"
これで、ディレクトリを参照するために を使用するだけで済み~s
、コマンドでタブ補完を使用できるようになりましたcd
: cd ~s/Tab
zsh のautocd
オプションが設定されている場合は、 を省略できますcd
。
答え4
以下を変更できます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)