RLB

Just sharing knowledge

見えたディレクトリにcd移動するコマンドjj作ったら効率上がった

ログインシェルにautojump入れたときは本当にCDコマンドの回数が劇的に減って、「生産性が2倍になったかもしれん」と喜んだものです。

【参考】Glide Note | zsh使いなら効率改善のため知っておきたいAUTOJUMP
http://blog.glidenote.com/blog/2012/02/29/autojump-zsh/
※なぜかうちのMac環境だとhomebrewだとうまく動かず、結局ソースから直接入れましたが…

それでも、かゆい所に手が届かないシーンもあります。

割りと個人的な理由ですが、仕事において以下のようにディレクトリを管理することが多いです。

cd ~/sandbox
20120927192244_crawler_test_script
20121022092244_lvs_test
20121027192244_hoge

上記のようにすることで、「あの時に作ったテンポラリファイルどこだっけ?」というのをディレクトリ名の時間で解決しています。
このあたりの管理手法は「tmuxを使った仕事術」あたりで後ほど記事にしたいと思います。


さて、本題ですが、上記のようにフォルダ管理をしてしまうと、tab補完などでディレクトリ移動するのがやや面倒くさいです。

2012102- [tab]

数字がくっつきすぎてよく分からん ///

autojumpでは履歴があることは前提ですし、ctrl-rのbackwards searchだとcd以外のものもいっぱい引っかかる。なんかもっと簡単に移動したい。


ということで、簡単なコマンドを作成しました。
.zshrcに以下を追加

jj () {
  if [ $1 ]; then
      JUMPDIR=$(ls | grep $1 | tail -1)
      if [ $JUMPDIR ]; then
          cd $JUMPDIR
      fi
  fi
}

※もちろんbashでもなんでもOK


原理は簡単です。
ls grepして、文字列が引っかかった一番下の奴にジャンプ。

ls
20121022092245_hoge
20121027192244_hoge

「一番下より一個上のhogeに飛びたい」という時なら、「5_hoge」とかうまく上にだけ引っかかるようにすればOK。
目に飛び込んだフィーリングで移動出来るようになります。
一番下のディレクトリであれば、hでもoでも何でも引っかかれば移動可能。

余談ですが、これだと厳密にはファイルにもjumpしようとしてしまうため、`ls -F | grep /`などを入れて工夫しても良いと思います。


これで普段の移動に関しても断片的な文字列でポンポン飛べるようになったので、生産性が格段に向上しました。autojumpのjコマンドとjjコマンドの組み合わせで羽が生えた気分です。
とはいえ間違って移動してしまったときは以下コマンドを使っておとなしく戻りましょう笑

cd -


もっと良い方法がありましたら、コメントお待ちしております。
お試しあれ。