2016年02月07日

Meryのアウトライン機能で複数の項目を(ツリー構造ではなく)並列に表示する

mery_outline.gif テキストエディタのMeryといえば、多くの言語のソースコード色分けなど、プログラマーにとってうれしい機能が充実した非常に便利なツールですが、その機能の一つが、デフォルトのプラグインとして用意されているアウトラインです。

 アウトラインは、編集中のソースコードの全体的な構成をいわば要約として、俯瞰しやすいツリー形式で別ペインに表示し、ツリー内の項目をクリックすると該当の行にジャンプすることができる機能です。

 デフォルトでは、ある程度ソースコードのインデントの状態を基準に項目の作成・表示を行っているようですが、どのような行をツリーの項目として拾うかを、ユーザ指定のテキストあるいは正規表現で定義することもできます。

 ただ、このユーザ定義で指定する場合に、個々の条件を一つずつ入力していくと、上にあるものが下のものの「親」になるようにツリーが構成されてしまうため(アウトライン機能なので仕方ないですが)、ソースコードや言語の文法の意味を反映したツリー構造になってくれないこともあります。また、アウトラインのペインを開いた直後はツリーが閉じた状態になっていることが、私にとってはちょっと不便だったりします。

 この不満は、私の機能の使い方が下手なことが原因である可能性もありますし、ソースコードの意味をちゃんと読み取ってくれというのも無理な話です(アウトラインルールをユーザ定義している場合は特に)。

mery_outline_setting.png 今日はこれの解決(回避)方法を一つ思いついたので書いておきます。それは、すべての項目定義を一つにまとめて書いてしまうというやり方です。正規表現には「複数のマッチング条件の中でどれかがヒットすればOK」という書式があるのでそれを使うのです。

 具体的には、例えばHSPの場合であれば、以下のような正規表現を一番目の定義として入力してそれで終わりです。

^\s*(\*|#mod|#deffunc|#defcfunc|;|//|/\*)


mery_outline_2.png この設定でアウトラインを実行すると、ラベル・モジュールの先頭・ユーザ定義命令/関数の先頭・コメント、である行が列挙されます。アウトラインルールを一つしか設定していないので、アウトライン項目同士の親子関係は発生せず、表示もツリー形式にはならずにすべての項目がいわば展開された状態で羅列されます。

 すべての項目がびろーんと表示されるという動作は、一見うざいように思えますが、アウトラインはそもそもファイル全体を俯瞰するための要約なので、うざいと感じる時は、一つのファイルにソースを詰め込みすぎているか、もしくは表示項目を欲張りすぎているかのどちらかだと思います。

 表示がツリー形式でないので、項目同士の関係や意味を反映するもくそもなくなってしまいますが、少なくとも自分がソースコードを編集する時には、項目の字面を見れば一目瞭然なので問題は感じませんね。