autojump

今日は「autojump」のお話。

「autojump」はディレクトリ移動ツールで、ディレクトリ文字列をデータベース化し、そして予測されるディクトリにジャンプします。例えば、
$ j 設計書
とか入力すると、履歴DBから「設計書」という名前の入ったディレクトリを探し出して、それがどんなに遠くだろうと、ぴょ〜んとジャンプしてくれます。頼もしいですよね。

インストール自体は簡単で、
$ brew install autojump
シェルに「bash」や「zsh」を使っているなら、後は画面に指示されている通りに設定を追加すれば良いだけなのですが、それでは面白くないので、ここは敢えて、対象外のシェルで使用する事にします。

1. sh/ksh系

sh系には、MAC標準の「sh」とHomebrewでインストールできるash系の「dash」があります。
ksh系には、MAC標準の「AT&T版」と、Homebrewでインストールできる「Public domain版」と、同じくHomebrewでインストールできる「MirBSD版」があります。

ログインシェルとして起動した場合、まず「~/.profile」が読み込まれるのは全て同じなのですが、その次の挙動が異なります。

環境変数「ENV」を設定していない場合、「AT&T版」は「~/.kshrc」を、「MirBSD版」は「~/.mkshrc」を続けて読み込みますが、他のシェルは何も読み込みません。
環境変数「ENV」にファイル名を設定するとそれを読み込むのは、全てのシェルで同じですが、今度はシェルそれぞれを使い分けようとすると、微妙に文法が違っていたりしてするので、一つのファイルに設定を書いていく場合には注意が必要です。

ちなみに、もしこれらシェルごとに違う設定をしたいのであれば「~/.profile」に、

 # Read next script
ENV=.`echo $0 | sed -e s/-//`rc; export ENV

とか書いておくのも方法の一つですよ。
こう書いた場合、「ksh」「pdksh」なら「~/.kshrc」、「mksh」なら「~/.mkshrc」、「sh」なら「~/.shrc」、「dash」なら「~/.dashrc」を、それぞれ読むようになります。
ただしこれはログインシェルの場合に限ります。

脱線してごめんなさい。
いずれにせよ、これら「sh系/ksh系」で「autojump」を使うためには、設定ファイルでプロンプト環境変数「PS1」を定義した後に、以下の内容を書いておきます。

# for Autojump
PS1='$(autojump -a $PWD >/dev/null 2>&1)'$PS1
j() {
    cd `autojump $*`
}

これで「autojump」のコマンド「j」が使えるようになりました。

2. csh/tcsh系

昔と違って人気がないようで寂しい限りです。
みんなの憧れの的だったんですけどね・・・

# for Autojump
alias cwdcmd 'autojump -a $cwd > /dev/null'
alias j 'cd `autojump \!*`'

こんな感じで設定ファイルのどこか片隅にでも置いてあげてください。

3. rc

さて「rc」ですが、文法は違いますが「csh」と同じような感覚で大丈夫です。
プロンプト関数の中に書くことに注意してください。

# user prompt
fn prompt {
    cwd=`{/bin/pwd | /usr/bin/sed -e s@^$home@~@}
    prompt=$LOGNAME'@'$hostname'['$cwd'] '
    autojump -a $PWD >[2=1] >/dev/null
}
# for autojump
fn j {
    cd `{command autojump $*}
}

4. fish

最後に大好きなfishお姉様です。
「fish」の場合も「csh」と同じような感覚ですが、元々システムが準備しているプロンプト関数がありますので、まずそれをコピーします。
$ cp /usr/local/share/fish/functions/fish_prompt.fish ~/.config/fish/functions
それから「~/.config/fish/functions/fish_prompt.fish」をエディタで開いて、一番最後の方に、

    echo -n -s "$USER" @ "$__fish_prompt_hostname" ' ' "$__fish_prompt_cwd" (prompt_pwd) "$__fish_prompt_normal" '> '
  end
  # for autojump
  autojump -a $PWD > /dev/null &
end

この2行を追加します。
そして設定ファイルに、

# for autojump
function j
  cd (command autojump $argv)
end

この関数設定を追加すれば準備万端。
さあ一緒にディレクトリサーフィンを楽しみましょう!

 

autojump」への2件のフィードバック

  1. ピンバック: CDPATH | VivaFan通信

  2. ピンバック: 「fish」シェルを実際に使うために | VivaFan通信

コメントをどうぞ