Skip to content

attrid/asciitree.nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a979a0c · Dec 5, 2022

History

30 Commits
Dec 5, 2022
Dec 5, 2022
Dec 5, 2022
Dec 2, 2022
Dec 5, 2022
Nov 29, 2022
Nov 29, 2022
Dec 2, 2022
Nov 29, 2022
Nov 29, 2022
Dec 2, 2022
Dec 2, 2022

Repository files navigation

AsciiTree

Converts selected text into an ASCII tree using the :AsciiTree command. Inspired by the VSCode Ascii Tree Generator plugin.

Demo 1 Demo 2 Demo 3

Installation

-- Packer
use 'xorid/asciitree.nvim'

Setup

Setup is optional.

-- Default values
require("asciitree").setup({
	-- Characters used to represent the tree.
	symbols = {
		child = "",
		last = "",
		parent = "",
		dash = "",
		blank = " ",
	},

	-- How deep each level should be drawn. This value can be overridden by
	-- calling the AsciiTree command with a number, such as :AsciiTree 4.
	depth = 2,

	-- The delimiter to look for when converting to a tree. By default, this
	-- looks for a tree that looks like:
	-- # Level 1
	-- ## Level 2
	-- ### Level 3
	-- #### Level 4
	--
	-- Changing it to "+" would look for the following:
	-- + Level 1
	-- ++ Level 2
	-- +++ Level 3
	-- ++++ Level 4
	delimiter = "#",
})

Usage

Given the following text:

# documents
## word
### school
#### class A
#### class B
### work
#### proposal A
#### proposal B
## excel
### spreadsheet A
### spreadsheet B
### spreadsheet C
# code
## work
## github
### repos

Select the text in visual mode, and run the command :AsciiTree. Your text will be replaced with:

├─ documents
│  ├─ word
│  │  ├─ school
│  │  │  ├─ class A
│  │  │  └─ class B
│  │  └─ work
│  │     ├─ proposal A
│  │     └─ proposal B
│  └─ excel
│     ├─ spreadsheet A
│     ├─ spreadsheet B
│     └─ spreadsheet C
└─ code
   ├─ work
   └─ github
      └─ repos

The command accepts 2 arguments - the width to use for each tree level, and the style of delimiters. The default is equivalent to :AsciiTree 2 #. The default values can be changed using the setup method (see Setup).

The values can be given in any order your desire. :AsciiTree 10 - and :AsciiTree - 10 will have the same effect.

If the tree only has one root node, the top level will not display any symbols for the root node.

One root (A)
# A        A
## B       ├─ B
### C  ->  │  └─ C
## D       └─ D

Two roots (A & E)
# A       ├─ A
## B      │  ├─ B
### C     │  │  └─ C
## D   -> │  └─ D
# E       └─ E
## F         └─ F

Examples

:AsciiTree 1

├ documents
│ ├ word
│ │ ├ school
│ │ │ ├ class A
│ │ │ └ class B
│ │ └ work
│ │   ├ proposal A
│ │   └ proposal B
│ └ excel
│   ├ spreadsheet A
│   ├ spreadsheet B
│   └ spreadsheet C
└ code
  ├ work
  └ github
    └ repos

:AsciiTree 4

├─── documents
│    ├─── word
│    │    ├─── school
│    │    │    ├─── class A
│    │    │    └─── class B
│    │    └─── work
│    │         ├─── proposal A
│    │         └─── proposal B
│    └─── excel
│         ├─── spreadsheet A
│         ├─── spreadsheet B
│         └─── spreadsheet C
└─── code
     ├─── work
     └─── github
          └─── repos

:AsciiTree 2 -

Use - instead of # to define a tree with a depth of 2:


- documents                     ├─ documents
-- word                         │  ├─ word
--- school                      │  │  ├─ school
---- class A                    │  │  │  ├─ class A
---- class B                    │  │  │  └─ class B
--- work                        │  │  └─ work
---- proposal A                 │  │     ├─ proposal A
---- proposal B       --->      │  │     └─ proposal B
-- excel                        │  └─ excel
--- spreadsheet A               │     ├─ spreadsheet A
--- spreadsheet B               │     ├─ spreadsheet B
--- spreadsheet C               │     └─ spreadsheet C
- code                          └─ code
-- work                            ├─ work
-- github                          └─ github
--- repos                             └─ repos

:AsciiTree 2 *

Use * instead of # to define a tree with a depth of 2:


* documents                     ├─ documents
** word                         │  ├─ word
*** school                      │  │  ├─ school
**** class A                    │  │  │  ├─ class A
**** class B                    │  │  │  └─ class B
*** work                        │  │  └─ work
**** proposal A                 │  │     ├─ proposal A
**** proposal B       --->      │  │     └─ proposal B
** excel                        │  └─ excel
*** spreadsheet A               │     ├─ spreadsheet A
*** spreadsheet B               │     ├─ spreadsheet B
*** spreadsheet C               │     └─ spreadsheet C
* code                          └─ code
** work                            ├─ work
** github                          └─ github
*** repos                             └─ repos

Custom Symbols

require("asciitree").setup({
	symbols = {
		child = "+",
		last = "L",
		parent = "!",
		dash = "_",
		blank = " ",
	},
	depth = 4,
})
+... documents
!    +... word
!      !  +... school
!      !  !    +... class A
!      !  !    +... class B
!      !  L. work
!      !     +... proposal A
!      !     +... proposal B
!      L. excel
!         +... spreadsheet A
!         +... spreadsheet B
!         +... spreadsheet C
L... code
     +... work
     L... github
          L... repos

About

Convert selected text into an ASCII tree.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published