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

Vim:如何完全禁用某些文件类型的语法,vim,Vim,我试图在Vim中使用autocmd禁用标记文件的语法。我的.vimrc中有以下内容: function! SyntaxOff() echom "one" syntax off echom "two" endfunction autocmd filetype markdown exe "call SyntaxOff()" 当我打开一个标记文件并检查:messages时,我可以看到一个和两个,但语法仍处于启用状态。如果我打开一个虚拟文件,然后打开一个标记文件,那么我可以看到

我试图在Vim中使用
autocmd
禁用标记文件的语法。我的
.vimrc
中有以下内容:

function! SyntaxOff()
    echom "one"
    syntax off
    echom "two"
endfunction
autocmd filetype markdown exe "call SyntaxOff()"
当我打开一个标记文件并检查
:messages
时,我可以看到
一个
两个
,但语法仍处于启用状态。如果我打开一个虚拟文件,然后打开一个标记文件,那么我可以看到语法被禁用。如果我打开一个不同文件类型的文件,那么语法仍然是禁用的。我的猜测是,当我第一次打开Vim时,
.vimrc
中的其他内容正在重新启用语法,但在函数运行之后,语法将永久关闭


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

您应该将您的自动命令包装在一个复选框中,也可以包装在一个组中,否则您将设置多个自动命令(资源泄漏),Vim在长时间使用后会变慢。对于自动命令,最好使用文件类型而不是正则表达式/匹配器。然而,在某些情况下,正则表达式是有意义的。在本例中,我认为您需要使用正则表达式来匹配*.md以及标记文件,因为Vim不会将*.md检测为标记

if has("autocmd")
  augroup standard
    autocmd!

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

  augroup END
endif

@kev的回答向您展示了如何通过修改文件类型检测完全禁用标记文件类型

如果要保留文件类型和缩进插件,只需禁用语法,您可以:

事后关掉 使用以下命令创建
~/.vim/after/syntax/markdown.vim

setlocal syntax=
if exists("b:current_syntax")
finish
endif
let b:current_syntax = "markdown"
避免打开电源 使用以下命令创建
~/.vim/syntax/markdown.vim

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