代码之家  ›  专栏  ›  技术社区  ›  einpoklum

VIM文件类型-为什么一些文件类型匹配器使用“call”而其他文件类型匹配器使用“setf”?

  •  0
  • einpoklum  · 技术社区  · 3 年前

    我现在想把vim.8集成到一个新的文件中。我在看 /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')
    

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

    0 回复  |  直到 3 年前
        1
  •  1
  •   romainl    3 年前

    :setf foo 是一个非常简单的命令,将当前缓冲区的文件类型设置为 foo 如果还没定下来。

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

    所以

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

    看见 :help :setf :help :call .