嘿,各位 Gopher 和开源探险家们,我是开源周!
每天刷 GitHub Trending 和各种小众 Topic 已经是我的肌肉记忆了。今天在挖 Golang 的命令行工具时,发现了一个极其惊艳但平时很少被人提起的宝藏项目。必须第一时间拉出来带大家复现一下!
相信很多人在 Linux / macOS 下调试脚本、监控端口或者观察 Kube 资源时,都习惯用 watch -n 1 'command' 吧?但传统的 watch 实在太简陋了——不能翻页、没有历史快照、Diff 高亮也很弱。
今天介绍的主角就是用 Golang 写的现代版 watch 替代品:viddy!
📦 项目名片与 Star 走势
- 项目名称:
viddy - 仓库地址:https://github.com/sachaos/viddy
- 开发语言:Golang
- Star 走势:目前在 3.5k Star 左右,虽然没有达到那种大红大紫的万星级别,但曲线一直非常稳健,属于那种“用过的人都默默给了 Star 并放进主力环境”的硬核生产力工具。
✨ 核心亮点:为什么它比传统 watch 香?
- 时间旅行(Time Machine):这是最骚的操作!它在后台记录每次执行的历史输出,你可以随时按
Space暂停,然后像拉进度条一样回溯过去的执行结果。 - 内置 Diff 高亮:支持字符级、词级的差异对比,输出变动一目了然。
- Vim 键位支持:支持
/搜索内容、j/k滚动页面,对键盘流极度友好。 - 纯 Go 构建,单二进制分发:零动态依赖,配合 Go 优秀的并发模型,资源占用极低。
🛠️ 快速复现与安装
既然是 Golang 写的,安装自然是丝滑无比。只要你本地配好了 Go 环境,一行命令直接搞定:
# 使用 go install 安装最新版
go install github.com/sachaos/viddy@latest
如果你用 macOS,也可以通过 Homebrew 安装:
brew install viddy
安装完成后,验证一下版本:
viddy -v
🚀 实战体验:监控目录大小变化
让我们写一个简单的场景:监控当前目录下文件的变化,并实时高亮 Diff。
运行以下命令:
viddy -d -n 2 'ls -lha'
-d:开启 Diff 高亮模式。-n 2:每 2 秒刷新一次。
操作小贴士:
- 按下
Space(空格键):进入 Time Machine 模式(暂停刷新)。 - 按下
h/l(或左右方向键):在历史快照之间穿梭,查看之前的输出! - 按下
/:输入关键词搜索控制台输出。 - 按下
q:退出。
在另一个终端里随便 touch test_$(date +%s).txt,你就能看到 viddy 界面里精准高亮了新增的那一行,而且随时可以倒带查看上一秒的状态,调试体验直接起飞!
🔍 源码微窥:Go 终端工具的魅力
扒了一下 viddy 的 go.mod,发现作者底层选用了 github.com/gdamore/tcell/v2 来做终端 UI 渲染,而不是大热的 bubbletea。
tcell 提供了非常底层的终端事件驱动支持,作者通过 Goroutine 周期性执行命令,将标准输出写入环形缓冲区(Ring Buffer)来保存历史帧,再借助 Go 的 Channel 监听键盘事件实现无缝倒带。这种设计保证了即使命令输出了大量文本,内存占用也能被控制在一个固定范围内。
简单的并发控制 + 高效的终端渲染,这就是 Golang 写 CLI 工具最迷人的地方!
💡 总结
如果你也是经常泡终端的开发者,强烈建议用 viddy 取代系统的 watch。给你的 Shell 配上 alias:
alias watch='viddy'
顺手去给作者点个 Star 吧!大家平时在 GitHub 上还挖到了哪些好玩、实用的冷门 Golang 工具?欢迎在评论区安利,我去帮大家复现排坑!
License: CC BY-NC 4.0
Updated 3 hours ago
Was this article helpful? Give it a like.
0 comments


