#树结构 #ASCII # #命令行工具 #文件树 #CLI

应用 astree

使用 ASCII 字符绘制树结构的命令行工具

12 个版本

使用旧的 Rust 2015

0.2.9 2024 年 8 月 10 日
0.2.8 2024 年 8 月 8 日
0.2.7 2023 年 3 月 3 日
0.2.5 2022 年 10 月 31 日
0.1.1 2022 年 7 月 31 日

#145命令行工具

Download history 7/week @ 2024-07-01 81/week @ 2024-07-22 217/week @ 2024-08-05 34/week @ 2024-08-12

每月 332 次下载

MIT/Apache

65KB
1K SLoC

Ascii Tree

使用 ASCII 字符绘制树结构的命令行工具。

用法

从 crates.io 安装 https://crates.io/crates/astree

cargo install astree

查看帮助信息

$ astree -h
A command line tool for drawing tree structures with ascii characters

Usage: astree <COMMAND>

Commands:
  vertical    Print the tree virtually. Use 'v' for shorthand
  horizontal  Print the tree horizontally. Use 'h' for shorthand
  help        Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help information (use `--help` for more detail)
  -V, --version  Print version information

例如,我们可以这样使用它

astree horizontal -i "$(cat << 'EOF'
# Root
## Child 1
### Grandchild 1
### Grandchild 2
EOF
)"

这里,每个额外的 # 表示一个嵌套的子项。

输出

Root
└─ Child 1
   ├─ Grandchild 1
   └─ Grandchild 2

从文件输入

或者,我们还可以保存 markdown 文件,例如 tree.md

# Root
## Child 1
### Grandchild 1
### Grandchild 2

然后调用命令如下

astree horizontal -i tree.md

输出

Root
└─ Child 1
   ├─ Grandchild 1
   └─ Grandchild 2

水平树

水平树绘制示例

$ astree horizontal -i examples/with_grandchildren_0.md
Root
├─ Child 1
  ├─ Grandchild 1.1
  └─ Grandchild 1.2
├─ Child 2
  └─ Child 2.1
└─ Child 3

具有多个根节点的树绘制示例

$ astree horizontal -i examples/multi_tree.md
.
├─ Root 1
  ├─ Child 1.1
  │  ├─ Grandchild 1.1.1
  │  └─ Grandchild 1.1.2
  └─ Child 1.2
└─ Root 2
   └─ Child 2.1

垂直树

垂直树绘制示例

astree vertical --input examples/with_grandchildren_1.md
             ┌──────┐
             │ Root │
             └──┬───┘
           ┌────┴────┐
           │ Child 1 │
           └────┬────┘
       ┌────────┴────────┐
┌──────┴───────┐  ┌──────┴───────┐
│ Grandchild 1 │  │ Grandchild 2 │
└──────────────┘  └──────────────┘

具有多个根节点的森林绘制示例

$ astree vertical -i examples/multi_tree.md
                               ┌────────┐
                                Root 1 │
                               └───┬────┘
                    ┌──────────────┴──────────────┐
              ┌─────┴─────┐                 ┌─────┴─────┐
               Child 1.1 │                 │ Child 1.2 │
              └─────┬─────┘                 └───────────┘
         ┌──────────┴──────────┐
┌────────┴─────────┐  ┌────────┴─────────┐
 Grandchild 1.1.1 │  │ Grandchild 1.1.2 │
└──────────────────┘  └──────────────────┘
  ┌────────┐
   Root 2 │
  └───┬────┘
┌─────┴─────┐
 Child 2.1 │
└───────────┘

垂直树样式

使用粗线

astree vertical --input examples/with_grandchildren_1.md --style thick
             ┏━━━━━━┓
             ┃ Root ┃
             ┗━━┳━━━┛
           ┏━━━━┻━━━━┓
           ┃ Child 1 ┃
           ┗━━━━┳━━━━┛
       ┏━━━━━━━━┻━━━━━━━━┓
