vim - 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')
为什么会有这种差异?我应该使用哪个?
解决方案
:setf foo
是一个非常简单的命令,它将当前缓冲区的文件类型设置为(foo
如果尚未设置)。
您引用的脚本的作者可能有其他需求,或者他们可能需要执行更多检查或其他任何内容,因此他们决定将所有这些内容封装在自定义函数中,这些函数使用:call FunctionName()
.
所以……</p>
- 如果您有基本需求,请使用第一种形式,
- 如果您有更复杂的需求,请使用第二种形式。
见:help :setf
和:help :call
。
推荐阅读
- objective-c - 如何将带有非托管引用的 Swift 代码移植到 Objective-C
- enums - GRAPH API 无法过滤枚举
- laravel - 如何在电子邮件 Laravel 中有表单?
- javascript - 单击背景 div 时关闭 div
- php - 将 MySQL 表的插入限制为 N 行
- java - Spring Web Flow 是否有任何基于注释的版本?
- c# - 当我尝试使用设计师的表单类变量时,为什么会出错?
- sql - 循环一个表,选择另一个表并使用 SQL/VBA 更新第一个表的值
- php - 如何用小写标签搜索结果的链接替换标签?
- angular - 如何在我的应用程序中将 ng 模型值用作全局值?