@kyanny's blog

My thoughts, my life. Views/opinions are my own.

csv-mode.el

Emacs の CSV 用メジャーモード。シンタックスハイライトだけでなく、 CSV 編集に便利な機能がいくつかある。マニュアルを読んでも使い方がよくわからなかったが、何度か試して理解できた。

特に csv-kill-fields は感動した。「CSV ファイルの特定の列のデータだけ抜き出したい」ということはよくあり、いつも AWK でがんばるか、 Excel/Open Office 等を経由するか、はたまた Perl/Ruby のワンライナーでやっつけるか、など多少の手間をかけてしまっていた。

  • C-c C-k のフィールド指定は "1 2" とか "1,3" とか "1-3" と入力する。ハイフン入りのときだけ range 指定扱い。
  • 特定の列だけ消したいときは C-c C-k で、逆に特定の列だけ取り出したいときは C-c C-k のあと C-c C-z で貼り付ければよい。
  • C-c C-a は見やすく整形用、 C-c C-u で戻せる。
  • C-c C-t は行列入れ替え。どういうとき役に立つかは思いつかないが。
  • C-M-f C-M-b で列単位で前後に移動。空白を含むデータがあるとき便利。 C-M-k で次の列のデータだけ kill できてこれも便利。 yank は普通にやればい。

感動したのと将来使い方を忘れたときのためにアニメーション GIF ムービーを撮っておこうかとも思ったが、面倒くさいのと結構練習したのでもう忘れないだろうと思いやめておく。

追記: やっぱりムービーを撮った。

blog.kyanny.me

存在を知ったきっかけはコマンドラインで CSV を整形するシンプルな方法は? — ありえるえりあを読んだからだった。このスクリプトのほぼ真似だが、 CSV ファイルの指定した列のデータだけを標準出力に表示する Emacs Lisp スクリプトを書いてみた。

csvcol