20

我将 vimrc 带到我工作的所有机器上,它自然包含旧 vi 中不存在的选项。

如果我不小心在 vi 不是 vim 的别名和/或未安装 vim 的机器上启动了 vi 会话,vi 会读取 vimrc 并抛出一堆烦人的错误,让我知道该选项不支持。

我知道我总是可以输入“vim”而不是“vi”并将 EDITOR 变量设置为 vim(对于 visudo 等......),但是我可以在 vimrc 的顶部添加一行退出脚本如果文件被vi读取,那么早吗?

4

4 回答 4

39

如果 vi 实际上不是 vim 的链接,则不应读取.vimrc,而应读取.exrc。它正在读取 .vimrc 的事实表明它实际上是 vim 的早期版本。如果是这种情况,您可以使用 vim "if" 构造来支持新功能,如下所示:

:if version >= 500
:  version-5-specific-commands
:endif

类型:

:help if

在 vim 中获取更多信息时。

于 2009-03-11T23:13:39.423 回答
14

如果您想更具体地检查您的检查,您也可以检查个别功能。

我的 .vimrc 中有这个:

if has("eval")
    " Syntax stuff
    let java_highlight_all=1
endif


if has("autocmd")
    " Buffers
    autocmd BufEnter * cd %:p:h
endif
于 2009-06-29T11:22:47.047 回答
6

非 vim 不读取 .vimrc,它正在寻找 .exrc。您可以使用 "if version >= 500" 检测旧版本的 vim

于 2009-03-11T23:14:36.287 回答
3

"vi" 读取 vimrc 因为它肯定是用名称 "vi" 编译的 Vim。并且它可能编译为“非常兼容 Vi”,因此您可以尝试检查功能“兼容”以检测“vi”:

if !has("compatible")
   let g:loaded_matchparen=1
   syntax off
endif
于 2013-02-10T01:33:22.580 回答