是否有可能生成一个自动目录使用Github调味Markdown?
当前回答
如果你用Vim编辑Markdown文件,你可以试试这个插件Vim - Markdown -toc。
使用方法很简单,只需将光标移动到您想要追加目录表的位置并运行:GenTocGFM,完成!
截图:
特点:
为Markdown文件生成toc。(支持GitHub调味Markdown和Redcarpet) 更新现有的toc。 保存时自动更新toc。
其他回答
使用coryfklein/doctoc, thlorenz/doctoc的一个分支,它不会在每个目录中添加“由doctoc生成”。
npm install -g coryfklein/doctoc
下面是我今天为此编写的shell脚本。可能需要根据你的需要进行调整,但这应该是一个很好的起点。
cat README.md \
| sed -e '/```/ r pf' -e '/```/,/```/d' \
| grep "^#" \
| tail -n +2 \
| tr -d '`' \
| sed 's/# \([a-zA-Z0-9`. -]\+\)/- [\1](#\L\1)/' \
| awk -F'(' '{for(i=2;i<=NF;i++)if(i==2)gsub(" ","-",$i);}1' OFS='(' \
| sed 's/^####/ /' \
| sed 's/^###/ /' \
| sed 's/^##/ /' \
| sed 's/^#//'
如果有人知道更好的方法来做这些最终的#替换,请添加评论。我尝试了各种各样的方法,但都不满意,所以我就硬着硬着。
它不是自动的,但它使用notepad++正则表达式:
用第二个替换所有第一个(删除所有没有标题的行)
^##(#?)(#?)(.*?)$(.|\r|\n)*?(?=^##|\z)
-\1\2 [\3](#\3)\n
然后(将头III转换为空格)
-##
-
然后(将标题II转换为空格)
-#
-
然后(删除链接标题开头和结尾未使用的字符)
\[ *((?:(?![ .:#!\?;]*\])[^#])*)[ #:!\?;]*\]
[\1]
然后(转换最后一个符号小写和破折号而不是空格)
\]([^ \r\n]*) ([^\r\n ]*)
]\L\1-\2
删除未使用的最后磅和初始破折号:
(?:()[-:;!\?#]+$|(\]#)-)
\1\2
删除链接中无用的字符:
(\].*?)(?:\(|\))
\1
最后在最后链接的周围加上圆括号:
\](?!\()(.*?)$
\]\(\1\)
瞧!如果你重复足够多的时间,你甚至可以把它放在一个全局宏中。
现在有一个GitHub行动完成这一点:
https://github.com/marketplace/actions/toc-generator
指定TOC的位置(选项) 例如README.md
<!-- START doctoc -->
<!-- END doctoc -->
设置工作流程 例如.github /工作流/ toc.yml
on: push
name: TOC Generator
jobs:
generateTOC:
name: TOC Generator
runs-on: ubuntu-latest
steps:
- uses: technote-space/toc-generator@v2
这并不是对这个问题的直接回答,因为很多人都提供了变通方法。我认为到目前为止,Github还没有正式支持生成TOC。如果你想让GitHub在他们的GFM预览页面上自动呈现一个目录,请参加关于官方功能请求问题的讨论。
推荐文章
- GitHub上的分叉和克隆有什么区别?
- 如何将现有的解决方案从Visual Studio 2013添加到GitHub
- 是否可以在GitHub上搜索特定的文件名?
- 如何将LaTeX与Markdown混合?
- GitHub -未能连接到GitHub 443 windows/连接到GitHub失败-无错误
- 我怎么能让詹金斯CI与Git触发器推到主人?
- 如何从拉请求中删除提交
- 如何用分发文件发布npm包?
- 如何同步项目到GitHub与Android工作室?
- 跟踪在GitHub上创建的一个新的远程分支
- 如何将一个特定的提交从一个分支合并到Git中的另一个分支?
- 从pull请求中删除一个修改过的文件
- 下载GitHub项目的最快方式
- 乳胶渲染在README。md在Github上
- 在Markdown Jekyll中使用图像说明