"CSVI" - Terminal CSV Editor

<English> / <Japanese>
As of version 1.6.0, CSView has been renamed to CSVI to avoid conflicts with other tools using the same name.
CSVI is a terminal-based CSV editor for Linux and Windows.
macOS is also supported experimentally, as the developer does not have direct access to a macOS environment.
→ You can try it from v1.13.0
✨ Key Features
-
Minimal changes on save
CSVI keeps the original formatting for every unmodified cell: quotes, line endings (LF/CRLF), BOM, encoding, and field/record separators.
Only actual edits are saved—making it ideal for clean diffs and safe edits to production data.
-
vi-style and Emacs-style keybindings
Move the cursor like in vi, and edit cells like in Emacs.
-
Reads from both file and standard input
You can pipe CSV data into CSVI or open a file directly.
-
Fast startup and background loading
Opens large files quickly without blocking the interface.
-
Visual feedback for edits
Modified cells are underlined.
Press u
to undo a cell's change and restore its original value.
-
Shows original format details
The bottom line of the screen shows technical info: quoting, encoding, field separators, and more—just as they appeared in the original file.
-
Flexible encoding support
- UTF-8 (default)
- UTF-16
- Current Windows code page (auto-detected)
- Any encoding from the IANA registry using
-iana NAME

Video by @emisjerry
Install
Manual Installation
Download the binary package from Releases and extract the executable.
⚠️ Note: The macOS build is experimental and not yet tested.
Please let us know if you encounter any issues!
Use "go install"
go install github.com/strangeassa/csvi/cmd/csvi@latest
Use scoop-installer (Windows only)
scoop install https://raw.githubusercontent.com/hymkor/csvi/master/csvi.json
or
scoop bucket add hymkor https://github.com/hymkor/scoop-bucket
scoop install csvi
Usage
$ csvi {options} FILENAME(...)
or
$ cat FILENAME | csvi {options}
Options
-help
this help
-h int
the number of fixed header lines
-c
use Comma as field-separator (default when suffix is .csv
)
-t
use TAB as field-separator (default when suffix is not .csv
)
-semicolon
use Semicolon as field-separator
-iana string
IANA-registered-name to decode/encode NonUTF8 text
-16be
Force read/write as UTF-16BE
-16le
Force read/write as UTF-16LE
-auto string
auto pilot (for testcode)
-nonutf8
do not judge as UTF-8
-w widths
set the widths of cells (e.g., -w 14,0:10,1:20
to set the first column to 10 characters wide, the second column to 20 characters wide, and all others to 14 characters wide)
-fixcol
forbid insertion or deletion of cells (disables i
, a
, and x
)
-p
Protect the header line
-readonly
Read Only Mode
Key-binding
- Move Cursor
h
,Ctrl
-B
,←
,Shift
-TAB
(move cursor left)
j
,Ctrl
-N
,↓
,Enter
(move cursor down)
k
,Ctrl
-P
,↑
(move cursor up)
l
,Ctrl
-F
,→
,TAB
(move cursor right)
<
(move the beginning of file)
>
,G
(move the end of file)
0
,^
,Ctrl
-A
(move the beginning of the current line)
$
,Ctrl
-E
(move the end of the current line)
- Search
/
(search forward)
?
(search backward)
n
(search next)
N
(search next reverse)
- Edit
i
(insert a new cell before the current one)
a
(append a new cell after the current one)
r
(replace the current cell)
d
,x
(delete the current cell)
w
(write to a file or STDOUT('-'
))
o
(append a new line after the current one)
O
(insert a new line before the current one)
D
(delete the current line)
"
(enclose or remove double quotations if possible)
u
(restore the original value of the current cell)
y
(copy the value of the current cell to kill-buffer)
p
(paste the value of kill-buffer to the current cell)
- Repaint:
Ctrl
-L
- Quit:
q
or ESC
Readline with SKK[^SKK]
When the environment variable GOREADLINESKK is defined, go-readline-skk is used.
- Windows
set GOREADLINESKK=SYSTEMJISYOPATH1;SYSTEMJISYOPATH2...;user=USERJISYOPATH
- (example)
set GOREADLINESKK=~/Share/Etc/SKK-JISYO.L;~/Share/Etc/SKK-JISYO.emoji;user=~/.go-skk-jisyo
- Linux
export GOREADLINE=SYSTEMJISYOPATH1:SYSTEMJISYOPATH2...:user=USERJISYOPATH
(Note: ~
is automatically expanded to %USERPROFILE%
on Windows, even in cmd.exe
.)
[^SKK]: Simple Kana to Kanji conversion program. One of the Japanese input method editor.
Use as a Go package
package main
import (
"fmt"
"os"
"strings"
"github.com/mattn/go-colorable"
"github.com/strangeassa/csvi"
"github.com/strangeassa/csvi/uncsv"
)
func main() {
source := `A,B,C,D
"A1","B1","C1","D1"
"A2","B2","C2","D2"`
cfg := &csvi.Config{
Mode: &uncsv.Mode{Comma: ','},
}
result, err := cfg.Edit(strings.NewReader(source), colorable.NewColorableStdout())
if err != nil {
fmt.Fprintln(os.Stderr, err.Error())
os.Exit(1)
}
// // env GOEXPERIMENT=rangefunc go run example
// for row := range result.Each {
// os.Stdout.Write(row.Rebuild(cfg.Mode))
// }
result.Each(func(row *uncsv.Row) bool {
os.Stdout.Write(row.Rebuild(cfg.Mode))
return true
})
}
Release Note
Acknowledgements
Author