Vim の conceal を使って Unicode エスケープシーケンスの表示を見やすくする

この記事は Vim Advent Calendar 2012 91日目の記事になります。



          /: : : : : |: : : : : : : : : : : : : : : : : : : :ヽ 
          : : : : : : : |: : : : : : : : : : : : : : : : : :ヽ: : :ヽ 
        : : : : : : : : : {: : : : : : : : ヽ: : : : : : : : : :ヽ: : ヘ 
         /: : : : : : : :{: :ハ: : : : ヽ: : : ヽ: : : : : : :ヽ: : ヘ : ハ 
.       /: : : : : : : : |::,' ': {: : : |: : : : ',ヽ: : ヽ:',: :!: : : }7 ハ 
       : : : : |: : /:/!:{  ',: !: : :',ヽ: : : ', \: :',:ヽ|: : : :}7:} } 
      |: : : : |: : |/ |::|   ,!ヽ: :', \: }_,ィ_ヽ}、::| : : : |::: :|ゝ 
      |: : : : {: : | ≧ミ_,{ \{ `¨Vイ:c、ヽヽ|: : |: :!::: :|\ 
.       /: : :!: ヘ: :', 〃r'c、`   ゛   {:i:::::ハ  |: : |: :|:::: :!   3月に入って
     /, イ: ト、:ト、{ {:i::i::}       弋_少  |: :,'|: :|::::: |    Advent Calendar が
   〃ヽ/ |: : ヘ: :',\ 弋少       /i/ハヽ |: :,:: : }:::::|:!    終わると思った? 
   {  V |: : ::::\ヽ、/i/ハ    '        |: ,::: :,i::/!リ 
   ヘ  ヽ、、: ::::::人`     __. - ≦}    イ:,!:: /|/ |′     残念!まだ続いています!
    ゝ、  `ヽ、::l::{:> .   ゝ _ ノ   イリ!ハ:// 
    ノ、 ヽー  ヒ‐-、::::::Vヽ>  . _ .  イハル′/// 
 //  }  } r―‐ ヽ }ヽ7 \ `ー _ イ /、 
.( .〈  |  ヽ ー- __レ }`丶、   //_ イ  `}ヽー-- 、 
  ヽ ヽ )ヽ_ )ー´ /  ヘ:::::::::ヽ、_//, -‐――' '-,  / ハ 
   ヽ _)、\_ /   ヘ::::::::::y':::::}_::::::::::::::::::::/  /  | 

[まえがき]

Vim の conceal にはマッチした syntax に対して表示する文字を設定する事が出来ます。
これを利用して、

syntax match unicode_escape_a /\\u0061/ conceal cchar=a

このような syntax を設定すれば、

\u0061

という Unicodeエスケープシーケンスが

a

こんな感じに cchar に設定した文字で表示する事が出来ます。


と、いう事でこれを利用して Unicode エスケープシーケンスの表示を変更するプラグインを簡単につくってみました。


[インストール]

:NeoBundle "osyo-manga/vim-hideout"

[対応している文字]

  • 英数字、記号
  • カタカナ
  • ひらがな
  • 常用漢字(約2000文字)

※マルチバイト文字はエンコーディングutf-8 の場合にしか対応していません。

[使い方]

" 表記を変える
:HideoutOn

" 表記を戻す
:HideoutClear

" 表示したい文字をユーザ側で設定する
" 例)虎視眈々も表示したい
let g:hideout_unicode_user_text = "虎眈々"

" 重く感じる場合は、デフォルトの漢字を非表示に設定
let g:hideout_kanzi_disable = 1

" 設定した後はキャッシュをリフレッシュする
:HideoutRefreshCache



こんな感じで簡単にですがつくってみました。
常用漢字を含めると syntax を2000個以上設定しているんですがわたしの環境だと思ったよりもレスポンスは悪くない感じ。
最低限の機能だけを実装したのでその他欲しい機能があれば教えて下さい。

[注意]

wrap が設定してあると改行箇所はそのままなので次のように左側に余白が出来てしまいます。



↓ :HideoutOn


現状はどうしようもなさそう。