Skip to content

使用rust语言编写的一个类似Beyond compare的对比文件夹和文件的工具

Notifications You must be signed in to change notification settings

thefu/tui-folder-cmp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tui-folder-cmp

一个基于终端的交互式双栏目录对比工具,支持快速浏览两侧目录差异与文本内容差异,并可按 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:返回浏览模式

状态栏会根据模式显示可用按键与信息(路径、选中索引、行号等)。

编辑器集成(像 Vim 一样)

  • 读取环境变量 EDITOR 作为外部编辑器;未设置时默认 vim
  • 在浏览或 diff 模式按 e
    1. 暂时退出原始模式与备用屏幕
    2. 启动 $EDITOR 打开当前选中文件
    3. 退出编辑器后恢复 TUI 并重建差异
    4. 回到浏览模式,停留在原选中项

设置示例:

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_dir

许可证

MIT

About

使用rust语言编写的一个类似Beyond compare的对比文件夹和文件的工具

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages