自动生成GFM目录

2023-10-28

自动生成GFM目录

参考文献

https://github.com/ekalinin/github-markdown-toc

引言

GFM即github flavoured markdown,是不支持自动生成目录的。

经过努力,实现了自动生成目录的方法。

在本仓库中有名为gh-md-toc的文件,在同步到本地后使用

chmod a+x gh-md-toc

改变其权限虽然不知道有什么用

使用方法

对于本地文档

在写好.md 文件后,执行类似于下面的命令。

➥ ./gh-md-toc ~/projects/Dockerfile.vim/README.md                                                                                                                                               

Table of Contents
=================

  * [Dockerfile.vim](#dockerfilevim)
  * [Screenshot](#screenshot)
  * [Installation](#installation)
        * [OR using Pathogen:](#or-using-pathogen)
        * [OR using Vundle:](#or-using-vundle)
  * [License](#license)

生成的即为目录内容,需要将目录内容粘贴至文档中需要生成目录的位置。

对于远程文档

➥ ./gh-md-toc https://github.com/ekalinin/envirius/blob/master/README.md

Table of Contents
=================

  * [envirius](#envirius)
    * [Idea](#idea)
    * [Features](#features)
  * [Installation](#installation)
  * [Uninstallation](#uninstallation)
  * [Available plugins](#available-plugins)
  * [Usage](#usage)
    * [Check available plugins](#check-available-plugins)
    * [Check available versions for each plugin](#check-available-versions-for-each-plugin)
    * [Create an environment](#create-an-environment)
    * [Activate/deactivate environment](#activatedeactivate-environment)
      * [Activating in a new shell](#activating-in-a-new-shell)
      * [Activating in the same shell](#activating-in-the-same-shell)
    * [Get list of environments](#get-list-of-environments)
    * [Get current activated environment](#get-current-activated-environment)
    * [Do something in environment without enabling it](#do-something-in-environment-without-enabling-it)
    * [Get help](#get-help)
    * [Get help for a command](#get-help-for-a-command)
  * [How to add a plugin?](#how-to-add-a-plugin)
    * [Mandatory elements](#mandatory-elements)
      * [plug_list_versions](#plug_list_versions)
      * [plug_url_for_download](#plug_url_for_download)
      * [plug_build](#plug_build)
    * [Optional elements](#optional-elements)
      * [Variables](#variables)
      * [Functions](#functions)
    * [Examples](#examples)
  * [Example of the usage](#example-of-the-usage)
  * [Dependencies](#dependencies)
  * [Supported OS](#supported-os)
  * [Tests](#tests)
  * [Version History](#version-history)
  * [License](#license)
  * [README in another language](#readme-in-another-language)

对于多个文档

➥ ./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)

  * [Control Flow](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)
    * [Loops](https://github.com/aminb/rust-for-c/blob/master/control_flow/README.md#loops)
    * [For loops](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)
    * [Method call](https://github.com/aminb/rust-for-c/blob/master/control_flow/README.md#method-call)

  * [Primitive Types and Operators](https://github.com/aminb/rust-for-c/blob/master/primitive_types_and_operators/README.md#primitive-types-and-operators)

  * [Unique Pointers](https://github.com/aminb/rust-for-c/blob/master/unique_pointers/README.md#unique-pointers)

本地与远程结合

➥ ./gh-md-toc \
    ~/projects/Dockerfile.vim/README.md \
    https://github.com/ekalinin/sitemap.s/blob/master/README.md

  * [Dockerfile.vim](~/projects/Dockerfile.vim/README.md#dockerfilevim)
  * [Screenshot](~/projects/Dockerfile.vim/README.md#screenshot)
  * [Installation](~/projects/Dockerfile.vim/README.md#installation)
        * [OR using Pathogen:](~/projects/Dockerfile.vim/README.md#or-using-pathogen)
        * [OR using Vundle:](~/projects/Dockerfile.vim/README.md#or-using-vundle)
  * [License](~/projects/Dockerfile.vim/README.md#license)

  * [sitemap.js](https://github.com/ekalinin/sitemap.js/blob/master/README.md#sitemapjs)
    * [Installation](https://github.com/ekalinin/sitemap.js/blob/master/README.md#installation)
    * [Usage](https://github.com/ekalinin/sitemap.js/blob/master/README.md#usage)
    * [License](https://github.com/ekalinin/sitemap.js/blob/master/README.md#license)

Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc)

自动插入和更新目录

首先在文档中希望插入目录的地方插入以下两行:

<!--ts-->
<!--te-->

运行以下命令,便会在文档中自动插入目录:

$ ./gh-md-toc --insert README.test.md

Table of Contents
=================

   * [gh-md-toc](#gh-md-toc)
   * [Installation](#installation)
   * [Usage](#usage)
      * [STDIN](#stdin)
      * [Local files](#local-files)
      * [Remote files](#remote-files)
      * [Multiple files](#multiple-files)
      * [Combo](#combo)
   * [Tests](#tests)
   * [Dependency](#dependency)

!! TOC was added into: 'README.test.md'
!! Origin version of the file: 'README.test.md.orig.2018-02-04_192655'
!! TOC added into a separate file: 'README.test.md.toc.2018-02-04_192655'


Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc)

当文档更新后,运行./gh-md-toc --insert ...,目录便会自动更新。

注意到上面的命令执行完有

!! TOC was added into: 'README.test.md'
!! Origin version of the file: 'README.test.md.orig.2018-02-04_192655'
!! TOC added into a separate file: 'README.test.md.toc.2018-02-04_192655'

即程序生成了两个文件来存放源文件备份和生成的toc,这样很糟糕,所以我改动了源代码使得这两个文件被自动删除了。

于是现在的输出是这样的:

!! TOC was added into: '生成GFM目录.md'
!! Origin version of the file: '生成GFM目录.md.orig.2018-10-07_141040'
!! TOC added into a separate file: '生成GFM目录.md.toc.2018-10-07_141040'
And they have been removed, hahahahahahahahaha

输出目录文件

./gh-md-toc https://github.com/ekalinin/envirius/blob/master/README.md > table-of-contents.md
在命令的最后加上> filename.md即可输出文件目录到指定文件。

工作流程

经过上述学习,gh-md-toc 主要有如下实用功能:

  1. ./gh-md-toc filename.md直接在命令行中显示文件目录,并且可以同时显示多个文件目录。
  2. 首先在文件中插入:
    <!--ts-->
    <!--te-->
    
    之后执行./gh-md-toc --insert filename.md可直接在文件中插入目录,或者更新目录。
  3. ./gh-md-toc filename.md > filename2.md可将目录导入到filename2.md文件中。

我们想实现:

  1. 在每个文件中都包含目录:

    所以在写每个文档时都应加入

    <!--ts-->
    <!--te-->
    

    在完成后执行插入目录命令./gh-md-toc --insert filename.md

  2. README.md中实现总的目录:

    在文件夹中执行./gh-md-toc *.md > README.md即可。

所以在写完某文档或修改某文档结构后要执行两个命令:

./gh-md-toc --insert filename.md
./gh-md-toc *.md > README.md

这样就保证了文档中的目录和总的目录都得到了更新。

目前工作流程注意事项及问题

注意事项:每篇文档都要在开头有唯一的一级标题。

问题:README.md文件中目录虽然比较全,但是不是很清晰,在文件之间没有分割符号。

以上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动生成GFM目录 的相关文章

  • 如何在 magento 2 中以编程方式清理或刷新缓存?

    如何在 magento 2 中以编程方式清理或刷新缓存 在开发的情况下 开发人员或商家的请求 需要以编程方式清除 刷新缓存 如果您在 Magento2 中以编程方式清除缓存时遇到问题 本文适合您 今天 我们将向您展示如何以编程方式清除缓存
  • uboot 移植计划

    将uboot nandflash 包括ecc 驱动起来 把ethernet驱动起来 然后用mmc boot gt tftp nandflash uboot 到nandflash中去 然后uboot就移植ok了 以后就使用nandflash中
  • get 和 post的区别

    get和post的区别 第一 get和post都是http请求 第二 get请求指定页面的信息 并返回实体主体 get是从服务器获取数据资源 post一般用于修改 更新 服务器上的的资源 是从服务器传送数据 get通过地址栏来传值 post
  • Mysql复制表中数据给另一张表

    个人简介 个人主页 摸鱼 文酱博客主页 博客领域 java编程基础 mysql 写作风格 干货 干货 还是tmd的干货 精选专栏 Java mysql 算法刷题笔记 博主的码云gitee 平常博主写的程序代码都在里面 支持博主 点赞 收藏
  • anaconda创建、删除虚拟环境指令

    使用 c o n d a 创建 删除虚拟环境指令
  • 动态分区、虚拟内存、分页存储、分段存储 简介

    动态分区的特点 分区的个数和大小可变 存在内存碎片 动态分区 就是动态的判断某一块的内存空间能否存储 不会找到刚刚好的 一般都是能放进去就放了 其他剩下的区域 又交给其他程序进行存储 然后几轮下来 就会存在很小的空间 无法利用 这就是内存的
  • OAuth基础介绍

    什么是OAuth OAuth是为解决应用之间 网站之间互相访问的一种简单 标准 安全的API授权协议 官网对其的定义 An open protocol to allow secure API authorization in a simpl
  • 面试题 03.02. 栈的最小值-辅助栈做法

    面试题 03 02 栈的最小值 请设计一个栈 除了常规栈支持的pop与push函数以外 还支持min函数 该函数返回栈元素中的最小值 执行push pop和min操作的时间复杂度必须为O 1 示例 MinStack minStack new
  • 计算梯度的三种方法: 数值法,解析法,反向传播法

    coding gbk function f x y z x y z first method 解析法 def grad1 x y z dx z dy z dz x y return dx dy dz second method 数值法 de
  • List接口及其实现类

    List接口 鉴于Java中数组用来存储数据的局限性 我们通常使用List替代数组 List集合类中元素有序 且可重复 集合中的每个元素都有其对应的顺序索引 List容器中的元素都对应一个整数型的序号记载其在容器中的位置 可以根据 序号存取
  • Linux无法连通外网情况下缺少依赖(CentOS7环境)

    在有外网的情况下 可以用yum很容易的完成服务及其相关依赖的安装 而由于客户要求 导致生产服务器上无法连通外网 于是在搭建生产环境的时候 由于外网不通 导致缺少依赖的问题频频出现 现将解决此类问题的方法归纳如下 直接下载 此方法适用于缺少单
  • GD32F103调试小记(二)之USART(接收中断、接收空闲中断+DMA、发送DMA)

    前言 上篇文章摸完了GD32F103调试小记 一 之ADC DMA 接下来摸下GD32的USART DMA 数据的搬运工 CPU的好助手 USART 一种串行通信协议 说白了就是让两根线按照一定的规律去切换高低电平 根据一个单位时间内高低电
  • Linux基础—系统结构介绍(一)

    一 系统结构由内核 shell 文件系统 应用程序一起组合而成的文件操作系统 它们使得用户可以运行程序 管理文件 资源调度 计算 1 Linux 内核由如下几部分组成 SCI 层系统调用接口 虚拟文件系统 内存管理 进程管理 设备驱动程序
  • Ubuntu下 Hyperledger Farbic 环境配置

    Hyperledger Farbic Hyperledger作为IBM旗下主推的区块链 是首个面向企业的开放区块链技术的重要探索 现阶段也推出了1 0稳定版本 虽然IBM也有相关的配置文档 并且完善度十分高 但是依旧有些坑点 配置目录 以下
  • 人脸检测算法YuNet再次提升,参数量降至54K

    我们的人脸检测项目libfacedetection是2015年创建的开源项目 算法模型为YuNet 已经持续维护8年至今 在GitHub上已经获得11 7K星 欢迎大家三连 使用 反馈和建议 2022 2023年我们对训练部分进行了大幅改进
  • 让安全动起来

    山石网科带你 分分钟拿下靶标 一 信息收集 信息收集是整个攻击流程当中最重要的一步 从 web 入手 首先需要收集子域名 可以通过枚举的方式收集子域名 例如经典的 layzer子域名挖掘机 另外还可以通过搜索引擎收集子域名 例如 fofa
  • js对数据进行加密(账户密码加密)@莫成尘

    先看代码 复制使用即可 这是一个比较常用的场景我们借助了 crypto es gt vue3 crypto es gt vue2 库 如您满意请给莫成尘点个star 将他封装为单独的js文件 import CryptoJS from cry
  • Fabric CA国密版本的一种替代方案--使用cryptogen工具增加新用户

    在Fabric超级账本中 如果我们想动态增加用户发行证书 一般会使用Fabric CA或者其它CA 然而在国密改造场景中 当前缺乏可用的开源的Fabric CA国密版本 因此 笔者研究了一下 发现了一种可不使用CA直接使用cryptogen
  • 7-2 交换最小值和最大值 (15分)

    7 2 交换最小值和最大值 15分 本题要求编写程序 先将输入的一系列整数中的最小值与第一个数交换 然后将最大值与最后一个数交换 最后输出交换后的序列 注意 题目保证最大和最小值都是唯一的 输入格式 输入在第一行中给出一个正整数N 10 第

随机推荐

  • Chapter5 --Clocks(时钟及虚拟时钟)

    文章目录 5 3 create clock 5 3 1 Specifying Clock Period 5 3 2 Identifying the Clock Source 5 3 3 Naming the Clock 5 3 4 Spec
  • 操作系统处理机调度及常见的调度算法

    处理机调度的层次 高级调度 高级调度又称为作业调度或长程调度 其主要功能是根据某种算法 把外存上处于后备队列中的那些作业调入内存 也就是说 它的调度对象是作业 中级调度 又称为中程调度 引入中程调度的目的是为了提高内存利用率和系统吞吐量 中
  • IDEA与IDEA(2020.1版本)的安装

    DEA简介 IDEA 全称 IntelliJ IDEA 是 Java 语言开发的集成环境 IntelliJ 在业界被公认为最好的 Java 开发工具之一 IDEA 是 JetBrains 公司的产品 这家公司总部位于捷克共和国的首都布拉格
  • elementUI中的el-date-picker日期月份时间选择器禁用

    1 时间选择器禁用 当开始时间已经选择时 结束时间不能小于开始时间 即禁用结束时间选择器中开始时间前 反之亦然 template内容
  • 【HarmonyOS】实现将pcm音频文件进行编码并写入文件(API6 Java)

    关键字 音频编码 管道模式 createEncoder 写在前面 在使用API6开发HarmonyOS应用时 如何将pcm源文件进行编码并写入文件 最后生成aac文件 本文直接附上主要代码开发步骤供大家参考 主要功能代码 import oh
  • 现阶段项目介绍及电脑网络/RFID/NFC概述

    现阶段项目介绍及电脑网络 RFID NFC概述 文章目录 现阶段项目介绍及电脑网络 RFID NFC概述 1 现阶段项目介绍和行业前景 2 RFID 1 RFID概述 2 应用 3 技术及性能参数 4 使用风险 3 NFC 1 概述 2 工
  • A*算法解八数码问题

    1 问题描述 1 1什么是八数码问题 八数码游戏包括一个33的棋盘 棋盘上摆放着8个数字的棋子 留下一个空位 与空位相邻的棋子可以滑动到空位中 游戏的目的是要达到一个特定的目标状态 标注的形式化如下 1 2 3 4 5 6 7 8 1 2问
  • [转]vue3中使用vueQuill富文本编辑器详细教程,图片上传-图片压缩

    vueQuill是支持vue3的富文本编辑器组件 使用简单方便 官方网址 https vueup github io vue quill 效果图 1 安装 在官网有详细的安装教程 npm或者yran下载 npm install vueup
  • k8s 以statefulset方式部署zookeeper集群

    k8s 以statefulset方式部署zookeeper集群 参考 k8s官网zookeeper集群的部署 数据挂着方式改成通过本地方式创建的pv https kubernetes io docs tutorials stateful a
  • [深度解剖C语言] --关键字 static

    static 最名不副实的关键字 目录 1 static修饰全局变量 2 static修饰函数 3 static修饰局部变量 static的作用 1 static修饰全局变量 我们创建两个源文件 一个test c 一个main c 现在我们
  • 【日常问题记录】visual studio 出现 E0266 “data“ 不明确 错误

    解决方法 定义的变量和内部变量冲突 将变量的把名字改成其他名字即可
  • 【Kubernetes】mac 安装minikube

    1 一 官网安装 官网 https minikube sigs k8s io 搜了下网上如何通过Mac 安装看网上文章很多 但是受限于国内网络环境 很多都不行 各种下载失败 如果你有VPN 那么官方的步骤就容易走通 brew install
  • 小酌Django3——HTTP/URL/ORM简述

    小酌Django3 HTTP URL ORM简述 HTTP Hyper Text Transfer Protocol 超文本传输协议 是客户端与服务端请求和应答的标准 TCP 封装了Web服务的整个过程 通常 由客户端发起 建立到服务器指定
  • 矩阵基本知识

    1 identity matrix 单位矩阵 除了正对角线上是1 其它地方都是0 2 square matrix 方阵 行数和列数都相等的矩阵 3 diagonal matrix 对角矩阵 只在正对角线上有值 其它地方为0 4 matrix
  • js获取昨天,今天,明天,上周,本周,下周,上月,本月,下月,去年,本年,明年,上季度,本季度,下季度,向前推日期等

    配合的elementul的日期选择器使用的 参数是这样的 1代表 上 0代表 本 1代表 下 本月 1号到今天 意思就是比如今天是10月27号 那点击这个获取的是10月1号到10月27号得 效果如图 按顺序点了一遍 从左到右 上代码
  • 双十一前4小时,CentOS 6.5server启动错误排查

    11月10日晚上8点多 眼看要到双十一了 但我要说的这段经历却和双十一毫无关系 哈哈 这天准备向CentOS6 5server的svn上传一些文件 结果开机启动时 却出现了以下的界面 这是肿么回事 依据屏幕的提示 先使用root账号登录到系
  • JSP page指令errorPage属性起什么作用呢?

    转自 JSP page指令errorPage属性起什么作用呢 下文讲述JSP中page指令的errorPage功能简介说明 如下所示 errorPage功能 errorPage 属性用于设置JSP页面 当出现异常时的跳转页面 注意事项 er
  • STM32G431控制窗帘电机-窗帘电机拆机

    前言 最近做了一个电动窗帘的控制工程 简单点说就是实现电动窗帘的校准模式 窗帘移动到任意位置 说明 本文档为原创 转载请注明出处 要进行商业合作请联系本人1151313194 qq com 一 电机爆炸图拆解 窗帘电机主要时由三部分构成 电
  • Docker的隔离机制

    Docker的隔离性主要运用Namespace 技术 传统上Linux中的PID是唯一且独立的 在正常情况下 用户不会看见重复的PID 然而在Docker采用了Namespace 从而令相同的PID可于不同的Namespace中独立存在 如
  • 自动生成GFM目录

    自动生成GFM目录 自动生成GFM目录 参考文献 引言 使用方法 对于本地文档 对于远程文档 对于多个文档 本地与远程结合 自动插入和更新目录 输出目录文件 工作流程 目前工作流程注意事项及问题 参考文献 https github com