viでJava開発:Javaのためのvi設定方法

Ryan Brase(Builder.com) 翻訳校正:原井彰弘
2007-12-19 14:20:01
  • このエントリーをはてなブックマークに追加

メソッドの折りたたみ

 クラスは小さく単純に保ち、プログラムの複雑さは巨大なメソッドではなくクラスの階層で表すのがよいプラクティスであると言われている。しかし残念なことに、現実には複雑すぎて管理不能になってしまったクラスというものも存在するだろう。

 IDEでは、左側の細長いペインにメソッドの一覧を表示することで、この長いソースコードの問題にある程度対処している。一方、viではプログラムのブロックを折りたたむ機能が提供されている。この機能は「メソッドの折りたたみ」(method folding)と呼ばれており、インデントされたブロックに含まれているコードを、すべて非表示にすることができる。この折りたたみは、~/.vimrcファイルにset foldmethod=indentという行を加えることで有効になる。

 折りたたみ機能を有効にすると、:set foldlevel=0コマンドでソースファイルを大幅に圧縮して表示することが可能になる。foldlevelが0にセットされると、viはまったくインデントされていない行のみを表示するのである。Javaの場合は、packageやimport文とクラスやインタフェースの定義のみが表示されることになるだろう。ここでfoldlevel=1を指定すると、インデントされていない行のほかに、1つインデントが行われている行も表示されるようになる。このレベルでも表示される行はあまり多くはないが、メソッドのシグネチャは表示されるだろう。折りたたまれている特定の行を展開して、非表示になっていた内容を表示するには、折りたたまれている行でz0をタイプすればよい。

 メソッドの折りたたみは、foldlevelの設定を行うことで簡単に有効と無効の切り替えができる。私はデバッグ時にはこの機能を使うが、新しいコードを書くときには使わない。あなたのワークスタイルに合わせた使い方を見つけて欲しい。

コンパイルとクイックフィックス編集機能

 IDEで行えるのは編集だけではない。IDEはコンパイル環境でもあるのだ。viには、外部のコンパイラを呼び出して、出力されたメッセージをパースする高度な機能がある。多くのJavaプロジェクトでは現在、簡単にスクリプトを記述できるAntがビルド環境として利用されていると思う。ここでは、Ant固有の設定を何行にもわたって.vimrcに加えることはせずに、vimAntという別のスクリプトを作成した。以下にそれを示す。

#!/bin/sh
/usr/local/bin/ant -Dbuild.compiler.emacs=true -quiet -find build.xml ${*:-classes} 2>&1 | grep '\[javac\]'

 このスクリプトは、Antの実行ファイルにパラメータを与えて呼び出し、コンパイラの出力のみを出力するようフィルタリングを施したものである。この段階で、viからAntを呼び出す準備はほぼ完了である。あとは、次の行を追加するだけでよい。

set makeprg=vimAnt
set efm=\ %#[javac]\ %#%f:%l:%c:%*\\d:%*\\d:\ %t%[%^:]%#:%m, \%A\ %#[javac]\ %f:%l:\ %m,%-Z\ %#[javac]\ %p^,%-C%.%#

 システムパスにvimAntスクリプトが含まれていれば、:makeコマンドでコンパイルを開始できる。コンパイルでは、カレントディレクトリおよびその親ディレクトリが再帰的に調べられ、build.xmlが見つかるとclassesターゲットが呼び出される。この際、エラー出力は自動的にパースされる。

 コンパイル中にエラーが発生した場合は、クイックフィックスモードを用いてエラー箇所にジャンプし、簡単に修正することができる。:cnコマンドを利用すると、表示中のファイルに関係なく次のエラー箇所にジャンプできる。また、:ccコマンドでは、現在のエラーに関するコンパイラ出力を表示することができる。さらに、:clコマンドを用いると、プロジェクトのすべてのエラーが一覧で表示されるので、どのエラーにも簡単にアクセスすることが可能だ。エラーを修正したら、:makeでビルドの失敗した部分をもう一度実行しよう。

この記事は海外CNET Networks発のニュースをシーネットネットワークスジャパン編集部が日本向けに編集したものです。海外CNET Networksの記事へ

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]