スペースのhighlight

行末スペースを別のhighlightにしたくて、
こんな感じの設定にしていたけど問題があった。

highlight SpecialKey cterm=underline
set list
set listchars=trail:\ ,tab:>-

highlight WhitespaceEOL guibg=red ctermbg=red
match WhitespaceEOL /\s\+$/

:editで開く場合は問題ないが、Unite.vimで開くとSpecialKeyに戻ってしまう。


以下のような設定にしたい

  • :editでもUnite.vimでもファイルを開く
  • 行末スペースのhighlightはlistcharsのSpecialKeyとは別のhighlightにしたい
  • 全角スペースも別のhighlightにしたい
" listcharsからtrailを消す

augroup HighlightSpaces
  autocmd!
  autocmd BufNew,BufRead * highlight WhitespaceEOL guibg=red ctermbg=red
  autocmd BufNew,BufRead * syntax match WhitespaceEOL /\s\+$/
  autocmd BufNew,BufRead * highlight JISX0208Space cterm=underline guifg=lightblue ctermfg=lightblue
  autocmd BufNew,BufRead * syntax match JISX0208Space " "
augroup END

これで問題なさそう。


※ 2013/1/31追記
ファイルを指定せずに起動した時にきかなかった。
highlightも変えた。

" listcharsのtrailを消す

augroup HighlightSpaces
  autocmd!
  autocmd VimEnter,ColorScheme * highlight WhitespaceEOL gui=underline guifg=red guibg=red cterm=underline ctermfg=red ctermbg=red
  autocmd VimEnter,WinEnter,BufNew,BufRead * syntax match WhitespaceEOL /\s\+$/
  autocmd VimEnter,ColorScheme * highlight JISX0208Space gui=underline guifg=lightblue cterm=underline ctermfg=lightblue
  autocmd VimEnter,WinEnter,BufNew,BufRead * syntax match JISX0208Space " "
augroup END


※ 2013/1/31 20:40 追記
ソース内でうまくきかなかった。
matchaddでやったらできた。

" listcharsのtrailはどちらでもよい

function! SetSpacesHighlight()
  highlight WhitespaceEOL gui=underline guifg=red guibg=red cterm=underline ctermfg=red ctermbg=red
  highlight JISX0208Space gui=underline guifg=lightblue cterm=underline ctermfg=lightblue
endfunction

call SetSpacesHighlight()
augroup HighlightSpaces
  autocmd!
  autocmd VimEnter,ColorScheme * call SetSpacesHighlight()
  autocmd VimEnter,WinEnter,BufNew,BufRead * match WhitespaceEOL /\s\+$/
  autocmd VimEnter,WinEnter,BufNew,BufRead * call matchadd("JISX0208Space", " ")
augroup END