islands5 blog

日々起こったことを共有したり、思ったこと、勉強したことを書いていくブログ。普段はRailsやAWSを活用したWeb系の開発をやってます。

開発が捗るTips(vimでコードジャンプ、grepの小技)

会社に来てます。

土曜日なのにどうして?
=> 携帯を会社に忘れたからです。

休日の会社っていいですね〜
静かだし、本とか山のようにあります。
誘惑もないし、誰かが来るかもという緊張感も若干あったりして、結構集中できます。

家では自分が作りたいサービスのプログラムを書くのですが、今日は会社にいるということで普段コーディングをしている時に不便だと思っていることを改善しようと思いました。

やったことは2つ

  • vimでctagsを上手く使えるようにする
  • grepで毎回複数の除外フォルダを書くのが面倒くさいからなんとかする

vimでctagsを上手く使えるようにする

コードを書くときには、Vimを使っています。
結構気に入って2年位使っているのですが、有料のエディタに変えようかな?と思うことがあります。

そんな時は大体、参加するプロジェクトが変わったりして新しいコードをたくさん読む必要がある場合です。
有料のエディタ(RubyMineとか)はやはりお金を払うだけあって、独自に設定ファイルを追加しなくてもいい感じに使えます(聞いた話によるとですが...)。
とくに話に聞いて『いいな〜』と思うのは、コードジャンプです。

例えば、コードを読んでいる時に

user = User.find_by(1000)
user.extream_beautiful_function(123, 456, 789)

という処理を見かけたとします。 『えっextream_beautiful_functionってなんなん?』
と考えた時に、有料のエディタだとコマンド一発で関数を定義している部分へ行けるんですよね。

Vimだとそれがデフォルトではできないんです^^;
なので変えようかな〜と思うわけです。

ただ設定をカスタマイズすればできるので、今回はそれをやってみました(業務中にやるのはちょっと違うかな〜と思ってたので手付かずでした)。

やることは、とても簡単です。

brew install ctags

これでctagsが入ります。 ctagsを実行すると、関数の参照を持つ.tagsやtagsのようなファイルを作成します。

でもファイルを変更する度に、毎回ctags -Rを実行するのは面倒です。
そこでauto-ctagsというvimプラグインを入れます。
~/.vimrcに以下のコードを追記してください。

#Neobundle入れてない人は入れて下さい

NeoBundle 'soramugi/auto-ctags.vim'

let g:auto_ctags = 1 #=> これでセーブした時に自動でctagsが実行されます

っとここまでは他の所に書いているんです。
しかもめっちゃ簡単ですよね!!!!!
それがそんなに話は上手く行かないのです。

セーブする度にctagsが走る + もしファイルが多かったりファイルのテキストが多かったりする
ctagsの実行プロセスがCPUを食い尽くして、Macが激重になるんです!!!!!!!!!!!!!!!!
これじゃ仕事にならないよ〜〜〜

はい、簡単に解消できました。
~/.ctagsに以下の内容を追記してください。

--exclude=.git
--exclude=log
--exclude=node_modules
--exclude=jquery.*.js
--exclude=jquery-*.js
--exclude=vendor
--exclude=*.min.js

--languages=Ruby,PHP,Javascript

これだけです。
ctagsの際に読み込まないファイルを設定することで解消できます。
大体、テキストの量が多いファイルやディレクトリは、外部から取ってきたものやログ、.git等です。
これ書いておけば、Macが激重にならなくなりました。

もし開発する言語がある程度決まっているなら、languagesで使う言語を指定しておくといいと思います。
これでいい感じにコードジャンプができるようになって、コードを読むのが捗ります!!!

grepで毎回複数の除外フォルダを書くのが面倒くさいからなんとかする

このクラスって何処らへんで使ってるのかな〜??
grepを使って検索すると思います。

grep -r 'User' .

はい
終わらない読み込み
原因はctagsの時と同じで、テキストの多いファイルをたくさん検索してるからです。

シェルに新しいコマンドを作ります。

function grep_projectname() {
  grep -r $1 . --exclude-dir=.git --exclude-dir=node_modules --exclude-dir=db --exclude-dir=tmp --exclude-dir=log --exclude-dir=vendor --exclude-dir=tags --exclude="*.min.js"
}

これでプロジェクトで
grep_projectname 検索したい文字
を使えばいい感じに目的のファイルを見つけ出せると思います。

ホントは--exclude-dirの部分でもっとスッキリ書きたかったのですが、{.git, node_modules}とかやっても僕の環境ではできなかったのです。
誰か分かる人はアドバイスくださいm( )m
オプションの宣言部分とかうまい具合に変更すれば、もっと適用範囲が広がります

今日はこんな感じ