|options|
上的Vim帮助文档在选项和选项值之间进行了区分;以及全局,本地和全局-本地选项之间。这非常令人困惑,尤其是考虑到|local-options|
:
“可以专门为一种缓冲区设置本地窗口选项...。Vim保留该缓冲区的全局值。本地窗口选项,在编辑另一个缓冲区时使用。每个窗口都有这些值的自己的副本。因此这些在窗口中是本地的,但是窗口中所有缓冲区的全局值。“
在下面的示例中,它显示:setlocal list
使本地窗口选项在缓冲区本地。但是全局或全局本地窗口选项如何?
谁能解释选项和值之间以及三种类型的选项之间的术语差异的原因?
嗯,这很容易,IMO。只要考虑一下选项的用途。
说,confirm
是全局的,因为每个Vim实例都有意义。因此,即使您执行setlocal confirm
,它也将默默更改一个全局选项,因为它是唯一存在的一个。
接下来,expandtab
是每个缓冲区本地的(请注意:某些选项可以是每个窗口本地的,例如:h 'diff'
)。但是,既存在全局expandtab
(对于新创建的缓冲区,它实际上是expandtab
的“当前默认值”)和本地expandtab
(每个现有缓冲区一个)。还请注意,某些“默认值”几乎没有用(例如,无论如何,filetype
都将由ftplugin
设置,但是全局filetype
存在)。
现在,什么是全球本地的?这只是为每个现有缓冲区创建的选项,可能会(也可能不会)创建。但是,当然,总有这样的全局选项。
与普通的本地选项有何不同?假设您在vimrc中:
setglobal noexpandtab noautoread
现在您运行Vim并输入:
:setlocal expandtab? autoread?
然后您得到回应:
,但是在当前缓冲区中根本没有创建localnoexpandtab --autoread
这意味着您具有全局
expandtab
的buffer-local copy
autoread
,因此Vim会使用全局值。 以上总结:
“全局选项”表示根本没有本地值。因此,始终使用全局值。
“ Local option”表示所有缓冲区(或窗口)始终具有自己的副本,因此“ global”值仅作为默认值才有意义。
“ Global-local option”表示某些缓冲区(或窗口)可能具有其副本,而其他缓冲区则没有。因此,Vim使用当前的本地选项(如果已设置),否则使用全局选项。