Vim Advent Calendar 2013 150日目:Vim で任意の列をハイライトする

この記事は Vim Advent Calendar 2013 150日目の記事になります。
参加者募集中です。


Vim には \%v で任意の表示列目にマッチする正規表現があるのですがそれを利用して任意の列をハイライトするようなスクリプトを簡単に書いてみました。

" 使い方
"
" ハイライトを有効
" {列数}HlColumnsOn {ハイライトグループ}
"
" ハイライトを無効
" {列数}HlColumnsOff {ハイライトグループ}
"
" Example
" 81 列目を "Search" でハイライト
" 81HlColumnsOn Search

" 自動で 81 列目をハイライトする
augroup hi-clumns
	autocmd!
	autocmd WinEnter * :81HlColumnsOn ErrorMsg
augroup END


function! s:hl_clumns_on(col, ...)
	let group = get(a:, 1, "CursorColumn")
	let group = group == "" ? "CursorColumn" : group
	if !exists("w:hl_clumns_id" . group . a:col)
		let id = matchadd(group, '\%' . a:col . 'v')
		if id == -1
			return
		endif
		let { "w:hl_clumns_id" . group . a:col } = id 
	endif
endfunction

function! s:hl_clumns_off(col, ...)
	let group = get(a:, 1, "CursorColumn")
	let group = group == "" ? "CursorColumn" : group
	if exists("w:hl_clumns_id" . group . a:col)
		call matchdelete(eval("w:hl_clumns_id" . group . a:col))
		unlet { "w:hl_clumns_id" . group . a:col }
	endif
endfunction

command! -nargs=? -count -complete=highlight
\	HlColumnsOn  call s:hl_clumns_on( <count>, <q-args>)

command! -nargs=? -count -complete=highlight
\	HlColumnsOff call s:hl_clumns_off(<count>, <q-args>)

81列目をハイライト
http://i.gyazo.com/d451bfef9d3626b4bbb7105f68ff85cf.png


簡単に書くつもりがちょっと複雑になってしまった。
『1行は80文字まで』みたいなコーディング規約がある場合に目印として使用できそう。