3个不稳定版本

使用旧的Rust 2015

0.3.1 2018年6月24日
0.3.0 2018年6月23日
0.2.2 2018年6月13日

#13 in #navigate

MIT许可证

51KB
1.5K SLoC

itree

itree是Linux工具tree的交互式导航版本,使用Rust编写。它旨在扩展tree的功能,提供直观的可管理、交互式命令行界面来查看目录结构。

tree在大型目录中使用时可能令人感到不知所措相比,itree允许您以直观的方式,按照自己的节奏检查文件系统。它还遵守gitignore规则并支持折叠,让您能够专注于您最感兴趣的文件!

itree依赖于由ripgrep使用的文件系统遍历器,以尽可能少的开销/延迟为您提供tree的有用性!(参见下方的基准测试。)

tree itree
Running tree from the ~/.rustup directory Running itree from the ~/.rustup directory
Running tree from this project's directory Running itree from this project's directory

安装

使用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选项列表!

  • 使用箭头键移动,按视觉上的方式:UpDown在相同目录级别的文件之间移动,而LeftRight则分别向上和向下移动一个目录级别。
    • itree还支持Vim快捷键 - 使用hjkl代替箭头键。
  • 使用f折叠/展开目录。
  • 使用qCtrl-CEsc退出。

基准测试

以下表格对比了itreetree以及ripgrepitree从其中获取文件系统迭代器)的性能。

简单来说:itree速度很快 - 比起tree要快得多,并且比纯ripgrep的减速要小得多!(主要归功于BurntSushi的出色ignore crate)。

方法论

我使用了hyperfine进行基准测试 - 特别是以下命令:

$ hyperfine --warmup 2 <CMD> --show-output

其中<CMD>被以下表格的第一列所填充。--show-output用于避免抑制每个命令的输出,因为打印/渲染是treeitree执行的重要部分。--warmup 2使每个命令在测量之前运行两次,以潜在地预热缓存。

结果

所示结果是hyperfine报告的均值和标准差。每个结果都是至少10次测量的结果。

  • 第一行显示了用户等待itree显示其UI所需的时间。
  • 第二行显示了itree精确模拟tree行为所需的时间。
  • 第三行显示了tree绘制目录结构所需的时间。
  • 最后一行显示了ripgrep静默扫描目录结构所需的时间。由于ripgrepitree使用相同的文件系统迭代器,这代表了计算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