google-java-formatをEmacsとCotEditorとVimで使う

google-java-formatGoogle Java Styleに合わせてJavaコードを整形してくれるツール。とあるのだが、実際整形してくれるのは長すぎる行の折り返しやインデント調整などだけで、import文のソートや定数名の大文字化などは(まだ)してくれない、微妙なツール。

ビルド

HomebrewなどでJava>=1.7とMavenをインストールしておく。

$ pwd
~/local/src
$ git clone https://github.com/google/google-java-format.git
$ cd google-java-format/
$ mvn clean package --projects core

$ ls core/target/
classes/                                      maven-status/
generated-sources/                            original-google-java-format-0.1-SNAPSHOT.jar
generated-test-sources/                       surefire-reports/
google-java-format-0.1-SNAPSHOT.jar           test-classes/
maven-archiver/

$ cd ~/local/bin
$ cat <<EOF > google-java-format
#!/bin/bash
java -jar ~/local/src/google-java-format/core/target/google-java-format-0.1-SNAPSHOT.jar $@
EOF
$ chmod a+x google-java-format

これで google-java-format コマンドが使えるようになった。

Emacsで使う

~/.emacs.d/init.el に以下設定を追加する。

;; load-pathが通っているところに google-java-format.el を持ってくるか、以下を追加
; (load "~/local/src/google-java-format/core/src/main/scripts/google-java-format.el")

(require 'google-java-format)
(setq google-java-format-executable "~/local/bin/google-java-format")

Javaファイルを開き

  • M-x google-java-format-buffer でバッファ全体が整形される
  • リージョン選択してから M-x google-java-format-region でその選択部分のみ整形される

CotEditorで使う

~/Library/Application\ Support/CotEditor/ScriptMenu/ に以下の内容のファイルを追加する。

#!/bin/bash
#
# %%%{CotEditorXInput=AllText}%%%
# %%%{CotEditorXOutput=ReplaceAllText}%%%

FORMATTED=`~/local/bin/google-java-format -`
echo "$FORMATTED"

CotEditorを起動し直すかスクリプトメニューを更新して、Javaファイルを開きメニューバーから実行すると、開いているファイル内容全体が整形される。

CotEditorスクリプトに選択行番号(or 開始・終了オフセット)を渡せれば、選択範囲のみ整形もできるのだが、できなさそう。

Vimで使う

Javaファイルを開き

  • :%!~/local/bin/google-java-format - でバッファ全体が整形される
  • :%!~/local/bin/google-java-format - --lines 6:20 で指定行(ここでは6行目から20行目まで)が整形される