为什么 vim 在启动时加载 /etc/vimrc 与源命令不同

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

为什么当我启动 vim 时和启动

/etc/vimrc
时,某些
:source /etc/vimrc
设置下 vim 的行为有所不同?

场景:我正在编辑一个 PHP 文件,并且有一些我不喜欢的插件行为,因此我禁用了源自

/etc/vimrc.custom
/etc/vimrc
中的文件类型插件:

filetype plugin off

当我

:source /etc/vimrc
:verbose filetype
正确报告
filetype detection:ON  plugin:OFF  indent:ON
)时,这会按预期工作,但是当我刚刚在文件上启动vim时,很明显插件已打开(
:verbose filetype
报告
filetype detection:ON  plugin:ON  indent:ON
)。

/etc/vimrc
是默认值,在底部添加了
source /etc/vimrc.custom

作为测试,如果我直接在 vim 会话中

:source /etc/vimrc.custom
,它会做正确的事情(
:verbose filetype
正确报告
filetype detection:ON  plugin:OFF  indent:ON
)。

更新: ~/.vimrc 的存在很重要(无论是否为空),因为它改变了脚本的加载,如

:scriptnames
所示。显著地。最重要的是,对我来说,/usr/share/vim/vim82/indent.php 会在没有 ~/.vimrc 的情况下加载并覆盖 formatoptions,而当 ~/.vimrc 存在(甚至可以为空)时,不会加载 indent.php。

更新:从 Vim 8.0 开始,如果 ~/.vimrc 不存在,则会加载 $VIMRUNTIME/defaults.vim 。请参阅

:help defaults.vim
。该文件在 /etc/vimrc 之后加载,这解释了为什么它会覆盖对 /etc/vimrc 或源自它的脚本的自定义。要覆盖此行为,请将
let skip_defaults_vim = 1
添加到 /etc/vimrc 或您正在使用的任何 vimrc 文件中。

linux vim
1个回答
0
投票

从 Vim 8.0 开始,如果 ~/.vimrc 不存在,则加载 $VIMRUNTIME/defaults.vim。

参见

:help defaults.vim

defaults.vim 文件在 /etc/vimrc 之后加载,这解释了为什么它会覆盖对 /etc/vimrc 或源自它的脚本的自定义。

要覆盖此行为,请将

let skip_defaults_vim = 1
添加到 /etc/vimrc 或您正在使用的任何 vimrc 文件中。

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