为 Markdown 文档生成 Table of Contents 的 Vim 插件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mzlogin
V2EX    Vim

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

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

    使用 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 呀
    GlobalNPC
        2
    GlobalNPC  
       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 你好~是指什么样的不支持呢?可以具体说一下吗
    GlobalNPC
        4
    GlobalNPC  
       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 的提示下,找到个感觉还不错的解决方案,参考 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 请问是用于哪里的 Mardown 文档呢?目前支持 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     Solana     5262 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 08:52 PVG 16:52 LAX 00:52 JFK 03:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86