问题原因
为了确定是哪个脚本设置了这个文件类型,我在编辑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中,以便为所有的 .md 文件设置filetype=markdown
。
autocmd BufNewFile,BufRead *.md set filetype=markdown
这个命令声明了,当开始编辑一个不存在的新文件或开始编辑一个新缓冲区时,在将文件读入缓冲区后,如果文件与模式*.md
匹配,则会设置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处的补丁已经做出了这个变化。但是,我对于这些变化如何在包含补丁1-448、576的我的Vim版本中得到的还有些困惑。
autocmd
行也可以放在~/.vim/ftdetect/markdown.vim
中。 - ajmccluskey