Vim选项作用域:全球-本地,本地和全局

问题描述 投票:1回答:1

|options|上的Vim帮助文档在选项和选项值之间进行了区分;以及全局,本地和全局-本地选项之间。这非常令人困惑,尤其是考虑到|local-options|

“可以专门为一种缓冲区设置本地窗口选项...。​​Vim保留该缓冲区的全局值。本地窗口选项,在编辑另一个缓冲区时使用。每个窗口都有这些值的自己的副本。因此这些在窗口中是本地的,但是窗口中所有缓冲区的全局值。“

在下面的示例中,它显示:setlocal list使本地窗口选项在缓冲区本地。但是全局或全局本地窗口选项如何?

谁能解释选项和值之间以及三种类型的选项之间的术语差异的原因?

vim
1个回答
0
投票

嗯,这很容易,IMO。只要考虑一下选项的用途。

说,confirm是全局的,因为每个Vim实例都有意义。因此,即使您执行setlocal confirm,它也将默默更改一个全局选项,因为它是唯一存在的一个。

接下来,expandtab是每个缓冲区本地的(请注意:某些选项可以是每个窗口本地的,例如:h 'diff')。但是,既存在全局expandtab(对于新创建的缓冲区,它实际上是expandtab的“当前默认值”)和本地expandtab(每个现有缓冲区一个)。还请注意,某些“默认值”几乎没有用(例如,无论如何,filetype都将由ftplugin设置,但是全局filetype存在)。

现在,什么是全球本地的?这只是为每个现有缓冲区创建的选项,可能会(也可能不会)创建。但是,当然,总有这样的全局选项。

与普通的本地选项有何不同?假设您在vimrc中:

setglobal noexpandtab noautoread

现在您运行Vim并输入:

:setlocal expandtab? autoread?

然后您得到回应:

noexpandtab
--autoread

这意味着您具有全局expandtabbuffer-local copy

,但是在当前缓冲区中根本没有创建local autoread,因此Vim会使用全局值。

以上总结:

  1. “全局选项”表示根本没有本地值。因此,始终使用全局值。

  2. “ Local option”表示所有缓冲区(或窗口)始终具有自己的副本,因此“ global”值仅作为默认值才有意义。

  3. “ Global-local option”表示某些缓冲区(或窗口)可能具有其副本,而其他缓冲区则没有。因此,Vim使用当前的本地选项(如果已设置),否则使用全局选项。

© www.soinside.com 2019 - 2024. All rights reserved.