2011-01-13 35 views
7

的區別據我所知,VIM使得set並且在setl之間的差的第一個設置所有緩衝器的一個選項,而後者只設置選項毛皮當前緩衝。這是明顯的,如果我做了:set tw=80而不是:setl tw=80VIM:組和SETL鑑於文件類型

現在,當我做:set ft=plsql時,它只在當前緩衝區上運行,儘管我沒有做setl。這當然是有道理的。但是,我沒有看到這是否記錄在某處。所以,這個問題可能歸結爲:是否有默認情況下在當前緩衝區上運行的選項,而其他運行在「無處不在」以及在哪裏記錄?

回答

11

確實存在一些對當前緩衝區(事實上在某些情況下,當前窗口)操作選項。該文檔包含該選件的文檔。如果你去到任何:help option-list選項,這將有以下三個字符串作爲第三十歲上下行之一:

global 
local to window 
local to buffer 

(或它們的組合)。例如,:help 'ft'給出:

    *'filetype'* *'ft'* 
'filetype' 'ft'  string (default: "") 
      local to buffer 
      {not in Vi} 
      {not available when compiled without the |+autocmd| 
      feature} 
    When this option is set, the FileType autocommand event is triggered. 
    All autocommands that match with the value of this option will be 
    executed. Thus the value of 'filetype' is used in place of the file 
    name. 

所以這個選項是本地緩存。有關詳細討論,請參見:

:help option-summary 
0

當你在vim讀一個新的緩衝區,或者從一個緩衝區移動到另一個,VIM觸發BufEnter相當於其重新評估在緩衝區中的文件的文件類型。你可能會覆蓋在〜/ vim的吹走你的ftdetect目錄,並與只含au BufRead,BufNewFile,BufEnter * set filetype=plsql文件,此時所有的文件將被解讀爲SQL替換它這種行爲。如果您要取消設置所有文件類型檢測,則自動命令永遠不會觸發。