pockestrap

Programmer's memo

zshの名前付きディレクトリがとても便利

言いたいことの8割は、zshの本の276ページぐらいを読めば大体書いてあります。


名前付きディレクトリの使い方

名前付きディレクトリを使うには、setopt autonamedirsした上で、変数に/から始まる文字列を代入します。

$ setopt autonamedirs
$ vim_dir=/usr/share/vim/vim74/

$ cd ~vim_dir

このようにすると、vim_dirにすぐ移動できるようになります。

もうひとつの定義方法

ですが、変数を介すのは気持ち悪いですね。 直接名前付きディレクトリを設定することもできます。

$ hash -d vim_dir=/usr/share/vim/vim74/

$ cd ~vim_dir

少しいい感じの定義になりました。

楽をしたい

ただ、これだと毎回~を入力しなくてはいけなくて面倒ですね。CDABLE_VARSオプションを指定すると、~を省略することが出来ます。

$ setopt CDABLE_VARS
$ hash -d vim_dir=/usr/share/vim/vim74/

$ cd vim_dir

これでかなり使いやすくなりましたね。

もっと楽をしたい

また、AUTO_CDオプションをセットすると、ディレクトリ名だけでcdすることができるようになります。

$ setopt CDABLE_VARS
$ setopt AUTO_CD
$ hash -d vim_dir=/usr/share/vim/vim74/

$ vim_dir

AUTO_CDは、名前付きディレクトリだけでなく、普通のディレクトリでもディレクトリ名だけで移動できるようになるオプションです。

楽に定義をしたい

名前付きディレクトリの定義をする時には、やはりディレクトリの存在確認をしたいですよね。 そのほうが、複数環境で使いまわしやすいzshrcになるでしょう。

というわけで、適当に関数を書いてみました。

function name_dir() # dir, name
{
  local dir=$1
  local name=$2

  if [ -d $dir ]; then
    hash -d $name=$dir
    return 0
  else
    return 1
  fi
}

下のようにして使います(実際に使っている例です)。

name_dir ~/dotfiles/ d
name_dir ~/project/ p
name_dir ~/.vim/bundle/ v

こうすると、dだけで~/dotfiles/に飛べるようになります。めっちゃ便利。


よくいくディレクトリが深い階層にある人なんかはとても便利に使えると思います。