为何要在.vimrc开头添加`if has('vim_starting') set nocompatible endif`?
在.vimrc开头添加
has('vim_starting')的要求及代码解释 嘿,这个问题问到点子上了——不少刚上手Vim配置的朋友都会对这段开头代码感到困惑,我来给你掰扯清楚细节。
关于has('vim_starting')的使用要求
- 必须放在**.vimrc文件的最开头**:这个函数是Vim内置的条件检测工具,只有在Vim启动初始化的最早期阶段才会返回
true。如果把它放在配置后面,等Vim已经完成启动流程,这个条件就会失效,起不到预期作用。 - 仅用于控制启动专属配置:它的核心作用是区分“Vim首次启动”和“运行中重新加载.vimrc(比如用
:source ~/.vimrc)”这两种场景,确保某些只需要执行一次的配置不会重复触发。
解释if has('vim_starting') | set nocompatible | endif的作用
先拆解里面的关键部分:
set nocompatible:这行是让Vim彻底脱离Vi兼容模式,启用Vim独有的高级特性——比如语法高亮、分窗口编辑、自定义键映射、插件支持这些Vi原生没有的功能。如果不开启这个模式,Vim会刻意模仿Vi的老旧行为,很多好用的功能都用不了。
那为什么要把它套在has('vim_starting')的判断里?原因有两个:
- 避免重复执行引发异常:当你在Vim运行过程中重新加载.vimrc时,
has('vim_starting')会返回false,这段代码就不会执行。如果不加这个判断,中途重复设置nocompatible,可能会和已经加载的插件、自定义映射产生冲突——毕竟兼容模式和非兼容模式下很多命令的行为差异很大,中途切换容易导致配置混乱。 - 兼容旧版Vim:虽然新版Vim只要检测到存在.vimrc文件,就会自动开启
nocompatible,但旧版本的Vim没有这个自动逻辑。加上这段代码能确保不管是新老版本,都能在启动时正确进入非兼容模式,保证配置的一致性。
内容的提问来源于stack exchange,提问作者FXux
相关产品推荐
相关产品推荐

