Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“忽略”;“未知选项”;vimrc中的错误_Vim - Fatal编程技术网

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

“忽略”;“未知选项”;vimrc中的错误,vim,Vim,我在安装了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

我在安装了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键?

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

请参见
help v:version

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

703对应于Vim 7.3(这不是真正直观的…

将新选项包装在:

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.
*v:version**version变量*
v:Vim版本号:主版本号乘以100加号
次要版本号。版本5.0是500。版本5.1(5.01)
是501。只读。“版本”也适用于向后
兼容性。
使用| has()|检查是否包含某个修补程序,例如:>
如果有(“补丁123”)
<请注意,修补程序编号是特定于版本的,因此
版本5.0和5.1可能有一个补丁123,但它们是
完全不同。

我想说这个问题没有得到回答。考虑在计算机A上创建的一个Seist.vim,它具有较晚的VIM版本。在源代码管理中,当另一台计算机B尝试打开Session.vim时,会触发错误。对于本应是自动化流程的内容,必须手动包装版本号是没有意义的。在这种情况下,新版本在保存会话时必须自动将新命令包装在版本号中,这是7.3没有做到的。

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

例如:


您可以使用
silent!…忽略任何错误,就像
无声!set undofile

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

$ vi
Error detected while processing /home/username/.vimrc:
line    9:
Unknown option: indentexpr=
要测试选项是否存在,并在不可用时避免错误,请执行以下操作:

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

这很有效。一定要小心设置版本号——我花了一段时间仔细阅读,才发现它不是简单的“version*100”是的,这可能很棘手,但你会习惯它。我宁愿用字符串连接的方式来描述它,而不是做数学运算。请注意,这在许多其他地方都有使用。例如,Perl使用了与之类似的语法。你必须
使用5.010
使用perl
5.10
中的功能,而不是
5.1
。这就是为什么他们使用它不是小数点意义上的,否则会产生一些歧义。测试特定功能比测试版本更好,因为特定版本可以在没有您正在寻找的功能的情况下编译。测试功能要好得多。Fedora 21的默认vim是7.4,但编译时没有折叠,这是在6.0中添加的。我们肯定应该检查所需的功能,而不是假设特定的版本号就足够了。这不会对版本号进行篡改。
if exists("&indentexpr")
  :set indentexpr=
endif