mzlogin
V2EX  ›  Vim

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

  •  
  •   mzlogin · Sep 16, 2016 · 4675 views
    This topic created in 3549 days ago, the information mentioned may be changed or developed.

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

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

    ![vim-auto-ime]( )

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

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

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

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

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

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

    感谢反馈哈!
    mzlogin
        24
    mzlogin  
    OP
       Sep 22, 2016
    @sfwn

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

    如果你乐意,麻烦反馈一下结论,多谢啦!
    sfwn
        25
    sfwn  
       Sep 22, 2016
    @mzlogin
    更新了你的插件,然后重新生成了一下,确实可以啦~ bingo
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1149 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 17:46 · PVG 01:46 · LAX 10:46 · JFK 13:46
    ♥ Do have faith in what you're doing.