vimでCSVを見やすくするためにコマンドを打つとハイライトを行うようにするスクリプト。
.vimrcに追加する。
ここを参考にしてカーソル位置のカラムのハイライトも行うようにした。
ソース
.vimrc
" csvファイルハイライト「:Csv [数値]」 と打つと、csvファイルで[数値]カラム目のハイライトをしてくれる
function! CSVH(x)
execute 'match Keyword /^\([^,]*,\)\{'.a:x.'}\zs[^,]*/'
execute 'normal ^'.a:x.'f,'
endfunction
command! -nargs=1 Csv :call CSVH(<args>)
" 「:Csvs」と打つと、現在のカラムをハイライトしてくれる
command! Csvs :call CSVH(strlen(substitute(getline('.')[0:col('.')-1], "[^,]", "", "g")))
" Csv系のコマンドのハイライトを消す
command! Csvn execute 'match none'
使い方
指定したNカラムをハイライト→:Csv 2
現在カーソル位置のカラムをハイライト→:Csvs
ハイライトした色を消す→:Csvn
※Csv 2の「2」は0から数えたカラム位置。
aaa,bbb,ccc,dddというデータがあった場合、cccをハイライト表示する。
コマンド名は好きに変えられるので使いやすいように。
(vimでユーザコマンドを作るときは最初の文字が大文字じゃなくてはならないので注意)
リアルタイムでカーソル位置のカラムをハイライトするようにしようと思ったけど思いつかなかったのでここで終わり。なんかいい方法あるかな?
追記
簡単ではあるけどリアルタイムでカーソル位置ハイライトができたので追記。
「:Csva」と打つとリアルタイムでハイライトしてくれるようになります。もう一度打つと停止(色はそのまま残る)
" 「:Csva」と打つと、リアルタイムに現在のカラムをハイライトにしてくれるもう一度打つと停止
function! CSVH_SAVE_CURSOR()
let g:CsvaFlg = get(g:, 'CsvaFlg', 0)
if g:CsvaFlg == 1
execute 'match Keyword /^\([^,]*,\)\{'.strlen(substitute(getline('.')[0:col('.')-1], "[^,]", "", "g")).'}\zs[^,]*/'
endif
endfunction
augroup CsvCursorHighlight
autocmd!
autocmd BufWinEnter,InsertLeave,CursorHold * call CSVH_SAVE_CURSOR()
augroup END
function! CSVA()
let g:CsvaFlg = get(g:, 'CsvaFlg', 0)
if g:CsvaFlg == 0
let g:CsvaFlg = 1
else
execute 'match none'
let g:CsvaFlg = 0
endif
endfunction
command! Csva :call CSVA()
好みで.csv形式のファイルが開いた時に自動で「csva」コマンドを実行するのを入れてもいいかもしれない
autocmd BufNewFile,BufRead *.csv execute'Csva'
指定したカラムのみを表示するコマンドもあるのでこちらも合わせてぜひ。