よく使うディレクトリをブックマークする zsh のプラグイン

Qiita 見てたらこんな投稿を見つけた。

[Zsh - よく作業するDirをBookmarkするshellスクリプト - Qiita](http://qiita.com/mokemokechicken/items/69af0db3e2cd27c1c467)

だいたい、よく使うディレクトリに cd したいとき `cd ~/work/project/ruby/web` とか長い名前を打つのはめんどくさい。`$CDPATH` を通しておくっていう手もあるけど、タブで補完したときに候補がいっぱい出たりして微妙に便利じゃない。そんなときにこれを使えばディレクトリの移動が簡単になる。

ちょっと改良の余地があるというか、タブで補完できるようにしたらもっと便利になると思って、独立した zsh のプラグインとして書き直したので紹介する。

## このプラグインでできること

[cd-bookmark](https://github.com/mollifier/cd-bookmark) というプラグインを作った。これをインストールすれば `cd-bookmark` というコマンドが使えるようになる。

こいつを使えばよく使うディレクトリに別名を付けてブックマークできる。移動するときはその別名を指定すればOK。

他のディレクトリ移動を便利にする系プラグインは、だいたい移動した履歴を自動で覚えてるやつが多いと思う。それに対して、こいつは手動で登録する。手でする手間はあるけど、その分勝手にいっぱい登録されたりしなくて、厳選されてる感じになる。よく使うディレクトリが決まってる人はこっちのほうが便利だと思う。

使っている様子はこんな感じ。

```zsh
# 今は '/home/mollifier/work' にいるとする
% pwd
/home/mollifier/work

# -a オプションで今いるディレクトリをブックマークに追加する。
% cd-bookmark -a work

# 適当に他の場所に移動する
% cd

# 'work' を指定すれば /home/mollifier/work に戻れる
% cd-bookmark work
% pwd
/home/mollifier/work

# ブックマークは何個でも登録できる
% cd /home/mollifier/tmp
% cd-bookmark -a tmp

# オプション無しで登録済のブックマーク一覧を表示する
% cd-bookmark
tmp|/home/mollifier/tmp
work|/home/mollifier/work

# タブでブックマーク名を補完できるので簡単に選べる
% cd-bookmark [TAB]
tmp work
```

## インストール

まず [cd-bookmark](https://github.com/mollifier/cd-bookmark) から cd-bookmark, _cd-bookmark と2つファイルを取ってきて $fpath の通ったところに配置する。その後に `.zshrc` で `autoload` すれば OK。

例えば `$HOME/zsh/functions/cd-bookmark` の下に配置したい場合はこんな感じ。

```zsh
% cd $HOME/zsh/functions
% git clone https://github.com/mollifier/cd-bookmark.git cd-bookmark

# 手動でやる場合は $HOME/zsh/functions/cd-bookmark ディレクトリを作成して、
# その下に cd-bookmark, _cd-bookmark を置く
```

その後 `~/.zshrc` にこんな感じで書く。

```zsh:.zshrc
fpath=($HOME/zsh/functions/cd-bookmark(N-/) $fpath)

autoload -Uz cd-bookmark
alias cdb='cd-bookmark'
```

最後の `alias` は必須じゃないけど設定しておくと便利。`b` とか一文字の alias にするのもありだと思う。

注意としては、`fpath` を設定するところは `autoload -Uz compinit` とやってるとこより前に書くこと。そうじゃないとこのプラグインの補完がうまく動かなくなる。


## 使い方

### 基本的な使い方

-a オプションで今いるディレクトリをブックマークに追加する。後に付けた引数がブックマーク名になる。

```zsh
% cd ~/work
% cd-bookmark -a work

% cd ~/etc/config
% cd-bookmark -a config
```

オプションを付けずに実行すると、今登録されているブックマークを一覧表示する。

```zsh
% cd-bookmark
config|/home/mollifier/etc/config
work|/home/mollifier/work
```

見ての通り 「ブックマーク名|ディレクトリパス」 という形で保存している。

ブックマーク名を付けて実行すると、対応するディレクトリに移動する。

```zsh
% cd-bookmark work
% pwd
/home/mollifier/work

% cd-bookmark config
% pwd
/home/mollifier/etc/config
```

タブでブックマーク名が補完できるので、簡単に選べて便利。

### ブックマークからの相対的なパスに移動する

ブックマーク名の後ろにパスを付けることもできる。そうしたときはブックマーク先ディレクトリからの相対的なパスに移動する。

```zsh
# 例
# work というブックマーク名で /home/mollifier/work に移動できるとする
% cd-bookmark work
% pwd
/home/mollifier/work

# さらに、/home/mollifier/work の下にはこんなディレクトリがあったとする
# /home/mollifier/work
#   |-myproject/
#   |-tmp/
#   |  |-images/
#   |  `files/
#   `zsh

# ブックマーク名の後ろに、ブックマーク先ディレクトリからの相対パスを付けて移動できる
% cd-bookmark work/myproject
% pwd
/home/mollifier/work/myproject

# ここでもタブの補完が効く
% cd-bookmark work/tmp/ [TAB]
images/ files/

% cd-bookmark work/tmp/images
% pwd
/home/mollifier/work/tmp/images
```

### その他のオプション

その他にもオプションがあるので説明する。

`-a` でブックマークに登録するときはブックマーク名は省略できる。省略すると自動的に1から順に空いてる数字を探してブックマークの名前として使う。

```zsh
% cd ~/tmp
% cd-bookmark -a

% cd ~/Dropbox
% cd-bookmark -a

% cd-bookmark
1|/home/mollifier/tmp
2|/home/mollifier/Dropbox
config|/home/mollifier/etc/config
work|/home/mollifier/work
```

ブックマークに移動するときはブックマーク名の左に `-c` オプションを付けても良い。

```zsh
# cd-bookmark work と同じ
% cd-bookmark -c work
% pwd
/home/mollifier/work
```

`-l` オプションを付けるとブックマーク一覧表示する(オプション無しと同じ動き)。

```zsh
# cd-bookmark と同じ
% cd-bookmark -l
1|/home/mollifier/tmp
2|/home/mollifier/Dropbox
config|/home/mollifier/etc/config
work|/home/mollifier/work
```

`-e` オプションでブックマークファイルをエディタで開く。

```zsh
% cd-bookmark -e
```

`EDITOR` 環境変数で指定したエディタで開くので、普段使ってる vim とか emacs とかが起動する。ブックマークを削除したり編集したりする機能はコマンドとしては持っていないけど、これでエディタを起動して好きなように編集すればいいと思う。

あと `-h` オプションでヘルプが表示される。

```zsh
% cd-bookmark -h
```

### 終わりに

[mokemokechicken](http://qiita.com/mokemokechicken) さんのおかげで便利なプラグインが出来ました。ありがとうございました!

あと作ってから気がついたけど、この投稿の方法で似たようなことができる。

[Zsh - よく使うディレクトリに別名をつける - Qiita](http://qiita.com/usamik26/items/18591c9f870fcdd0d003)

でも今回の cd-bookmark の方はディレクトリ移動に特化してる感じで、これはこれで役に立つ思う。

ディレクトリ移動に関してはプラグインとかいっぱいあるので、いろいろ試して便利なやり方を見つけてください!