为 Markdown 生成 TOC 的 Vim 插件

2022-03-28 12:55:01 浏览数 (1)

因为饱受 GFM 和 Redcarpet 两种 Markdown 引擎生成 TOC 链接的差异的折磨,而我又不得不同时使用它们——博客基于 Jekyll 使用 Redcarpet(Update 2016/09/16: GitHub Pages 现在已经改为只支持 kramdown),而其它放在 GitHub 仓库里的文档使用 GFM,我决定为我常用的 Markdown 编辑器 Vim 做一款同时支持 GFM 和 Redcarpet 两种 TOC 链接风格的 Table of Contents 自动生成插件。

这算是我真正意义上完全独立开发的第一款实用 Vim 插件,当然开发过程中也参考了别人的做法。

下载地址

  • vim-markdown-toc

功能

  • 为 Markdown 文件生成 Table of Contents,目前支持 GFM 和 Redcarpet 两种链接风格。
  • 更新已经存在的 Table of Contents。
  • 保存文件时自动更新 Table of Contents。

使用方法

生成 Table of Contents

将光标移动到想在后面插入 Table of Contents 的那一行,然后运行下面的某个命令:

  1. :GenTocGFM 生成 GFM 链接风格的 Table of Contents。 适用于 GitHub 仓库里的 Markdown 文件,比如 README.md,也适用用于生成 GitBook 的 Markdown 文件。
  2. :GenTocRedcarpet 生成 Redcarpet 链接风格的 Table of Contents。 适用于使用 Redcarpet 作为 Markdown 引擎的 Jekyll 项目或其它地方。

更新已存在的 Table of Contents

通常不需要手动做这件事,保存文件时会自动更新已经存在的 Table of Contents。

除非是在配置里关闭了保存时自动更新,并且维持插入 Table of Contents 前后的 <!-- vim-markdown-toc -->,此时可使用 :UpdateToc 命令手动更新。

删除 Table of Contents

:RemoveToc 命令可以帮你删除本插件生成的 Table of Contents。

安装方法

推荐使用 Vundle 来管理你的 Vim 插件,这样你就可以简单三步完成安装:

在你的 vimrc 文件中添加如下内容:

:so $MYVIMRC

:PluginInstall

使用 vim-plug 安装的过程的与此基本一样。

配置选项

g:vmt_auto_update_on_save

插件会自动更新已经存在的 Table of Contents,如果你不想要这个功能,可以在你的 vimrc 文件里加入如下内容关闭:

g:vmt_dont_insert_fence

在默认情况下,:GenTocXXX 命令会在插入的 Table of Contents 前后加上 <!-- vim-markdown-toc -->,这是为了实现自动和手动更新 Table of Contents 功能。

代码语言:javascript复制
let g:vmt_dont_insert_fence = 1

g:vmt_cycle_list_item_markers

在默认情况下,所有 Table of Contents 项目前面的标记都是 *

这里提供一个选项改变这个行为,如果设置:

那标记将根据级别循环使用 *-

这不会影响 Markdown 文档解析后的显示效果,只用于提升源文件的可读性。

屏幕截图

使用本插件生成 TOC 的英文文档在线示例

使用本插件生成 TOC 的中文文档在线示例

0 人点赞