XIONCC

vimを使ってCSVファイルを編集する

エンジニアをやっているとCSVファイルを編集する作業はしょっちゅう訪れます。
エクセルを使うことが多いのですが、CSVファイルを編集するためにエクセルを使うというのはとても仰々しい印象を僕は受けます。
起動も動作も重いですし、いくつものファイルを開いて行き来するのも億劫になってしまいます。
出来れば軽いテキストエディタで編集したいですよね。
いや、是非vimで編集したいですよね
テキストエディタでCSVを整形してカラムの幅を整えてくれるものもあります。便利そうです。
でも、テキストエディタをいちいち切り替えるのも億劫ですよね。
できればコマンドラインから使えると幸せですよね。

Vimwiki でCSVの特定列をハイライトする関数が紹介されています。
(潰れてました。 vim-users.jp さんから引用します。)

" csvファイルハイライト「:Csvhl [数値]」 と打つと、csvファイルで[数値]カラム目のハイライトをしてくれる
function! CSVH(x)
execute 'match Keyword /^\([^,]*,\)\{'.a:x.'}\zs[^,]*/'
execute 'normal ^'.a:x.'f,'
endfunction
command! -nargs=1 Csvhl :call CSVH(<args>)

存在は知っていたのですが、もう少し何とか、、、と思っていた僕の頭が固かった気がします。
これとEasyMotion を使えばかなり自由にCSVを編集できますね。

「え?カラムはわかるけど整形されたわけではない?」

そこは「心の目」で補完しましょう。

 


追記:
@rita_cano_bika さんの記事 のほうが便利ですね。 「:Csvs」と打つと、現在のカラムをハイライトしてくれます。

" 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'