这是Vim的字符串表达式评估中的错误吗?

时间:2011-05-22 22:26:06

标签: vim

我正在使用在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)

1 个答案:

答案 0 :(得分:1)

要知道这个问题的答案,你必须看看文档。以下是*41.4* Conditionals部分的引用:

  

逻辑运算符同时适用于数字和字符串。比较两个   字符串,使用数学差异。这比较字节值,   这可能不适合某些语言。

     

将字符串与数字进行比较时,首先将字符串转换为a   数。这有点棘手,因为当一个字符串看起来不像一个   数字,使用数字零。例如:

:if 0 == "one"
:  echo "yes"
:endif
     

这将回显“是”,因为“一个”看起来不像一个数字,因此它是   转换为数字零。

显然,vim不保证您尝试执行的操作的结果,您不应该依赖它。如果您想比较字符串的长度,请查看*strlen()*