为什么当我启动 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 文件中。
从 Vim 8.0 开始,如果 ~/.vimrc 不存在,则加载 $VIMRUNTIME/defaults.vim。
参见
:help defaults.vim
defaults.vim 文件在 /etc/vimrc 之后加载,这解释了为什么它会覆盖对 /etc/vimrc 或源自它的脚本的自定义。
要覆盖此行为,请将
let skip_defaults_vim = 1
添加到 /etc/vimrc 或您正在使用的任何 vimrc 文件中。