为什么要检查自定义文件类型文件中的 did_load_filetypes ?

qed*_*qed 4 vim file-type

来自 vim 维基:

自定义 filetype.vim 文件应始终具有以下结构:

if exists("did_load_filetypes")
  finish
endif

augroup filetypedetect
  " au! commands to set the filetype go here
augroup END
Run Code Online (Sandbox Code Playgroud)

我想知道为什么 if...endif 部分是必要的?

我认为这基本上意味着如果文件类型已加载,则跳过加载此脚本。但在这种情况下,创建自定义文件类型文件有什么意义呢?

Ing*_*kat 5

这只是一个包含保护,以避免您的自定义文件类型被意外多次获取。

如果一切顺利,这确实看起来多余,但由于用户配置、插件管理器等存在各种变化,最好是安全的。而且它使 Vim 免于重新处理可能很大的定义列表,从而加快启动速度。

当它实际上来源两次时会发生什么?

如果您使用:autocmd而不是:autocmd!,则所有检测都将被定义两次。:autocmd!(请注意,此处不能使用首字母来清除所有先前的定义,因为filetype.vim涉及多个文件,并且每个文件仅添加到现有文件中。)