vim-clang-formatを入れよう

個人開発で使っていたObjective-Cのコードがコーディング規約なんてあったもんじゃないレベルの汚さだったのでフォーマットしたい!
だけど、Xcodeはフォーマッターがなくてインデントしか揃えてくれない。どうすれば・・・。
そうだ!もしかしたらViimのプラグインにあったりするんじゃ・・・あったよ!
使うっきゃねぇ!
ということで入れました。MacVimとvim-clang-format。

MacVimを導入

macvim-kaoriyaのリポジトリからリリース版の最新dmgをダウンロードしてきて、applicationフォルダにぶち込む。

dein.vimの導入

実は初めてのプラグイン導入でドキドキ。
参考サイトを見てるとダークパワーとかいっぱい書いてあったから危ないやつかと思って最初躊躇した。
MacVimと同じくdein.vimリポジトリを参考にインストール。
英語苦手だからっていってちゃんと説明見ないとどこかで引っかかるので注意する。
たとえば

Note: {directory} is just placeholder.

波括弧で囲まれている部分はディレクトリを指すので対応したディレクトリをちゃんと指定してあげること。
コーテーションがいるとかいらないとかはどこかでエラーが発生するのでやってない方を試せばいずれ当たる。そこは大した問題ではない。
3まで終わらせればdein.vim自体のインストールは終了。

clang-formatのインストール

Homebrewを使ってインストールするので、公式サイトを参考にインストールする。
これに関しては数多に解説があるので迷ったら調べる。

Homebrewがインストールできたら

brew install clang-format

でclang-formatをインストールする。

おそらくclangも同時にインストール・アップデートした方が良いんだろうけど、一応Macに入ってることとリポジトリの追加設定が必要だったのが面倒でパス。

vim-clang-formatのインストール

ようやく最終目的vim-clang-formatのインストール。
ここで先ほどインストールしたdein.vimの出番。
vim-clang-formatに必要な2つのプラグインをインストールする。
必要なのは

vim-operator-user(highly recommended) vimproc.vim(recommended in Windows)

の2つ。
当然vim-clang-formatも必要になるので計3つ。
これらをdein.vimを使ってインストールする。
インストール方法は.vimrcに

call dein#add('rhysd/vim-clang-format')
call dein#add('kana/vim-operator-user')
call dein#add('shougo/vimproc.vim', {'build" : 'make'})

を入力してdein.vimを使ってインストールするだけ。
あとはおなじみvim-clang-formatのリポジトリvimで使う時用の設定をしてあげればOK。
うまくかいつまんで設定してあげると、':w'で保存するときに自動でフォーマットが効くようになります。

この辺に関して一番詳しく解説したかったけど、ここが一番分からなくて真似しただけになってしまってる。 参考にしたのはこちらのサイト

既知の問題

インストールはできて、これで一応フォーマットできるようになったものの独自設定が効かない。 これはvim-clang-formatでもclang-formatでも同じ現象。 ここを参考に、 clang-format -style=Google -dump-config > .clang-formatとして、 clang-format -i -style=file hoge.mとすると

Configuration file(s) do(es) not support Objective-C: /.../.clang-format

と表示されフォーマットできない問題が発生している。 出したままで一切いじってないにも関わらずこうなる。 ちなみに、clang-format -i -style=Google hoge.mとすると問題なくフォーマットできる。不思議。

おわりに

というわけで、MacVimのインストールとvim-clang-formatのインストールでした。
今回Macでの導入方法を書きましたが、ClangFormat自体はMacでなくても導入できるので、
Windowsにも導入しておけば「このコード汚ねぇ」ってなった時でもWindowsからフォーマットかけられるので安心ですね。 次はSwiftのフォーマッターを入れたいので、実行できたら再度記事にする予定です。