VIM:文件类型中set和setl之间的差异

时间:2011-01-13 15:08:51

标签: vim

我理解VIM在setsetl之间有所不同,因为第一个为所有缓冲区设置了一个选项,而后一个设置了当前的选项仅限缓冲区。如果我做:set tw=80而不是:setl tw=80,这是很明显的。

现在,当我执行:set ft=plsql时,它只会对当前缓冲区进行操作,尽管我没有执行setl。当然,这是有道理的。然而,我没有看到是否在某处记录了这一点。所以,这个问题可能归结为:是否存在默认情况下在当前缓冲区上运行而其他选项在“无处不在”运行的选项以及记录在哪里的选项?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

当你在vim中读取一个新的缓冲区,或者从一个缓冲区移动到另一个缓冲区时,vim会触发相当于BufEnter的内容,它会重新评估该缓冲区中文件的文件类型。您可以通过吹掉〜/ .vim中的ftdetect目录并将其替换为仅包含au BufRead,BufNewFile,BufEnter * set filetype=plsql的文件来覆盖此行为,此时所有文件都将作为SQL读取。如果要取消设置所有文件类型检测,则自动命令将永远不会触发。