Vim:如何为某些文件类型完全禁用语法

时间:2014-09-14 03:06:45

标签: vim

我尝试在Vim中使用autocmd禁用Markdown文件的语法。我的.vimrc

中有以下内容
function! SyntaxOff()
    echom "one"
    syntax off
    echom "two"
endfunction
autocmd filetype markdown exe "call SyntaxOff()"

当我打开Markdown文件并检查:messages时,我可以看到onetwo,但语法仍然存在。如果我打开一个虚拟文件然后打开一个Markdown文件,那么我可以看到该语法被禁用。如果我然后打开不同文件类型的文件,则仍然禁用语法。我的猜测是我的.vimrc中的其他内容在我第一次打开Vim时重新启用了语法,但是在函数运行之后语法被永久关闭。

所以我的问题是(1)当我直接打开Markdown文件(即不使用上述操作)时,如何禁用Markdown文件的语法? (2)当我打开另一个不同文件类型的文件时,如何让Vim重新启用语法?

2 个答案:

答案 0 :(得分:1)

您应该将自动命令包装在支票中以及组中,否则您将设置多个自动命令(资源泄漏),并且Vim将在长时间使用后减速。对于自动命令,使用FileTypes而不是正则表达式/匹配器也更好。但是,在某些情况下,正则表达式是有意义的。在这种情况下,我认为你想使用正则表达式来匹配* .md以及markdown文件,因为Vim没有将* .md检测为降价。

if has("autocmd")
  augroup standard
    autocmd!

    autocmd BufNewFile,BufRead *.markdown,*.md setlocal setfiletype disabled

  augroup END
endif

答案 1 :(得分:1)

@kev的回答显示了如何通过修改文件类型检测来完全禁用Markdown文件类型。

如果你想保留文件类型和缩进插件,并且只是禁用语法,你可以:

事后

关闭

使用以下内容创建~/.vim/after/syntax/markdown.vim

setlocal syntax=

避免开启

使用以下内容创建~/.vim/syntax/markdown.vim

if exists("b:current_syntax")
finish
endif
let b:current_syntax = "markdown"