V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mzlogin
V2EX  ›  Vim

为 Markdown 文档生成 Table of Contents 的 Vim 插件

  •  
  •   mzlogin · 2016-09-16 09:16:27 +08:00 · 3717 次点击
    这是一个创建于 2751 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 Vim 编辑一个较长的 Markdown 文档时,如果想要手动维护 Table of Contents 是一件痛苦的事情,而且不同的 Markdown 解析引擎给标题生成的锚点链接并不一样,使用一款插件来替我们做这件事情会更方便。

    插件 GitHub 链接:https://github.com/mzlogin/vim-markdown-toc

    开发这个插件的时候感受倒是没有多深刻,近期维护我的一个开源文档项目 awesome-adb(文档长度近 2000 行,各级标题超过 80 个)时才实实在在地体会到这样一个功能对使用 Vim 编辑 Markdown 文档的用户还是挺实用的,节省了很多时间。

    插件效果截图:

    generate-toc-by-vim-markdown-toc

    有此需求的童鞋可以 Star 收藏和试用起来,欢迎反馈和建议。

    25 条回复    2016-09-22 14:57:39 +08:00
    matrix67
        1
    matrix67  
       2016-09-16 10:56:15 +08:00 via Android
    toc 呀
    infun
        2
    infun  
       2016-09-16 11:10:13 +08:00 via Android
    @matrix67 好像有些不支持
    mzlogin
        3
    mzlogin  
    OP
       2016-09-16 11:36:39 +08:00 via Android
    @infun 你好~是指什么样的不支持呢?可以具体说一下吗
    infun
        4
    infun  
       2016-09-16 12:14:01 +08:00
    @mzlogin 有些编辑器好像不支持 [TOC]
    mzlogin
        5
    mzlogin  
    OP
       2016-09-16 12:31:41 +08:00
    @infun 这是 Vim 的插件……专门为 Vim 写的。
    everettjf
        6
    everettjf  
       2016-09-16 12:52:25 +08:00
    赞。
    不过,我曾经很想适应 Vim 写中文文章,但后来实在是觉得输入法的切换太过麻烦,后来干脆只在写代码时用 vim (或 vim 的 ide 插件)。
    楼主是怎么解决这个问题的?
    tracyone
        7
    tracyone  
       2016-09-16 13:10:06 +08:00 via iPhone
    不错,已经 star
    mzlogin
        8
    mzlogin  
    OP
       2016-09-16 13:25:43 +08:00
    @tracyone 谢谢支持~
    mzlogin
        9
    mzlogin  
    OP
       2016-09-16 13:31:38 +08:00
    @everettjf 困扰应该主要是从 Insert Mode 回到 Normal Mode 和末行模式时如果还是中文输入法的话比较烦躁吧?

    这个问题我也存在一定的困扰,目前会在 Windows 和 macOS 下使用 Vim ,主要使用 GUI ,使用 shift 切换中英文。 macOS 下目前有一些问题,反倒是 Windows 下会在 Esc 的时候自动切换到英文:

    ![vim-auto-ime]( )

    所以 Windows 下这样用还挺顺畅的, Esc 完就能放心地使用 Normal Mode 和末行模式了。

    回头我探索一下 macOS 下能否有好的解决方案,有进展再回复你。
    bao3
        10
    bao3  
       2016-09-16 13:56:02 +08:00 via Android
    @everettjf VIM 有自动输入法转换
    everettjf
        11
    everettjf  
       2016-09-16 14:15:20 +08:00
    @mzlogin
    @bao3
    感谢,有空我再试试哈
    tracyone
        12
    tracyone  
       2016-09-16 14:44:44 +08:00 via Android
    @everettjf 参考我配置,搜索 fcitx
    ashfinal
        13
    ashfinal  
       2016-09-16 15:07:34 +08:00
    @mzlogin 关注 mac 下的输入法自动切换很久了,貌似没有现成的方案。有进展通知我呀 : )
    mzlogin
        14
    mzlogin  
    OP
       2016-09-16 15:34:55 +08:00
    @ashfinal 没问题~
    yuuko
        15
    yuuko  
       2016-09-16 17:06:56 +08:00 via Android
    @mzlogin mac 可以 github 搜索 smartim ,不过和 multi-cursor 插件有冲突,如果 neovim 可以试下我改的 smartIM.nvim
    mzlogin
        16
    mzlogin  
    OP
       2016-09-16 21:23:21 +08:00
    @everettjf
    @ashfinal

    在 @yuuko 的提示下,找到个感觉还不错的解决方案,参考 https://www.v2ex.com/t/45772

    使用插件 smartim 也可以,用那个帖子里 6 楼的配置也行,我现在在 MacVim 里使用 6 楼的配置,只是 ims 改成了 1 ,用起来挺顺手的。

    感谢 @yuuko
    everettjf
        17
    everettjf  
       2016-09-16 22:43:06 +08:00
    @tracyone
    @yuuko 感谢,马上试用试用
    ashfinal
        18
    ashfinal  
       2016-09-17 16:14:44 +08:00
    @mzlogin 感谢回复!
    你说的 6 楼的配置在 MacVim 下工作良好,但是终端 vim 下似乎有问题。
    经过一番试用,最后选择了 smartim 插件的方案。非常感谢~
    mzlogin
        19
    mzlogin  
    OP
       2016-09-17 18:32:46 +08:00 via Android
    @ashfinal 终端 Vim 下确实没生效,貌似是没有自动切换,不过我一般使用 GUI ,终端下开 Vim 一般就是改改配置文件啥的,所以希望保持始终在英文,这个问题倒是反倒遂了我的意。。。各取所需,怎么顺手怎么来😁😁😁
    sfwn
        20
    sfwn  
       2016-09-21 23:32:11 +08:00
    你好楼主,生成的 TOC 好像不能正确跳转呀?
    mzlogin
        21
    mzlogin  
    OP
       2016-09-21 23:43:37 +08:00
    @sfwn 请问是用于哪里的 Markdown 文档呢?目前支持 GFM 和 Redcarpet 两种解析引擎,如果您说的是属于这两种的,可以提供一个生成的锚点链接不对的标题吗?我看看能不能修复。
    sfwn
        22
    sfwn  
       2016-09-22 10:03:00 +08:00
    @mzlogin
    Base64: aHR0cHM6Ly9naXRodWIuY29tL3Nmd24vYm9vdC1rb3RsaW4vYmxvYi9tYXN0ZXIvUkVBRE1FLm1k
    这个网址里面是正常的
    Base64: aHR0cHM6Ly9naXRodWIuY29tL3Nmd24vcHJhY3RpY2UvYmxvYi9tYXN0ZXIvUkVBRE1FLm1k
    第二个网址里 因为我的标题里有特殊字符 '`',导致就无法跳转了,还有我的每个标题后面都加了两个空格,忘了是什么风格了,楼主你看下是不是有影响,要不要考虑自动去掉末尾的空格
    mzlogin
        23
    mzlogin  
    OP
       2016-09-22 11:23:48 +08:00
    @sfwn

    第二个网址里是因为标题末尾的空格的原因,'`' 符号插件里是处理过的。有的 Markdown 解析引擎会要求换行使用空行或者在行尾加两个空格,但标题一般是没有要求的,不过行尾的空格我的插件里兼容处理一下会更好,我稍后更新一下。

    感谢反馈哈!
    mzlogin
        24
    mzlogin  
    OP
       2016-09-22 12:55:31 +08:00
    @sfwn

    我已经修复了标题末尾空格的问题,现在插件应该可以兼容你的第二个网址的文档里的情况了,你更新插件一下试试~

    如果你乐意,麻烦反馈一下结论,多谢啦!
    sfwn
        25
    sfwn  
       2016-09-22 14:57:39 +08:00
    @mzlogin
    更新了你的插件,然后重新生成了一下,确实可以啦~ bingo
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2443 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:52 · PVG 23:52 · LAX 08:52 · JFK 11:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.