Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What is going on with this article?
@otchy

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

More than 5 years have passed since last update.

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

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 のケースのように階層化されたディレクトリの場合でも、短縮名を工夫すると、タブ補完しつつ任意の深さにすぐ飛べる、というあたりが大きなメリットかと思っています。

8
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
otchy
1979 年 2 月 10 日生まれ / 仕事: Web システム開発 / 好きなもの: IT 全般、科学分野 / 座右の銘: 明日は明日の風が吹く / 好きな言葉: ハードルは高ければ高いほどくぐりやすい

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
8
Help us understand the problem. What is going on with this article?