Hatena::Groupiphone-dev

iOS プログラミングメモ

2011-03-09 (Wed)

アプリ開発をvimでやってる話 01:21  アプリ開発をvimでやってる話 - iOS プログラミングメモ を含むブックマーク

先日 @cocopon に「vimでアプリ開発したいんだけど、どうやってるか教えてくれコノヤロー」とは言われなかったけど、教えて欲しそうにしていたのに教えることが出来なかったので、ここに書いておきます。

まあ問題はプラグインなんだよね。便利プラグイン入れておけば、快適に開発できます。この辺がおすすめ。

cocoa.vim

とりあえずこれ。これは入れた方がいい。

キーマップの追加とか、オムニ補完の強化やらをやってくれる。

Cmd-Rでビルド出来たり\Aで.hと.mを行き来出来たり、色々あるので詳しくはdoc見てね。

Cmdキーのキーマップはgvimじゃないと動かなそうなので、ターミナルラブなんかの人は ftplugin/objc_cocoa_mappings.vim あたり見ながら自由にマッピングを変更するのがよいかと思います。ぼくは ga で.hと.mを行き来できるようにしていたりとかしてますよ。

nn <buffer> <silent> ga :cal<SID>AlternateFile()<cr>

同じく objc_cocoa_mappings.vim 内にある BuildAnd が、自分の環境だとうまく動かなかったので、書き換えてます。これは前書いたのでこちらを参照してください。

あとは、オムニ補完…。実はあんまり使ってないのでわからんのだけど、インサートモードで<C-x><C-o>かF5すれば便利に補完してくれます。辞書がちょっといまいちのように見えるのよねぇ。

AutoComplPop.vim

アプリ開発からは少し離れるけど、開発のお供に超必須な AutoComplPop も入れた方がいい。補完を便利にしてくれるやつ。

テキストを入力したそばから入力内容に見合った候補をリストで表示してくれるので、長いメソッド名とかいちいち全部入力しなくて済むから楽。ま、正直この辺はXcodeより劣る部分ではあるんで、vim大好きっ娘で進むかXcodeに戻るかはこの辺が分かれ道なのかなと思います。

UIKitのクラス名とかメソッド名とかを列挙したファイルを適当な所に置いといて、.vimrc で指定しておくといいです。こんな感じにやってる。

autocmd FileType objc let g:acp_completeOption = '.,w,b,u,t,i,k~/.vim/dict/objc.dict'

確か、所さんあたりが辞書の作り方を解説していたような気がするんだけど見付からない…。

こっちのブログに辞書を置いてくれてる人がいらっしゃるので、ありがたく使わせてもらいましょう。

新しいメソッドとかは自分で追加しないといけないけど、自分の場合は必要になった時に適宜追記したりしています。辞書ファイルを共有する仕組みってどっかに無いのかなー。Dropboxで共有してえ。

snipMate.vim

スニペット機能を実現するsnipMate。ようするにテンプレートですね。

例えば @sel と入力した後にタブキーを押すと、自動で「@selector()」と入力されて()の中にカーソルが移動します。そのまま目的のメソッドを入力してもう一度タブを押すと ) の右側にカーソルが飛びます。入力する内容を連続して書くと「@selタブhogeタブ」で「@selector(hoge)」という結果になります。

もう一例。alloc+タブキーで、「[[ alloc] init];」と入力されて、allocの前の位置にカーソルが移動します。そのままUIViewとか適当に入力してからタブを押すと、今度はカーソルがinitの後ろの位置に移動するので、WithFrameなどと入力してタブキーを押すと最終的にカーソルは ; の後ろにきます。という感じ。こっちも連続して書くと「allocタブUIViewタブWithFrame:CGRectZeroタブ」で「[[UIView alloc] initWithFrame:CGRectZero];」が入ります。文章で説明しづらいね。わかりにくくてすみません。

他にも snippets/objc.snippets を見るとかなり多彩なルールがあることがわかるので、覗いてみるといいでしょう。自分でルールを追加するのもすごい簡単なので、好みにカスタマイズするとスーパーハカーにも近ずけるんじゃないかと思います。snipMateが使いこなせるとかなり楽。

Xcodeについて

プラグインの話は終わって、Xcodeの方で注意していることとか。

Xcodeでクラスファイルを色々グループに分類しても、実在のファイルは全部Classesの下に入っちゃうじゃないですか。これだとターミナルとかから操作するにはちょっとわかりにくいよねーと言うことで、必ず実フォルダを作っています。

始めにプロジェクトを作った時にやるのは Classes の下に controllesr, models, views とフォルダを作って、それをXcodeにドラッグ&ドロップして、そこにクラスを追加していくようにしています。こうするとわかりやすくて何か幸せ。

これはgitとかと連携する場合にも有用だと思ってるんだけど、ベタ置きの人が多い気がするんだよねぇ。他の人はあんま気になんないのかな。

実際好みの問題だと思いますけど、こうしてますよってことで。

以上です。

あとで気付いたことがあれば追加修正するかもしれません。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20110309