vimでスペースやTabなどの見えない文字を表示させる方法
旧サブブログ「Life is Try and Error」(2013 年 3 月 31 日で閉鎖予定)の過去記事(2006-11-07 掲載)の再掲です。以下、過去記事そのまま・・・と思いましたが、リンク先が既に消滅している場合は、注釈をつけています。
タブ(tab)と行末(eol)を表示させるだけなら、「:set list」が一番簡単。
スペースを表示させるには、色々な方法があるみたいだけど、私が設定した方法は以下。全角スペースと行頭の半角スペースを表示させることができる(参考:コアテクの路地: vim: 見えない文字を見えるようにする [2013/3/30 追記:リンク先消滅])。
"行頭のスペースの連続をハイライトさせる "Tab文字も区別されずにハイライトされるので、区別したいときはTab文字の表示を別に "設定する必要がある。 function! SOLSpaceHilight() syntax match SOLSpace "^\s\+" display containedin=ALL highlight SOLSpace term=underline ctermbg=LightGray endf "全角スペースをハイライトさせる。 function! JISX0208SpaceHilight() syntax match JISX0208Space " " display containedin=ALL highlight JISX0208Space term=underline ctermbg=LightCyan endf "syntaxの有無をチェックし、新規バッファと新規読み込み時にハイライトさせる if has("syntax") syntax on augroup invisible autocmd! invisible autocmd BufNew,BufRead * call SOLSpaceHilight() autocmd BufNew,BufRead * call JISX0208SpaceHilight() augroup END endif
「:h listchars」を読むと、他にも色々特殊文字があるようなので設定する。
"特殊文字(SpecialKey)の見える化。listcharsはlcsでも設定可能。 "trailは行末スペース。 set list set listchars=tab:>-,trail:-,nbsp:%,extends:>,precedes:<
trailを可視化するのは便利。行末の余分なスペースがわかるのみならず、新規行だとスペースをいくつ入力しているかわかるのは良い。listcharsには他にeolがあって、デフォルトでは「$」になっているが、上記設定をすると表示されない。listcharsを指定すると明示的に指定しない限り表示されないようだ。trailsとextendsさえ設定してあれば不要だと思うけど。