#author("2026-03-02T05:27:33+09:00","","")
#author("2026-03-02T05:38:10+09:00","","")
* vimでCSVを気持ちよく編集したくて「tirenvi」を作った話 [#o73998d7]

皆さんは表形式のデータをどう管理していますか?

スプレッドシートは高機能で便利ですが、
- ファイル形式が独自
- Gitでdiffが取りづらい
- マウス操作が前提

といった点が、私には少し扱いづらく感じられました。

やはりテキストデータとして管理して、Gitで差分を確認できる状態にしておきたい。
できればキーボードだけで完結させたい。

となると、csv や tsv が自然な選択肢になります。
理想は「vimで開いて、そのまま快適に編集できること」です。

---

## 既存ツールの検討

vim用のCSVプラグインはいくつか試してみましたが、
- 表示が崩れやすい
- 編集体験がいまひとつ
- 操作が独自すぎる

など、どうもしっくり来ませんでした。

vimにこだわらなければ、visidata という素晴らしいツールがあります。
実際に使ってみましたが、独自の操作体系を覚える必要があり、
「いつものvimの操作感」とは少し違います。

---

## それなら自分で作ろう

不満があるなら、自分で作るのが早い。

そうしてできたのが、neovimプラグイン **tirenvi** です。

https://github.com/kibi2/tirenvi.nvim

---

## tirenviの特徴

- CSV/TSVを構造を保ったまま整形表示
- vimの通常コマンドがそのまま全部使える
- 編集で列構造が壊れても自動補正
- バッファは純粋なテキストのみ
- Undo treeを壊さない

内部では TIR (Tabular Intermediate Representation) という中間表現を使っています。

## デモ

https://github.com/kibi2/tirenvi.nvim/blob/main/demo.gif?raw=true

行編集、列編集、セル編集、すべて「いつものvim」です。

特別な操作を覚える必要はありません。

---
## 仕組み

内部では TIR (Tabular Intermediate Representation) という中間表現を使っています。

flat (csv, tsv, ...)
        ↓ 外部パーサー(tir-csvコマンドなど)
TIR (intermediate representation)
        ↓ tirenvi (neovimプラグイン)
tir-vim (structured buffer view)

保存する時は逆に動きます。

tir-vim → TIR → flat (保存先のフォーマット)

vimの画面に表示されているものがtir-vimそのものです
vimの編集機能を使って自由にtir-vimを編集できます
tir-vim と TIR は完全可逆変換が可能です
編集したtir-vimはそのままTIRに変換可能です
TIRとflat間の偏見は外部パーサーがおこないます
外部パーサーを賢くすれば情報落ちが防げます

## インストール

### lazy.nvim

## 今後

次は Markdown (GFM) のテーブルもvimでサクサク編集できるようにしたいです。

興味があれば、ぜひ試してみてください。

* CSVを壊さずVimで編集したいのでNeovimプラグインを作った [#m25c5167]

皆さんは表形式のデータはどうやって管理していますか?

スプレッドシートアプリは高機能で良いのですが、ファイルは独自形式で扱いにくいです。
私はやはりテキストデータにしてGitで管理して手軽にdiffとかできないと落ち着かないです。
それとマウスを使うのも面倒です。

となるとcsv, tsvとかが候補になってきます。vimでぱっと開いてサクッと編集できるのが理想です。
vimでcsvを編集出来るプラグインを探してみましたがあまり満足できるものはありませんでした。

vimにこだわらなければvisidataという優れたアプリがあるようです。早速使って見ました。ですが使い方を学習しないとなかなかやりたいことができません。難しいです。

不満がある時は自分で作りましょう。で、出来たのがneovimプラグインのtirenviです。

特徴は
- csv, tsvを開くと罫線が揃った表形式で表示する
- vimのコマンドは何でも使えて編集できる
- 自由に編集して普通に保存すれば元のcsv, tsvに編集内容が反映される

(github readme anime)
https://github.com/kibi2/tirenvi.nvim/blob/main/demo.gif?raw=true

csv開いて表形式表示。toggleコマンドで表示切り替え。dd, p で行の移動。セル単位のカーソル移動。aでセル編集。redrawコマンドで再描画。undo/redo。またtoggleをしています。

行編集、列編集、セル編集、すべてvimのコマンドでできます。

https://github.com/kibi2/tirenvi.nvim

興味があれば試してみてください。

lazy.nvim
{
  "kibi2/tirenvi.nvim",
  config = function()
    require("tirenvi").setup()
  end,
}

vim-plug
Plug 'kibi2/tirenvi.nvim'

次はmarkdown gfmに対応したいです。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS