在Vim中启用Markdown语法高亮

152

我在我的 MacBook Air 上使用 OS X Lion 中的终端中运行 Vim,但我似乎找不到一个好的 Markdown 语法高亮插件。

到目前为止,我已经尝试了 plasticboy 插件和 Tim Pope 的插件。plasticboy 插件还算可以用,但是导致了行末的空格被高亮显示,我还没有找出如何关闭它。(这真的很烦人,因为每次我写字时敲击空格就会高亮显示字符)

Tim 的插件似乎没有做太多的高亮处理,除了可能使用了###的标题之外。代码块和项目符号都被忽略了。我可能错过了一些东西。我确实在我的 Markdown 文件上使用了.md扩展名,所以它应该会识别文件类型。

我也见过有关于 Vim 7.3 内置 Markdown 支持的参考资料,但如果没有其中的任何一个插件,我就无法进行任何高亮显示。

这两个插件需要特定的配色方案才能工作吗?


26
“*.md”不是适用于Markdown的正确扩展名,该扩展名是用于Modula文件的。Tpope插件可以正常工作(所有这些插件都可以正常工作)。你应该使用“*.markdown”扩展名。 - lucapette
7
@lucapette,Tim Pope插件的ftdetect确实包括*.md,还包括:*.markdown, *.mdown, *.mkd, *.mkdn。而plasticboy插件只自动检测*.mkd、*.markdown、*.mdwn - pb2q
1
从plasticboy插件源代码来看,它似乎也能检测到.md。目前我被限制使用这个扩展名,因为我正在使用Scriptogr.am写博客,而这是他们目前唯一认可的扩展名。 - Josh Earl
1
刚发现这个东西,对于 GitHub 风格的 Markdown 真是太棒了:https://github.com/jtratner/vim-flavored-markdown - Matthew Turner
1
对于 plasticboy/vim-markdown 的问题,请在项目上开启问题,以便开发人员解决。我发现突出显示尾随空格是一种良好的行为,因为双空格会生成 <br> 标签,因此应让作者意识到这一点。 - Ciro Santilli OurBigBook.com
显示剩余4条评论
6个回答

320
关于Markdown的本地语法高亮,我认为默认情况下它只适用于扩展名为.markdown的文件。
我在我的.md文件中遇到了Markdown语法高亮的问题。
我尝试过:
:set syntax=markdown

它有效了。所以我在我的.vimrc文件中加入了以下行:

au BufNewFile,BufFilePre,BufRead *.md set filetype=markdown

现在我的vim可以对.md文件进行语法高亮了。

对于:sav命令,需要设置BufFilePre参数,详见此处


15
对于其他阅读此文的人:是的,它有效,并且比安装插件要简单得多。从命令行快速执行此操作的方法是:将“au BufRead,BufNewFile *.md set filetype=markdown”添加到.vimrc文件中。 - RobinLovelace
11
我认为这应该是被接受的答案。 - Enrico Campidoglio
4
这不是一个错误,".md" 也被 Modula 使用。检测该使用哪个需要一些高级启发式算法。 - alexia
9
从 Vim 7.4.480 版本开始,默认会将 *.md 文件识别为 Markdown 格式。 - fwalch
1
太好了!我正在一个vagrant box中操作,每次vagrant up都需要设置vim插件将是一件真正的痛苦...这个方法简单得多。应该被接受为解决方案。 - Wildcard
显示剩余7条评论

25

本地语法高亮

Markdown 的本地语法高亮默认仅适用于 .markdown 文件扩展名。

.vimrc 中添加以下行可在 vimgvim 中获得最佳结果:

autocmd BufNewFile,BufFilePre,BufRead *.md set filetype=markdown.pandoc

说明:

1. 指定你的Markdown格式!

如果你主要使用一种Markdown格式(比如Pandoc),请务必一并说明!这样做可以混合使用Markdown和Pandoc的Vim插件。例如:我发现vim-pandoc-syntax插件特别适合我的语法高亮需求,但是我仍然使用更通用的vim-markdown-folding来进行Markdown折叠。

顺便提一下,只允许一种格式,以点号分隔,例如:filetype=markdown.pandoc

2. gvim需要BufFilePre

gvim需要在自动命令行中添加额外的BufFilePre来识别Markdown文件类型,以便使用Save As… :sav命令。


22
这应该可以用来禁用使用plasticboy mkd插件时的行末空格高亮显示:
:syn clear mkdLineBreak

你可以针对必要的文件扩展名使用autocmd,这样每次加载markdown文件时就不需要再做一遍了。

注意:这种特定的高亮存在是因为Markdown会将以2个或更多空格字符结尾的行插入一个<br>,因此这很有用。

plasticboy插件使用TODO高亮显示这个规则,这可能有点过分,因为默认情况下它被设计为非常鲜艳——黄色背景——以便突出显示。您可以通过更改highlight规则使其不那么引人注目。一种快速的方法是:

:hi link mkdLineBreak Underlined

现在,这些行末空格将显示为下划线。尝试链接到其他highlight组来寻找更适合您的内容。除了使用link,您还可以更具体地指定这些行末空格的显示方式:例如,您可以使用自己的highlight命令,指定自定义ctermfgctermbgguifgguibg设置,使其显示为比正常背景略微明亮/暗淡。

与上面一样,您可以使用autocmd应用您的特定设置。

有关链接highlight组的更多信息,请键入::help group-name,您将看到可以链接的组列表,它们本身应该使用其当前的highlight规则有帮助地显示。还有::help highlight


2
这很有道理。我没有意识到在Markdown中两个空格具有重要意义。我想我会保持启用,除非它一直困扰着我。谢谢! - Josh Earl
是的,这就是为什么只有输入了2个空格后才会出现高亮显示。 - pb2q
@josh-earl,请看我的编辑,使用plasticboy插件时有更多可选项。 - pb2q

16

Tim的插件中,.md扩展名只适用于README.md,因为filetype.vim这样指定。

" Markdown
au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,README.md  setf markdown

3
错误;你可能在想默认的 Vim 安装,它有这种行为。Tim 的插件会覆盖所有 .md 文件的默认设置。请参考 https://github.com/tpope/vim-markdown/blob/master/ftdetect/markdown.vim。 - corvec

7
如果您不喜欢将所有配置都放在~/.vimrc中,您可以创建~/.vim/ftdetect/markdown.md(或其Windows等效物),并添加以下内容: au BufNewFile,BufRead *.md setf markdown

0

不确定这是多久之前的事了,但在我的.vimrc文件中,这个功能是原生支持的,详情请参考这里https://github.com/tpope/vim-markdown

syntax on
filetype plugin indent on
let g:markdown_fenced_languages = ['html', 'python', 'bash=sh']

在 macOS Monterey 上使用通过 brew install macvim 安装的 vim。
vim --version|head -5
VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Feb 07 2023 11:35:56)
macOS version - x86_64
Included patches: 1-1276
Compiled by Homebrew
Huge version with MacVim GUI.  Features included (+) or not (-):

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接