18

我在同时安装了 Vim 7.2 和 7.3 的机器之间使用相同的 .vimrc。每次打开文件时,装有 Vim 7.2 的机器都会抱怨我的 7.3 特定选项:

Error detected while processing /home/spiffytech/.vimrc:
line   72:
E518: Unknown option: rnu
line   73:
E518: Unknown option: undofile
line   74:
E518: Unknown option: undodir=/tmp
line   75:
E518: Unknown option: cryptmethod=blowfish
Press ENTER or type command to continue

如何让 Vim 忽略这些错误,并且在我打开文件时不提示我按 Enter 键?

4

6 回答 6

19

可能值得对实际支持的功能而不是版本进行更细粒度的检查。

例如:

if has('persistent_undo')
  set undofile
  set undodir=/tmp
endif

" Some options can only be checked with exists('+option'); I'm not sure why
if exists('+relativenumber')
  set rnu
endif

if has('cryptv')
  set cryptmethod=blowfish
end
于 2012-06-24T04:44:17.873 回答
10

将新选项包装在:

if version >= 703
  set rnu ...
endif

查看帮助以v:version获取有关要使用的版本号的更多信息:

                                        *v:version* *version-variable*
v:version       Version number of Vim: Major version number times 100 plus
                minor version number.  Version 5.0 is 500.  Version 5.1 (5.01)
                is 501.  Read-only.  "version" also works, for backwards
                compatibility.
                Use |has()| to check if a certain patch was included, e.g.: >
                        if has("patch123")
<               Note that patch numbers are specific to the version, thus both
                version 5.0 and 5.1 may have a patch 123, but these are
                completely different.
于 2012-06-14T15:10:57.410 回答
8

有时一个选项是合法的,但在当前环境中不可用。例如:

$ vi
Error detected while processing /home/username/.vimrc:
line    9:
Unknown option: indentexpr=

测试选项是否存在,如果不可用则避免错误:

if exists("&indentexpr")
  :set indentexpr=
endif
于 2014-04-11T14:25:31.050 回答
5

您可以忽略任何错误silent! ...,例如silent! set undofile

于 2013-12-21T09:12:39.513 回答
3

在您的 .vimrc 中,您可以针对您正在执行的 Vim 版本进行测试。

help v:version

if v:version >= 703
    "do something
    set rnu
    set undofile
    ...
endif

703对应于 Vim 7.3(这不是很直观......)

于 2012-06-14T15:10:49.047 回答
0

我会说这个问题没有答案。考虑在计算机 A 上创建的具有更高 vim 版本的 Session.vim。在源代码控制中,当另一台计算机 B 尝试打开 Session.vim 时,会触发错误。必须为应该是自动化的过程手动包装版本号是没有意义的。有了这种行为,新版本在保存会话时必须自动将新命令包装在版本号中——7.3 没有这样做。

于 2012-06-17T14:25:29.300 回答