vimのconcealを使ってJavadocを奇麗に表示
この記事はVim Advent Calender 2013 118日目の記事です.VACは2011,2012と書いていたのですが気づいたらこんな時期になっていました.まぁまだ2013年度ですし何の問題もないですね.過去2回はよく分からないことを書いてしまったんですが今回は普通です.
- -
最近Javaを書いています.実を言うとJavaを書くときはvim以外にEclipseを併用することが多いんですが,やはりコーディングそのものはvimの方がしやすいと思います.
さて,JavaにはJavadocと言ってソースのコメントを一定の形式(HTML+α)に従って書いておくとそこからドキュメントを生成してくれるものがあります.そういう風にソースのコメントからドキュメントを生成する考えはすてきだなと思いますが,いかんせんJavadocを考えて書かれたコメントは読みにくいです..
いくら生成されるドキュメントが奇麗でもソースのコメントを読む気を減少させるようなのはちょっとあれですね.今回は表示させたくないものを隠したいのでこういうときはvim7.3から正式に導入されたconcealの出番です.concealは指定したsyntaxを隠したり,任意の一文字のように表示させたりします.
以下の内容を.vimrcに書いておくとjavaファイルを読み込んだときにconcealでタグを隠すようになります.
ソース: https://gist.github.com/mfumi/9814303
ちなみに,末尾で定義しているautocmdは本来であるならば何か適当なaurgoupを指定するべきです.やってることはjavadocとhtmlのシンタックスを強制的に書き換えています.本来ならば after/syntax 以下に書くべきかと思いますが個人的にファイルはなるべく作らない主義なので.vimrcに書いています.syntaxの内容は基本的にconceal属性をつけているだけです.あとは一部のハイライトを変更しています.
言い訳ですが久しぶりにsyntaxファイルを見たら何がなんだか分からなかったのでかなり適当です...
さて,これを使うと
これが
こうなります.それなりに見やすくなったと思います.concealの機能はあくまで表示を変えるだけですので本来のテキストは何も変わっていません.もとの内容を表示させたければ:setl conceallevel=0 にします.上の画像のconceallevelは2です.また,concealさせていても現在カーソルがある行の内容についてはconcealされていない状態の物が表示されます.
- -
concealは割と面白い機能だと思いますが,実際に公式で配布されているsyntaxで使用されているのはhelpとtexだけです.helpで使われてるの知らなかったって人は適当なhelpを開いて :set conceallevel=0 してみると面白いと思います.
ちなみにtexは:let g:tex_conceal="admgs" とかしておくと
これが
こうなって数式がそれなりに読めるようになります.まぁ\frac{}とかは駄目ですけど.
- -
ちなみに,concealを使っているプラグインの例としては以下のようなものがあります.
GitHub - tyok/js-mask: More concise JavaScript using Vim's "conceal" feature
javascriptのfunctionをfに変えます.
これが
こう... (#^ω^)
類似のものとしてGitHub - c9s/perl-conceal.vim等があります.
GitHub - Twinside/vim-haskellConceal: Conceal operator for haskell
js-maskより少しconcealする文字が多いhaskell用プラグイン.
これが
若干スタイリッシュになります.
GitHub - chrisbra/csv.vim: A Filetype plugin for csv files
csv.vimはCSVを扱うプラグインですが,syntaxにconcealを使っています.
こういうCSVがあったとして,csv.vimのsyntaxでは区切り文字が|で表されます.
また,:VFold num とすると num列より左の文字がconcealされます.以下はVfold 1 の結果です.
AnsiEsc.vim - ansi escape sequences concealed, but highlighted as specified (conceal) : vim online
ANSIのエスケープシーケンスを含んだテキストを奇麗に表示してくれるプラグインです.
こういうファイルがあったとして,AnsiEsc.vimをインストールして:AnsiEscとすると,
こういう風に表示してくれます.これはgoodですね.(ちなみにファイルの生成元はこれです)
- -
個人的にはconcealでソースの見た目そのものを変えてもかえって混乱するだけなような気がします.concealの使い方としては奇麗にテキスト(ドキュメント)を表示するような目的で使った方が良いと思います.テキストに何か目印になるようなタグや記号が含まれている場合,vimのsyntaxを使って奇麗に色づけできるので,それにconcealを組み合わせることでより奇麗に表示させることができます.まぁ,そもそも表示させたくない文字がテキストに含まれている時点で何かが間違っているのかもしれませんが.
ところで,concealを使ってHTMLをいい感じに表示させるsyntaxとかあっても良いような気がするんですけどどっかにあるんでしょうか.