VIM文件类型-为什么一些文件类型匹配器使用;调用;及其他",;setf";?

VIM文件类型-为什么一些文件类型匹配器使用;调用;及其他",;setf";?,vim,syntax-highlighting,vim-syntax-highlighting,Vim,Syntax Highlighting,Vim Syntax Highlighting,假设我为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

假设我为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()


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

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

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

所以

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

请参见
:help:setf
:help:call

被调用的函数是否在语法文件中?第一个是自动加载的函数,请参见
:help autoload
。第二个似乎是在调用它的文件中定义的,请参见
:help s:
。如果我处于那种情况,我会选择第一个。
au BufNewFile,BufRead proftpd.conf*             call s:StarSetf('apachestyle')