首页 > 解决方案 > VIM 文件类型——为什么有些文件类型匹配器使用“call”而其他的使用“setf”?

问题描述

假设我为 vim 编写了一个新的语法文件,适用于某些文件类型,现在我想将它集成到 vim (8.1) 中。我在看/usr/share/vim/vim81/filetypes.vim,我注意到有些行的形式是:

au BufNewFile,BufRead *.ext                     setf foo

对于一些扩展名.ext和语法文件syntax/foo.vim。但是有些行还有其他内容:

au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst,*.ptx     call dist#ft#FTasm()

或者

au BufNewFile,BufRead proftpd.conf*             call s:StarSetf('apachestyle')

为什么会有这种差异?我应该使用哪个?

标签: vimsyntax-highlightingvim-syntax-highlighting

解决方案


:setf foo是一个非常简单的命令,它将当前缓冲区的文件类型设置为(foo如果尚未设置)。

您引用的脚本的作者可能有其他需求,或者他们可能需要执行更多检查或其他任何内容,因此他们决定将所有这些内容封装在自定义函数中,这些函数使用:call FunctionName().

所以……</p>

  • 如果您有基本需求,请使用第一种形式,
  • 如果您有更复杂的需求,请使用第二种形式。

:help :setf:help :call


推荐阅读