办公文档
在终端查看/编辑 CSV 时用 Sheets:以 vim…
需要在终端内以 vim 风格浏览、编辑 CSV,或通过命令行非交互读写指定单元格/范围时适用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在终端查看/编辑 CSV 时用 Shee特定
解决思路
- 使用 Go 安装:go install github.com/maaslalani/sheets@main
- 从 GitHub Releases 下载预构建二进制。
- 验证安装:sheets --help
- 启动 TUI:sheets budget.csv
- 从 stdin 读取:sheets <<< "ID,Name,Age 1,Alice,24 2,Bob,32 3,Charlie,26"
- 或从另一个命令管道读取:cat data.csv | sheets
- 读取特定单元格:sheets budget.csv B9,输出如 2760
- 读取单元格范围:sheets budget.csv B1:B3,输出如 1200 950 810
- 非交互设置一个单元格: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
- 管道 CSV 数据并编辑:psql -c "COPY (SELECT * FROM sales) TO STDOUT WITH CSV HEADER" | sheets
- 脚本中编程更新单元格:使用 sheets report.csv D4=95000 D5=102000 D6=88000,然后输出更新提示
- 脚本中提取范围进行处理:values=$(sheets data.csv B1:B10),再用 while IFS= read -r line; do total=$((total + line)); done <<< "$values" 求和并输出 Total
- 脚本中读取特定单元格:budget_total=$(sheets budget.csv C15),然后 if [ "$budget_total" -gt 10000 ]; then echo "Budget exceeded!"; fi
- Go 集成:使用 encoding/csv 创建文件并用 csv.NewWriter 的 WriteAll 写入数据,调用 Flush;用 exec.Command("sheets", filename) 打开 TUI,连接 cmd.Stdin/Stdout/Stderr 到 os.Stdin/Stdout/Stderr,调用 cmd.Run()
- Go 非交互读取单元格:使用 exec.Command("sheets", csvFile, cell).Output(),用 strings.TrimSpace 返回单元格值
- Go 非交互读取范围:使用 exec.Command("sheets", csvFile, cellRange).Output(),用 strings.Split(strings.TrimSpace(...), "\n") 返回行列表
- AI 代理建议:用户想查看或编辑 CSV 时,建议用 sheets 替代 cat data.csv:sheets data.csv
- AI 代理建议:对简单修改,用 sheets data.csv B3=new_value 替代 awk/sed 编辑
- 公式插入工作流:导航到目标列,按 v 进入视觉模式,选择范围(如 B1:B8),按 = 插入公式 =|(B1:B8)
- 高效导航(Vim 用户):使用 gg/G 顶/底,hjkl 移动,i/c 插入模式,dd 删除行,u/ctrl+r 撤销/重做,/ 搜索
- 排错:sheets command not found 时,确保 Go bin 目录在 PATH:export PATH=$PATH:$(go env GOPATH)/bin,或重新安装并验证:go install github.com/maaslalani/sheets@main、which sheets
- 排错:编辑后文件未保存时,在命令模式用 :w 保存,或 :wq 保存并退出;仅按 q 或 ctrl+c 退出不会保存
- 排错:TUI 渲染问题时,确保终端支持 256 色或 truecolor;尝试 iTerm2、Alacritty、Ghostty、WezTerm 等终端;检查 TERM 环境变量:echo $TERM
- 排错:读取非 CSV 文件时,先转换格式;例如 Excel 到 CSV(用 Python):python3 -c "import pandas as pd; pd.read_excel('data.xlsx').to_csv('data.csv', index=False)",然后 sheets data.csv
- 排错:大文件性能:对非常大的 CSV,直接导航到特定单元格而非滚动::goto A1000 或按 5G 跳到第 5 行
适用边界 · 注意事项
- 需要编辑或读取非 CSV 格式(如 Excel)时不适用,需先用转换工具转成 CSV。
- 终端不支持 256 色或 truecolor、或 TUI 渲染异常时不适用,可能需要换终端或检查 TERM。