忽略vimrc中的“未知选项”错误

19

我在安装了Vim 7.2和7.3的不同机器之间使用同样的.vimrc文件。拥有Vim 7.2的机器每次打开文件时都会抱怨我的一些只适用于Vim 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忽略这些错误,而不在打开文件时提示我按回车键?

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

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.

可以的。一定要小心设置版本号——我花了很长时间才仔细阅读,才看到它不是简单的“版本*100”。 - spiffytech
是的,这可能有点棘手,但你会习惯的。我宁愿用字符串连接的方式来描述它,而不是进行数学计算。请注意,这在许多其他地方也被使用。例如,Perl使用类似的语法use。您必须use 5.010;才能使用perl 5.10的功能,而不是5.1。这就是为什么他们不使用十进制意义,否则会产生一些歧义。 - sidyll
2
最好测试特定的功能而不是版本,因为特定版本可能在没有你要查找的功能的情况下编译。 - cpbills
2
最好测试功能。Fedora 21的默认vim版本是7.4,但是没有编译折叠功能,该功能在6.0中添加。 - Rob Kinyon
一定要检查所需的功能,而不是假设特定版本号就足够了。 - Stabledog

9
有时候一个选项是合法的,但在当前环境下并不可用。例如:
$ vi
Error detected while processing /home/username/.vimrc:
line    9:
Unknown option: indentexpr=

为了测试一个选项是否存在,避免出现错误,可以使用以下方法:

if exists("&indentexpr")
  :set indentexpr=
endif

1
这不会玩弄版本号。 - iltempo

5

你可以忽略任何带有 silent! ... 的错误,比如 silent! set undofile


3
在你的 .vimrc 文件中,你可以根据正在运行的 Vim 版本进行测试。
参考 help v:version
if v:version >= 703
    "do something
    set rnu
    set undofile
    ...
endif

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


0
我认为这个问题还没有得到解答。考虑在计算机A上创建的Session.vim,该计算机具有较新的vim版本。当另一台计算机B尝试打开Session.vim时,会触发错误。手动包装版本号对于本应自动化的过程来说是没有意义的。有了这种行为,新版本将不得不在保存会话时自动包装一个新命令的版本号——而7.3版本并没有这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接