LoginSignup
10
9

More than 5 years have passed since last update.

任意のディレクトリに短縮名を付けて極小タイプで移動する goto コマンド

Last updated at Posted at 2014-06-06

ちょっと深いけどよく移動するディレクトリに任意の短縮名を付けて、どこからでもディレクトリを移動できるようにしたら幸せじゃない?っていう趣旨のお話です。短縮名を定義すると同時に、タブ補完も効くようにしているので、極小タイプで移動、というイメージになります。

Linux / Mac 上の bash で動作する事を意図していますが、それ以外の環境であっても上手く変更すれば動くのではないでしょうか。bash についてそんなに詳しくも無いので、突っ込み歓迎です。

さてまずは、goto コマンドの定義です。お手持ちの .bash_profile やら .bashrc やらに、下記の記述を追加して下さい。

if [ -e ~/.gotocache ]; then
  rm -rf ~/.gotocache
fi
mkdir ~/.gotocache
if [ -e ~/.gotoconf ]; then
  params=""
  for line in `cat ~/.gotoconf | grep -v ^#`; do
    key=`echo ${line} | cut -d '=' -f 1`
    dir=`echo ${line} | cut -d '=' -f 2`
    params="${params} ${key}"
    echo ${dir} > ~/.gotocache/${key}
  done
  complete -W "${params}" goto
else
  complete -W "" goto
fi

goto(){
  if [ -e ~/.gotocache/${1} ]; then
    dir=`cat ~/.gotocache/${1}`
    cd ${dir}
  else
    cd ~
  fi
}

Linux と Mac を前提にしていて、Mac にプリインストールされている bash のバージョンが 3 系列で、連想配列を使えないがゆえの実装になっています。

次に、ディレクトリの短縮名を定義するファイルを作ります。ホームディレクトリに .gotoconf という名前で定義ファイルを作って下さい。
短縮名=パス という書式で設定を記述し、# から始まる行はコメントで、空行は無視します。自分が Mac で実際に使っている例(抜粋)を下記に載せます。

.gotoconf
# Mac
applications=/Applications

# Home
home=/Users/Otchy
desktop=/Users/Otchy/Desktop
documents=/Users/Otchy/Documents
downloads=/Users/Otchy/Downloads
dropbox=/Users/Otchy/Dropbox

# Tomcat
tomcat=/Users/Otchy/workspace/apache-tomcat-7
tomcatconf=/Users/Otchy/workspace/apache-tomcat-7/conf
tomcatlogs=/Users/Otchy/workspace/apache-tomcat-7/logs

設定ファイルが書けたら、再ログインするか source ~/.bash_profile するなどして、先ほどの goto コマンドを有効化します。

するとターミナル上でカレントディレクトリを自分で定義した短縮名で移動することが出来るようになります。上記の例で言うと以下のようなイメージです。

$ goto ap<tab>
↓
$ goto applications<enter> -> cd /Applications

$ goto d<tab><tab>
desktop    documents  downloads  dropbox
$ goto down<tab>
↓
$ goto downloads<enter> -> cd /Users/Otchy/Downloads

$ goto tom<tab>
↓
$ goto tomcat (ここで enter すれば cd /Users/Otchy/workspace/apache-tomcat-7)
$ goto tomcatl<tab>
↓
$ goto tomcatlogs<enter> -> cd /Users/Otchy/workspace/apache-tomcat-7/logs

Applications のような大文字を含むディレクトリへの移動が楽、tomcat のケースのように階層化されたディレクトリの場合でも、短縮名を工夫すると、タブ補完しつつ任意の深さにすぐ飛べる、というあたりが大きなメリットかと思っています。

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9