这是基于 golang 实现的 github-markdown-toc 工具。
该实现的优点:
注意:gh-md-toc 只有在您的机器连接到互联网时才能正常工作。
由 gh-md-toc 创建
请查看发布页面的"下载"部分:
例如:
$ wget https://github.com/ekalinin/github-markdown-toc.go/releases/download/1.1.0/gh-md-toc.linux.amd64.tgz $ tar xzvf gh-md-toc.linux.amd64.tgz gh-md-toc $ ./gh-md-toc --version 1.1.0
您需要在操作系统中安装 golang:
$ make build $ ./gh-md-toc --help 用法: gh-md-toc [<标志>] [<路径>...] 标志: --help 显示上下文相关帮助(也可以尝试 --help-long 和 --help-man)。 --serial 以串行模式获取目录 --hide-header 隐藏目录头部 --hide-footer 隐藏目录尾部 --start-depth=0 从此级别开始包含。默认为 0(包含所有级别) --depth=0 包含的标题级别数。默认为 0(全部) --no-escape 不转义章节中的字符 --token=TOKEN GitHub 个人令牌 --indent=2 生成列表的缩进空格数 --debug 显示调试信息 --version 显示应用程序版本。 参数: [<路径>] 要获取目录的文档的本地路径或 URL。如果未输入,则从标准输入读取 MD。
您需要在操作系统中安装 golang:
go install "github.com/ekalinin/github-markdown-toc.go/cmd/gh-md-toc@latest"
$ brew install github-markdown-toc
$ make test 覆盖率: 28.8% 的语句 ok _~/projects/my/github-toc.go 0.003s
以下是从标准输入为 markdown 创建目录的示例:
➥ cat ~/projects/Dockerfile.vim/README.md | ./gh-md-toc * [Dockerfile.vim](#dockerfilevim) * [截图](#截图) * [安装](#安装) * [或者使用 Pathogen:](#或者使用-pathogen) * [或者使用 Vundle:](#或者使用-vundle) * [许可证](#许可证)
以下是为本地 README.md 创建目录的示例:
➥ ./gh-md-toc ~/projects/Dockerfile.vim/README.md 2015年3月22日 星期日 22:51:46 MSK 目录 ================= * [Dockerfile.vim](#dockerfilevim) * [截图](#截图) * [安装](#安装) * [或者使用 Pathogen:](#或者使用-pathogen) * [或者使用 Vundle:](#或者使用-vundle) * [许可证](#许可证)
这里有一个示例,当您有一个像这样的 README.md 时:
这再简单不过了:
➥ ./gh-md-toc https://github.com/ekalinin/envirius/blob/master/README.md 目录 ============== * [envirius](#envirius) * [理念](#理念) * [特性](#特性) * [安装](#安装) * [卸载](#卸载) * [可用插件](#可用插件) * [使用方法](#使用方法) * [查看可用插件](#查看可用插件) * [查看每个插件的可用版本](#查看每个插件的可用版本) * [创建环境](#创建环境) * [激活/停用环境](#激活停用环境) * [在新的 shell 中激活](#在新的-shell-中激活) * [在同一 shell 中激活](#在同一-shell-中激活) * [获取环境列表](#获取环境列表) * [获取当前激活的环境](#获取当前激活的环境) * [在不启用环境的情况下在环境中 执行操作](#在不启用环境的情况下在环境中执行操作) * [获取帮助](#获取帮助) * [获取某个命令的帮助](#获取某个命令的帮助) * [如何添加插件?](#如何添加插件) * [必需元素](#必需元素) * [plug_list_versions](#plug_list_versions) * [plug_url_for_download](#plug_url_for_download) * [plug_build](#plug_build) * [可选元素](#可选元素) * [变量](#变量) * [函数](#函数) * [示例](#示例) * [使用示例](#使用示例) * [依赖项](#依赖项) * [支持的操作系统](#支持的操作系统) * [测试](#测试) * [版本历史](#版本历史) * [许可证](#许可证) * [其他语言的README](#其他语言的readme)
就这么简单!现在你需要做的就是将控制台中的结果复制/粘贴到原始的 README.md 中。
这里是结果:
它也支持多个文件:
➥ ./gh-md-toc \ https://github.com/aminb/rust-for-c/blob/master/hello_world/README.md \ https://github.com/aminb/rust-for-c/blob/master/control_flow/README.md \ https://github.com/aminb/rust-for-c/blob/master/primitive_types_and_operators/README.md \ https://github.com/aminb/rust-for-c/blob/master/unique_pointers/README.md * [Hello world](https://github.com/aminb/rust-for-c/blob/master/hello_world/README.md#hello-world) * [控制流](https://github.com/aminb/rust-for-c/blob/master/control_flow/README.md#control-flow) * [If](https://github.com/aminb/rust-for-c/blob/master/control_flow/README.md#if) * [循环](https://github.com/aminb/rust-for-c/blob/master/control_flow/README.md#loops) * [For 循环](https://github.com/aminb/rust-for-c/blob/master/control_flow/README.md#for-loops) * [Switch/Match](https://github.com/aminb/rust-for-c/blob/master/control_flow/README.md#switchmatch) * [方法调用](https://github.com/aminb/rust-for-c/blob/master/control_flow/README.md#method-call) * [基本类型和运算符](https://github.com/aminb/rust-for-c/blob/master/primitive_types_and_operators/README.md#primitive-types-and-operators) * [唯一指针](https://github.com/aminb/rust-for-c/blob/master/unique_pointers/README.md#unique-pointers)
自 0.4.0 版本起,多文档处理采用并行模式。
你可以通过在控制台中传递 --serial
选项来使用(旧的)串行模式:
$ ./gh-md-toc --serial ...
时间对比:
➥ time (./gh-md-toc --serial README.md ../envirius/README.ru.md ../github-toc/README.md > /dev/null) real 0m1.200s user 0m0.040s sys 0m0.004s
➥ time (./gh-md-toc README.md ../envirius/README.ru.md ../github-toc/README.md > /dev/null) real 0m0.784s user 0m0.036s sys 0m0.004s
你可以轻松地结合这两种方式:
➥ ./gh-md-toc \ ~/projects/Dockerfile.vim/README.md \ https://github.com/ekalinin/sitemap.s/blob/master/README.md * [Dockerfile.vim](https://github.com/ekalinin/github-markdown-toc.go/blob/master/~/projects/Dockerfile.vim/README.md#dockerfilevim * [截图](https://github.com/ekalinin/github-markdown-toc.go/blob/master/~/projects/Dockerfile.vim/README.md#screenshot * [安装](https://github.com/ekalinin/github-markdown-toc.go/blob/master/~/projects/Dockerfile.vim/README.md#installation * [或者使用 Pathogen:](https://github.com/ekalinin/github-markdown-toc.go/blob/master/~/projects/Dockerfile.vim/README.md#or-using-pathogen * [或者使用 Vundle:](https://github.com/ekalinin/github-markdown-toc.go/blob/master/~/projects/Dockerfile.vim/README.md#or-using-vundle * [许可证](https://github.com/ekalinin/github-markdown-toc.go/blob/master/~/projects/Dockerfile.vim/README.md#license * [sitemap.js](https://github.com/ekalinin/sitemap.js/blob/master/README.md#sitemapjs) * [安装](https://github.com/ekalinin/sitemap.js/blob/master/README.md#installation) * [使用方法](https://github.com/ekalinin/sitemap.js/blob/master/README.md#usage) * [许可证](https://github.com/ekalinin/sitemap.js/blob/master/README.md#license) 起始深度 -------------- 使用 `--start-depth=INT` 来控制起始标题级别(即只包含从 `INT` 开始的级别) ```bash ➥ ./gh-md-toc --start-depth=1 ~/projects/Dockerfile.vim/README.md 目录 ================= * [或者使用 Pathogen:](#或者使用-pathogen) * [或者使用 Vundle:](#或者使用-vundle) 由 [gh-md-toc](https://github.com/ekalinin/github-markdown-toc) 创建
使用 --depth=INT
来控制在目录中包含多少级标题
➥ ./gh-md-toc --depth=1 ~/projects/Dockerfile.vim/README.md 目录 ================= * [Dockerfile\.vim](#dockerfilevim) * [截图](#截图) * [安装](#安装) * [许可证](#许可证)
➥ ./gh-md-toc ~/projects/my/Dockerfile.vim/README.md | grep Docker * [Dockerfile\.vim](#dockerfilevim) ➥ ./gh-md-toc --no-escape ~/projects/my/Dockerfile.vim/README.md | grep Docker * [Dockerfile.vim](#dockerfilevim)
所有令牌都在这里。
命令行参数示例:
➥ ./gh-md-toc --depth=1 --token=2a2dabe1f2c2399bd542ba93fe6ce70fe7898563 README.md 目录 ================= * [github\-markdown\-toc](#github-markdown-toc) * [目录](#目录) * [安装](#安装) * [测试](#测试) * [使用方法](#使用方法) * [许可证](#许可证)
环境变量示例:
➥ GH_TOC_TOKEN=2a2dabe1f2c2399bd542ba93fe6ce70fe7898563 ./gh-md-toc --depth=1 README.md 目录 ================= * [github\-markdown\-toc](#github-markdown-toc) * [目录](#目录) * [安装](#安装) * [测试](#测试) * [使用方法](#使用方法) * [许可证](#许可证)
如果你使用的是 GitHub 企业服务器,可以覆盖 API 的默认 URL:
➥ GH_TOC_URL=https://api.github.mycompany.com ./gh-md-toc README.md
只需在你的 ~/.bashrc
或 ~/.zshrc
中添加一个简单的命令:
# 对于 zsh eval "$(gh-md-toc --completion-script-zsh)" # 对于 bash eval "$(gh-md-toc --completion-script-bash)"
Alpine Linux 默认使用 musl 而不是 glibc。如果你安装 binutils
并运行...
apk add binutils && \ readelf -l /path/to/gh-md-toc
...你会看到它依赖 /lib64/ld-linux-x86-64.so.2
作为其解释器。你可以通过在下载 Linux amd64
构建的同时安装 libc6-compat 来解决这个问题。
apk add libc6-compat
请参阅 LICENSE 文件。