vim - Vim 选项作用域:global-local、local 和 global
问题描述
Vim 帮助文档对|options|
选项和选项值进行了区分;以及在全局、本地和全局-本地选项之间。这非常令人困惑,尤其是考虑到|local-options|
:
“可以专门为一种缓冲区设置本地窗口选项.... Vim 保留本地窗口选项的全局值,在编辑另一个缓冲区时使用。每个窗口都有自己的这些值的副本。因此,这些对窗口来说是本地的,但对窗口中的所有缓冲区都是全局的。”
在随后的示例中,它显示了:setlocal list
使本地窗口选项成为缓冲区的本地选项。但是全局或全局本地窗口选项呢?
谁能解释选项和价值之间以及三种选项之间的术语差异的原因?
解决方案
嗯,这很容易,IMO。想想一个选项的用途。
说,confirm
是全局的,因为它对每个 Vim 实例都有意义。因此,即使您执行setlocal confirm
,也会默默地更改全局选项,因为它是唯一存在的选项。
接下来,expandtab
是每个缓冲区的本地选项(注意:某些选项可以是每个窗口的本地选项:h 'diff'
,例如 )。但是,同时存在全局expandtab
(本质上是expandtab
新创建缓冲区的“当前默认值”)和本地expandtab
(每个现有缓冲区一个)。另请注意,一些“默认值”几乎没有用(例如,无论如何filetype
都会设置ftdetect
,但尽管如此,全局filetype
存在)。
现在,什么是全球本地的东西?这只是一个可能(或可能不会)为每个现有缓冲区创建的选项。但是,当然,这种类型的全局选项总是存在的。
它与普通的本地选项有何不同?假设你的 vimrc 中有:
setglobal noexpandtab noautoread
现在你运行你的 Vim 并输入:
:setlocal expandtab? autoread?
然后你得到回应:
noexpandtab
--autoread
这意味着你有一个global的缓冲区本地副本expandtab
,但 localautoread
根本没有在当前缓冲区中创建,所以 Vim 会使用一个全局值。
综上所述:
“全局选项”意味着根本不存在局部值。所以总是使用全局值。
“本地选项”意味着所有缓冲区(或窗口)始终拥有自己的副本,因此“全局”值仅作为默认值有意义。
“全局本地选项”意味着一些缓冲区(或窗口)可能有它们的副本,但其他可能没有。所以 Vim 如果设置了则使用当前的本地选项,否则使用全局选项。
推荐阅读
- ios - 选择器未显示在列表中 | SwiftUI
- sql - ORA-02291 错误。不确定是什么导致了问题
- odata - 使用 oData 注释显示平面层次结构的 SAPui5 树表
- android - 如何通过存储库将视图模型中的参数传递给 Dao
- mysql - 如果条件不匹配则返回 0
- haskell - Haskell IO 字符串 -> 字符串
- c# - 在 Unity 引擎上的游戏中无法进行评分
- nssavepanel - 为什么将 NSSavePanel 显示为工作表而不是蜂鸣?
- python - 如何使用 seaborn 以正方形打印热图?
- reactjs - 为什么我不能在反应钩子的初始状态下使用数组