【Vim】新機能“conceal”構文属性を使う


Vim 7.3 の新機能“conceal”の使い道がよくわからなかったのだが、こんな使用例があるようだ。

js-mask – More concise JavaScript using Vim’s “conceal” feature : vim online
http://www.vim.org/scripts/script.php?script_id=3324

Javascript では“function(){}”をひたすら重ねていくのでコードが冗長になりがち。それを見た目なりときれいにしてしまおうというのがこのプラグイン。

例えばこんなコードが、

// 1~5の合計「15」と表示する
(function(){
    alert(
        (function( ary ){
            function sum( a ) {
                var s = 0;
                a.forEach( function( i ){ s += i } );
                return s;
            }
            return sum( ary );
        })( [ 1, 2, 3, 4, 5 ] );
    );
})();

こんな風に表示される。「function」という文字列が「?」一文字で表されるので、読みやすい?気もする。表示されるだけで、コード自体がいじられるわけではないのがポイント。

110201-0001.png

プラグインの中身自体は非常に簡単だ1

syntax clear javaScriptFunction
syntax match javaScriptFunction /\<function\>/ nextgroup=javaScriptFuncName skipwhite conceal cchar=𝔽
syntax match javaScriptFunctionNoParams /function()/ conceal cchar=𝔽


hi link javaScriptFunctionNoParams javaScriptFunction
hi! link Conceal javaScriptFunction

set conceallevel=2

“conceal”したい部分を正規表現で指定し、代替文字列を cchar オプションで指定しているだけである。

さらにこの機能をアグレッシブに使用しているのが TeX のシンタックス定義ファイル。

Using the conceal Vim feature with LaTeX « Björn Winckler’s Blog
http://b4winckler.wordpress.com/2010/08/07/using-the-conceal-vim-feature-with-latex/
syntax/tex.vim and conceal support – vim_dev | Google グループ
http://groups.google.com/group/vim_dev/browse_thread/thread/f1a38e084967c750?pli=1

let g:tex_conceal='adsmg'
set conceallevel=2

この 2 行を .vimrc に書き加えるだけで、ソースの見た目が全く変わってしまう。

“conceal”のテスト
before after
110201-0002.png 110201-0003.png

カラースキームとフォントの選択を慎重に行わないと、読みにくくなるだけな気もする。例によって、多用は禁物だ。


  1. プラグインでは cchar として「𝑓」(文字コード 0x1D453)が指定してあるが、うちの環境ではうまく表示できなかった。そのため代わりに「𝔽」(文字コード 0x1D53D)を使ってある。 

コメントを残す