一个基于终端的交互式双栏目录对比工具,支持快速浏览两侧目录差异与文本内容差异,并可按 e 调用本地编辑器修改后即时刷新对比。
- 目录级对比:标注仅左/仅右/元数据不同/内容不同/相同
- 文本内容对比:左右分屏显示,支持光标行与差异高亮
- 键盘友好:Vim 风格导航、分页与定位
- 性能优化:并行遍历 + BLAKE3 哈希 + LRU 缓存
- 健壮性:RAII 终端清理,异常也能恢复终端
- 编辑器集成:按 e 用
$EDITOR(默认vim)编辑,返回自动刷新
- Rust 稳定版(建议 1.70+)
- 终端支持 ANSI/UTF-8
Debug:
cd /Users/thefu/thefustudyarea/tui-folder-cmp
cargo build产物:target/debug/tui-folder-cmp
Release(推荐):
cargo build --release产物:target/release/tui-folder-cmp
两个必填参数:左目录 与 右目录
./target/release/tui-folder-cmp /path/to/left_dir /path/to/right_dir查看版本:
./target/release/tui-folder-cmp --version-
通用
- q:退出
-
浏览模式(左右窗格)
- ↑/↓:移动选中项
- ←/→ 或 h/l:切换左右窗格
- Enter:目录→进入;文件→进入 diff
- Home/End:跳到列表开头/末尾
- PageUp/PageDown:按页移动
- e:在外部编辑器中打开当前选中文件
-
文件 diff 模式(左右文本对比)
- j/k 或 ↑/↓:逐行移动
- g/G:跳转到顶部/底部
- PageUp/PageDown:整页滚动
- u/d:半屏上/下滚动
- H/M/L:定位到当前视窗顶/中/底
- e:在外部编辑器中打开当前文件
- Esc:返回浏览模式
状态栏会根据模式显示可用按键与信息(路径、选中索引、行号等)。
- 读取环境变量
EDITOR作为外部编辑器;未设置时默认vim - 在浏览或 diff 模式按
e:- 暂时退出原始模式与备用屏幕
- 启动
$EDITOR打开当前选中文件 - 退出编辑器后恢复 TUI 并重建差异
- 回到浏览模式,停留在原选中项
设置示例:
export EDITOR=nvim # 或 code、nano、micro 等- 目录/文件使用 emoji 图标(📂/📄);部分终端可能对齐有偏差
- 差异以颜色强调(仅一侧存在的行会突出显示)
- 二进制文件内容不做逐行 diff(以占位提示显示)
- 超大目录首次扫描较慢,二次比较受益于缓存
src/main.rs:入口、事件循环、终端初始化src/app.rs:应用状态、导航与键位处理、编辑器集成src/ui.rs:TUI 渲染(双栏、状态栏、diff 视图)src/diff.rs:遍历与哈希、文本 diff 生成
开发运行:
cargo run -- /path/to/left_dir /path/to/right_dirMIT