LoginSignup
11
8

More than 5 years have passed since last update.

vimでCSVの特定カラムでハイライトを行う

Last updated at Posted at 2015-10-21

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'

指定したカラムのみを表示するコマンドもあるのでこちらも合わせてぜひ。

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8