2014-09-22 14 views
1

從VIM維基:爲什麼在自定義文件類型文件中檢查did_load_filetypes?

自到的filetype.vim應該始終具有以下結構:

if exists("did_load_filetypes") 
    finish 
endif 

augroup filetypedetect 
    " au! commands to set the filetype go here 
augroup END 

我很奇怪,爲什麼是if ... ENDIF部分有必要嗎?

我認爲這基本上意味着如果文件類型已經加載,然後跳過加載這個腳本。但是在那種情況下,創建自定義文件類型文件有什麼意義?

+1

如果文件類型已經被加載,完成該過程 – 2014-09-22 13:33:36

回答

3

這只是一個包含警戒,以避免您的自定義文件類型被意外地多次來源。

如果一切順利,這看起來確實是多餘的,但是對於用戶配置,插件管理器等的所有變體,最好是安全的。它可以幫助Vim重新處理潛在的大量定義,加快啓動速度。

當這實際上來源兩次時會發生什麼?

如果您使用:autocmd而不是:autocmd!,您所有的檢測結果將被定義兩次。 (請注意,初始:autocmd!在這裏不能用來清除所有以前的定義,因爲多個filetype.vim文件都參與其中,而且一次只能增加到現有的。)

+0

所以它類似於c中的#ifdef。但在vim wiki中,他們沒有說你應該先定義did_load_filetypes? – qed 2014-09-22 17:27:13

+0

對。它只能由Vim運行時的'filetype.vim'定義。你的自定義只是補充。 – 2014-09-23 06:40:08