Vim与Markdown共舞

xiongweiwei00 2019-06-21

Vim作为编辑器之神,用于Markdown的编辑和阅读,会擦出什么样的火花呢?

因为受不了某知笔记的编辑体验,前段时间探索了在Vim中编辑和管理Markdown笔记的可能解决方案。最后,我找到了一个自认为不错的方案,相比很多Markdown编辑器来说甚至有更好的体验。

语法高亮

作为纯文本格式,如何在Markdown文档中快速找到所需要的内容,是影响Markdown编辑体验的一个关键因素。作为最佳的状态,如果编辑时能提供和阅读时一样的排版或样式,那么Markdown的编写就可以既高效又简洁美观了。因此,一个好的Markdown编辑器应该能尽可能地减小Markdown作为标记语言与生俱来的 编辑与阅读之间的割裂感

语法高亮是一个比较好的解决方案。试想,如果加粗、斜体等都使用粗体和斜体来高亮,代码块、链接等都使用和渲染时差不多的样式来高亮,那么其实编辑和阅读也就差不多都是那么回事了。

Vim本来也支持Markdown的语法高亮,但是做得还不够。我使用 gabrielelana/vim-markdown 插件来增强高亮。另外, 为了满足其他一些需要,我Fork了该插件进行了一些改进 tamlok/vim-markdown

另外,使用的配色方案是tamlok/detorte.该配色方案支持亮色和暗色两个主题,相对比较柔和。对上面提到的vim-markdown插件专门适配过。

先来一个效果图:

Vim与Markdown共舞

可以看到:

  1. normal modeinsert mode都是粗体,组合命令则是斜体;

  2. 标题根据不同的层级,也有区分,且以粗体显示,分明醒目;

  3. 行内代码,如N<command>使用类似预览的样式来显示(灰底);

  4. 有序列表的序号、表格、链接等也有非常好的区分度;

  5. 利用Vim的 Conceal 特性,适当地隐藏了一些非内容的标记,如粗体的**、斜体的*、行内代码的标记和链接的URL部分等。这样,可以避免大量标记喧宾夺主,令人分心。

通过语法高亮,基本就很容易抓住文章的内容和结构了。

另外,对于代码块,再推荐一个插件joker1007/vim-markdown-quote-syntax,支持代码块内的代码语法高亮,非常炫酷。

渲染预览

因为经常需要在Windows和Linux上工作,因此需要一个同时支持这两个平台的渲染插件。

iamcco/markdown-preview.vim 是一个同时支持Windows, Linux和MacOS的Markdown预览插件。通过以下配置,基本就可以做到一个按键预览当前笔记了。

let g:mkdp_path_to_chrome="chrome"
let g:mkdp_auto_close=0
nmap <F7> <Plug>MarkdownPreview
nmap <F8> <Plug>StopMarkdownPreview

大纲

大纲有助于编写的时候时刻抓住文章的结构,对文章有一个整体的控制。

提到大纲,肯定不能不提鼎鼎大名的majutsushi/tagbar。但是,该插件默认是不支持Markdown的。

其实,主要产生ctags格式的输出,tagbar就能渲染。网上已经有很多教程,例如只要添加markdown2ctags.py就可以实现在tagbar中显示Markdown的大纲目录了。

效果如下:

Vim与Markdown共舞

笔记管理

笔记管理直接使用插件scrooloose/nerdtree即可。该插件还支持收藏夹,可以对应到笔记本的概念。

Vim与Markdown共舞

查找

Vim有着强大的查找、搜索功能,所以对于纯文本的Markdown来说,完全可以拿过来用。这里就不多啰嗦了,比如:vimgrep, ggreer/the_silver_searcher等。

结语

折腾下来,Vim下编辑Markdown笔记完全是没有任何问题的,特别是语法高亮和Conceal特性,可以尽可能地减小Markdown与生俱来的割裂感。

不过,实在遗憾的是GVim也不支持显示图片,否则,如果能在编辑的时候就预览图片链接,将会是多么美好呀?另外,对于图片,也是需要手动管理,这也是一个缺憾。

工作中,我使用这套解决方案来记录Markdown笔记大概差不多两个月。后来,实在忍不住,基于Vim的这些优点折腾了一个Markdown笔记软件 VNote,在工作中完全取代某知笔记了,哈哈!

VNote

强烈推荐一个! Github项目主页,之前写的一篇介绍文章SegmentFault VNote。

相关推荐

xiongweiwei00 / 0评论 2020-05-26
tenvainvi / 0评论 2020-05-10
Kingcxx / 0评论 2020-03-07
xiongweiwei00 / 0评论 2020-03-04