我正在使用在Arch Linux上的Vim73中运行的插件调试问题,它似乎源于字符串表达式评估中的错误。
在这个Vim安装中,表达式'xxx' > ''
的计算结果为0(false),而在所有其他Vims中,我看到表达式计算(应该)为1(真)。
有谁知道对此的解释? Arch Linux Vim没有编译内置的很多功能,但是真的有一些功能会改变字符串表达式的评估吗?
是否有一些Vim设置(编码?)可能改变了这个字符串比较的结果?这是一个普通的Vim安装(在vimrc中没有任何注意事项)给出了糟糕的结果,即使有一些设置影响了这个结果,也没有看到设置可以改变的地方。
感谢您的任何信息。
更新 事实证明,当设置Vim标志'ignorecase'时,这个问题是由最近版本的64位Vim中的字符串比较函数中的错误引起的。无论是否忽略大小写,非空字符串都应该大于空字符串,但Vim返回false。错误报告在这里: http://groups.google.com/group/vim_dev/browse_thread/thread/313bc7c46a19cd40
变通方法是:(1)使用强制'matchcase'比较的比较运算符,例如mystring_var ># ''
或(2)使用!empty(mystring_var)
。
答案 0 :(得分:1)
要知道这个问题的答案,你必须看看文档。以下是*41.4* Conditionals
部分的引用:
逻辑运算符同时适用于数字和字符串。比较两个 字符串,使用数学差异。这比较字节值, 这可能不适合某些语言。
将字符串与数字进行比较时,首先将字符串转换为a 数。这有点棘手,因为当一个字符串看起来不像一个 数字,使用数字零。例如:
:if 0 == "one" : echo "yes" :endif
这将回显“是”,因为“一个”看起来不像一个数字,因此它是 转换为数字零。
显然,vim不保证您尝试执行的操作的结果,您不应该依赖它。如果您想比较字符串的长度,请查看*strlen()*
。