3个不稳定版本
使用旧的Rust 2015
0.3.1 | 2018年6月24日 |
---|---|
0.3.0 | 2018年6月23日 |
0.2.2 | 2018年6月13日 |
#13 in #navigate
51KB
1.5K SLoC
itree
itree
是Linux工具tree
的交互式导航版本,使用Rust编写。它旨在扩展tree
的功能,提供直观的可管理、交互式命令行界面来查看目录结构。
与tree
在大型目录中使用时可能令人感到不知所措相比,itree
允许您以直观的方式,按照自己的节奏检查文件系统。它还遵守gitignore规则并支持折叠,让您能够专注于您最感兴趣的文件!
itree
依赖于由ripgrep使用的文件系统遍历器,以尽可能少的开销/延迟为您提供tree
的有用性!(参见下方的基准测试。)
tree |
itree |
---|---|
安装
使用brew
itree
通过Homebrew提供!只需运行
$ brew install sashaweiss/projects/itree
使用cargo
itree
还可在crates.io上找到!只需运行
$ cargo install itree
从源代码构建
要从源代码构建,请确保您已安装Rust和cargo
。(如果没有,请通过Rustup进行安装。)然后
$ git clone https://github.com/sashaweiss/itree
$ cd itree
$ cargo install
使用方法
运行itree
将启动一个交互式CLI。使用itree --help
查看完整配置和UI选项列表!
- 使用箭头键移动,按视觉上的方式:
Up
和Down
在相同目录级别的文件之间移动,而Left
和Right
则分别向上和向下移动一个目录级别。itree
还支持Vim快捷键 - 使用h
、j
、k
和l
代替箭头键。
- 使用
f
折叠/展开目录。 - 使用
q
、Ctrl-C
或Esc
退出。
基准测试
以下表格对比了itree
与tree
以及ripgrep
(itree
从其中获取文件系统迭代器)的性能。
简单来说:itree
速度很快 - 比起tree
要快得多,并且比纯ripgrep
的减速要小得多!(主要归功于BurntSushi的出色ignore
crate)。
方法论
我使用了hyperfine进行基准测试 - 特别是以下命令:
$ hyperfine --warmup 2 <CMD> --show-output
其中<CMD>
被以下表格的第一列所填充。--show-output
用于避免抑制每个命令的输出,因为打印/渲染是tree
和itree
执行的重要部分。--warmup 2
使每个命令在测量之前运行两次,以潜在地预热缓存。
结果
所示结果是hyperfine
报告的均值和标准差。每个结果都是至少10次测量的结果。
- 第一行显示了用户等待
itree
显示其UI所需的时间。 - 第二行显示了
itree
精确模拟tree
行为所需的时间。 - 第三行显示了
tree
绘制目录结构所需的时间。 - 最后一行显示了
ripgrep
静默扫描目录结构所需的时间。由于ripgrep
和itree
使用相同的文件系统迭代器,这代表了计算itree
开销的基线。
命令 | μ ± σ(从我的$HOME 运行) |
μ ± σ(在此存储库中运行) |
---|---|---|
itree--无-忽略--无-排除--安静 |
2.953s ± 0.070s | 0.012s ± 0.002s |
itree--无-忽略--无-排除--无-交互 |
3.511s ± 0.043s | 0.031s ± 0.010s |
tree |
15.005s ± 4.891s | 0.043s ± 0.014s |
rg--无-忽略--文件--安静 |
1.373s ± 0.051s | 0.010s ± 0.014s |
未来工作
- 编写更全面的源代码文档。
- 实现类似于
tree -h
的功能。 - 添加与光标下文件交互的命令。
- 添加将光标所在的文件夹
cd
到文件夹中的命令。
依赖关系
~5–13MB
~143K SLoC