如何让Vim理解* .md文件包含Markdown代码,而不是Modula-2代码?

时间:2014-04-24 20:38:00

标签: vim

当我在Vim中编辑包含Markdown代码的README.md并执行:set filetype?命令时,我看到filetype=markdown。 Markdown语法正确突出显示。

但是当我在Vim中编辑包含Markdown代码的foo.md并执行:set filetype?命令时,我看到filetype=modula2。 Markdown语法未正确突出显示。

我应该在〜/ .vimrc中添加什么来使Vim理解foo.md或任何扩展名为.md的文件是markdown文件而不是modula2文件?

2 个答案:

答案 0 :(得分:34)

问题原因

要了解设置此文件类型的脚本,我在编辑foo.md后执行了以下命令。

:verbose set filetype?

我找到了以下输出。

  filetype=modula2
        Last set from /usr/share/vim/vim74/filetype.vim

在/usr/share/vim/vim74/filetype.vim中,我找到了以下几行。

au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,README.md  setf markdown
au BufNewFile,BufRead *.m2,*.DEF,*.MOD,*.md,*.mi setf modula2

这些行显示编辑README.md时,文件类型设置为markdown,但在编辑扩展名为.md的任何其他文件时,文件类型设置为modula2。换句话说,* .md文件被识别为Modula-2源代码,但README.md例外,因为它被识别为Markdown代码,可能是由于GitHub上的README.md文件越来越流行。

解决方案

将〜/ .vimrc的以下语句添加到set filetype=markdown以获取所有.md文件。

autocmd BufNewFile,BufRead *.md set filetype=markdown

这句话说当开始编辑一个不存在的新文件或开始编辑新缓冲区时,在将文件读入缓冲区后,如果文件与模式*.md匹配则set filetype=markdown

更新

在我现在拥有的Vim的更新版本中,我发现此问题已不复存在。

$ vim --version | head -n 2
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Mar 31 2015 23:36:07)
Included patches: 1-488, 576
$ grep -E "markdown|modula2" /usr/share/vim/vim74/filetype.vim 
au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,*.md  setf markdown
au BufNewFile,BufRead *.m2,*.DEF,*.MOD,*.mi     setf modula2

ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.860处的补丁似乎已经做出了这一改变。但是,我对我的Vim版本中的补丁860中似乎可用的这些更改感到有点困惑,其中仅包含补丁1-448,576。

答案 1 :(得分:7)

更完整的答案与Markdown风味

另一个答案是正确的,但不完整。为了使其同样适用于Save As… :sav命令,需要使用BufFilePre扩展自动命令:

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

specify a Markdown flavour可能也很有趣,例如Pandoc

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

请注意,Vim目前只允许指定一种风味。