┏━━━━━━┻━━━━━━━┓  ┏━━━━━━┻━━━━━━━┓
┃ Grandchild 1 ┃  ┃ Grandchild 2 ┃
┗━━━━━━━━━━━━━━┛  ┗━━━━━━━━━━━━━━┛

使用双线

astree vertical --input examples/with_grandchildren_1.md --style double
             ╔══════╗
             ║ Root ║
             ╚══╦═══╝
           ╔════╩════╗
           ║ Child 1 ║
           ╚════╦════╝
       ╔════════╩════════╗
╔══════╩═══════╗  ╔══════╩═══════╗
║ Grandchild 1 ║  ║ Grandchild 2 ║
╚══════════════╝  ╚══════════════╝

使用胸部样式

astree vertical --input examples/with_grandchildren_2.md --style chest
                       ╔━━━━━━╗
                       ┃ Root ┃
                       ╚━━┳━━━╝
              ╔━━━━━━━━━━━┻━━━━━━━━━━━╗
          ╔━━━┻━━━╗               ╔━━━┻━━━╗
          ┃ Left  ┃               ┃ Right ┃
          ┃ Child ┃               ┃ Child ┃
          ╚━━━┳━━━╝               ╚━━━┳━━━╝
      ╔━━━━━━━┻━━━━━━━╗         ╔━━━━━┻━━━━━━╗
╔━━━━━┻━━━━━━╗  ╔━━━━━┻━━━━━━╗  ┃   Right    ┃
┃ Grandchild ┃  ┃ Grandchild ┃  ┃ Grandchild ┃
┃    (1)     ┃  ┃    (2)     ┃  ╚━━━━━━━━━━━━╝
╚━━━━━━━━━━━━╝  ╚━━━━━━━━━━━━╝

使用气球样式

astree vertical --input examples/with_children_2.md --style balloon2
   ╭───────────╮
   │ Root Node │
   ╰─────¤─────╯
    ╭────┴─────╮
╭───¤───╮  ╭───¤───╮
│ Child │  │ Child │
│  (1)  │  │  (2)  │
╰───────╯  ╰───────╯

垂直树最大标签宽度

使用 --width <WIDTH> 指定标签的最大宽度。例如

astree vertical --input examples/with_long_label.md --width 10
     ┌──────────┐
     │ A Simple │
     │   Root   │
     └────┬─────┘
    ┌─────┴──────┐
┌───┴────┐  ┌────┴────┐
│ A long │  │ Another │
│ child  │  │  long   │
└────────┘  │  child  │
            └─────────┘

垂直树水平间距

默认情况下,框之间有 2 个空格的间隔。这可以通过 --spacing <SPACING> 设置。

astree vertical --input examples/with_many_children.md --width 10 --spacing 0
               ┌──────────┐
               │ A Simple │
               │   Root   │
               └────┬─────┘
    ┌──────────┬────┴─────┬──────────┐
┌───┴────┐┌────┴────┐┌────┴────┐┌────┴─────┐
│ A long ││ Another ││ A third ││ One more │
│ child  ││  long   ││  child  ││  child   │
└────────┘│  child  │└─────────┘└──────────┘
          └─────────┘

astree vertical --input examples/with_many_children.md --width 10 --spacing 10
         ┌──────────┐
         │ A Simple │
         │   Root   │
         └────┬─────┘
    ┌─────────┴──────────┐
┌───┴────┐          ┌────┴────┐
│ A long │          │ Another │
│ child  │          │  long   │
└────────┘          │  child  │
                    └─────────┘

垂直树多行

Markdown 文件中的标题行定义树结构。标题下的任何内容都将自动作为同一结构级别的单独行包含。

astree vertical --input examples/with_content.md
           ┌──────┐
           │ Root │
           └──┬───┘
      ┌───────┴────────┐
┌─────┴──────┐  ┌──────┴──────┐
│ Left Child │  │ Right Child │
│ Quota: 100 │  │ Quota: 200  │
└────────────┘  └─────────────┘

开发

参见 development.md

依赖项

~2–2.6MB
~50K SLoC