Zsh、プレフィックス付きディレクトリタブ補完

Zsh、プレフィックス付きディレクトリタブ補完

すべてのプロジェクトを保存しているディレクトリがあります。たとえば、 とします。~/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)

関連情報