是否有可能生成一个自动目录使用Github调味Markdown?
当前回答
它不是自动的,但它使用notepad++正则表达式:
用第二个替换所有第一个(删除所有没有标题的行)
^##(#?)(#?)(.*?)$(.|\r|\n)*?(?=^##|\z)
-\1\2 [\3](#\3)\n
然后(将头III转换为空格)
-##
-
然后(将标题II转换为空格)
-#
-
然后(删除链接标题开头和结尾未使用的字符)
\[ *((?:(?![ .:#!\?;]*\])[^#])*)[ #:!\?;]*\]
[\1]
然后(转换最后一个符号小写和破折号而不是空格)
\]([^ \r\n]*) ([^\r\n ]*)
]\L\1-\2
删除未使用的最后磅和初始破折号:
(?:()[-:;!\?#]+$|(\]#)-)
\1\2
删除链接中无用的字符:
(\].*?)(?:\(|\))
\1
最后在最后链接的周围加上圆括号:
\](?!\()(.*?)$
\]\(\1\)
瞧!如果你重复足够多的时间,你甚至可以把它放在一个全局宏中。
其他回答
在使用Visual Studio Code时,实现mardown文件目录的一个非常方便的方法是扩展名Markdown-TOC。
它可以向现有的markdown文件添加toc,甚至在保存时保持toc的最新状态。
这并不是对这个问题的直接回答,因为很多人都提供了变通方法。我认为到目前为止,Github还没有正式支持生成TOC。如果你想让GitHub在他们的GFM预览页面上自动呈现一个目录,请参加关于官方功能请求问题的讨论。
下面是我今天为此编写的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/^#//'
如果有人知道更好的方法来做这些最终的#替换,请添加评论。我尝试了各种各样的方法,但都不满意,所以我就硬着硬着。
大多数其他答案需要安装一些工具。 我找到了一个快速简单的在线解决方案https://imthenachoman.github.io/nGitHubTOC。
对于任何markdown输入,它生成内容输出表。 您可以指定最小和最大标题级别。
源代码位于https://github.com/imthenachoman/nGitHubTOC
对于Github的Texteditor Atom,请查看这个很棒的插件(或Atom术语中的“包”),它可以从解析的markdown文件生成“标题的TOC(目录)”文件:
降价目录
一旦安装为Atom-package,您可以使用快捷键ctrl-alt-c在当前光标位置插入基于markdown-doc-structure的TOC…
截图:
原子Keybindings
markdown-toc为您提供以下默认键绑定来控制Atom中的插件:
ctrl-alt-c =>在光标位置创建TOC ctrl-alt-u =>更新TOC ctrl-alt-r =>删除TOC
插件特性(来自项目的README)
通过锚标记自动链接,例如# A 1→# A -1 深度控制[1-6]使用depthFrom:1和depthTo:6 使用withLinks使能或禁用链接 使用updateOnSave保存时刷新列表 使用有序列表(1. ..., 2. ...) orderedList:0
推荐文章
- 防止在GitHub上推送到master ?
- 我如何在github上引用特定问题的评论?
- 我如何才能看到我在Github上看到的所有问题?
- R -降价避免包装加载消息
- 在GitHub上链接到其他Wiki页面?
- 你如何跟踪你对GitHub问题的评论?
- 我如何在GitHub中为其他人的代码做出贡献?
- GitHub项目和里程碑之间的区别/关系是什么?
- gitignore是什么?
- 在MarkDown中包含SVG(托管在GitHub上)
- 新Github项目发布通知?
- 如何在本地删除分支?
- GitHub.com的存储库大小限制
- 使用Git管理变更日志的一些好方法是什么?
- Github权限被拒绝:ssh添加代理没有身份