Sheets 是一款基于终端的电子表格 TUI(终端用户界面)工具,使用 Go 编写,用于直接在终端中查看和编辑 CSV 文件。它提供 vim 风格的导航键位、公式支持、可视选择、搜索、撤销/重做以及命令模式,所有操作都在终端内完成。
安装方式
使用 Go 安装:go install github.com/maaslalani/sheets@main
也可从 GitHub Releases 下载预编译二进制文件。
安装后可用 sheets --help 验证安装。
主要能力
TUI 交互编辑
启动 TUI:sheets budget.csv
支持从标准输入读取:sheets <<< "ID,Name,Age\n1,Alice,24\n2,Bob,32\n3,Charlie,26",或通过管道:cat data.csv | sheets
非交互式读写
读取指定单元格:sheets budget.csv B9,输出单元格值。
读取单元格区域:sheets budget.csv B1:B3,按行输出。
修改单元格(非交互):sheets budget.csv B7=10,可同时设置多个:sheets budget.csv B7=10 B8=20
导航键位
基本移动使用 h/j/k/l,gg 跳到顶部,G 跳到底部,5G 跳到第 5 行,gB9 跳到单元格 B9,0 跳到第一列,^ 跳到行内首个非空列,$ 跳到行内最后一个非空列,H/M/L 跳到可见区域的顶部/中部/底部行,ctrl+u/ctrl+d 半页上下移动。
视图对齐:zt/zz/zb 将当前行对齐到窗口顶部/中部/底部。
搜索:/ 向前搜索,? 向后搜索,n 重复上次搜索(向前),N 重复上次搜索(向后)。
标记与跳转列表:ma 在当前单元格设置标记 a,'a 跳到标记 a,ctrl+o 跳转列表后退,ctrl+i 跳转列表前进。
编辑键位
插入模式:i 编辑当前单元格,I 从单元格开头编辑,c 清空单元格并开始编辑,ESC 退出插入/可视/命令模式,enter 提交并下移,tab 提交并右移,shift+tab 提交并左移,ctrl+n 提交并下移,ctrl+p 提交并上移。
行操作:o 在下方插入行并开始编辑,O 在上方插入行并开始编辑,dd 删除当前行。
复制/剪切/粘贴:y 复制当前单元格,yy 复制当前行,x 剪切当前单元格或选区,p 粘贴当前寄存器内容。
撤销/重做:u 撤销,ctrl+r 重做,U 撤销所有更改,. 重复上次更改。
可视模式
按 v 进入单元格选择可视模式,按 V 进入行选择可视模式。按 = 在选定区域后插入公式(例如 =|(B1:B8))。
命令模式
按 : 打开命令提示符。可用命令包括::w 保存文件,:w path.csv 另存为新文件,:e path.csv 打开另一个 CSV 文件,:q 退出,:wq 保存并退出,:goto B9 跳到单元格 B9,:B9 跳到单元格 B9(简写)。
使用方式
创建并编辑 CSV
echo "Name,Amount,Category" > budget.csv 然后 sheets budget.csv
从其他命令管道输入
psql -c "COPY (SELECT * FROM sales) TO STDOUT WITH CSV HEADER" | sheets
脚本中更新单元格
#!/bin/bash sheets report.csv D4=95000 D5=102000 D6=88000
脚本中提取区域进行处理
#!/bin/bash values=$(sheets data.csv B1:B10) 然后可用循环累加求和。
脚本中读取特定单元格
#!/bin/bash budget_total=$(sheets budget.csv C15) 可据此做条件判断。
Go 集成
可用 Go 程序生成 CSV 并调用 sheets 打开:通过 os/exec 执行 sheets 命令。
非交互式读取单元格与区域的 Go 示例:使用 exec.Command("sheets", csvFile, cell).Output() 获取输出并处理。
适用场景
- 在终端中快速查看、编辑 CSV 文件
- 与管道、脚本结合,实现 CSV 的读取与批处理更新
- vim 用户可直接使用熟悉的键位高效操作表格
- 在 Go 应用中生成 CSV 后调用 TUI 查看或编辑
限制与注意事项
- Sheets 专为 CSV 格式设计,其他格式需先转换。例如 Excel 转 CSV:python3 -c "import pandas as pd; pd.read_excel('data.xlsx').to_csv('data.csv', index=False)"
- 编辑后需在命令模式使用 :w 保存,或 :wq 保存并退出;直接按 q 或 ctrl+c 退出不会保存。
- 若显示异常,需确保终端支持 256 色或真彩色,可尝试其他终端模拟器(iTerm2、Alacritty、Ghostty、WezTerm),并检查 TERM 环境变量。
- 对于超大 CSV 文件,建议直接跳转到指定单元格而非滚动浏览,例如 :goto A1000 或按 5G 跳转。
- 若提示 sheets command not found,可将 Go bin 目录加入 PATH:export PATH=$PATH:$(go env GOPATH)/bin