首页 > 解决方案 > 在 vim 中评估字符串真实性的最常用方法

问题描述

在 python 中查看字符串是否为非空,我将执行以下操作:

if STRING_VAR:
    ...

但是,在 vim 中,直接使用字符串并不能真正给出真正的真值。是否有建议的方法来评估字符串的真实性?通常我会使用:

if (STRING_VAR != "")
    ...

或者:

if (len(STRING_VAR) != 0)
    ...

建议/最干净的方法是什么?

标签: vim

解决方案


我会做!empty(STRING_VAR)*


我还没有看过 Vim 如何比较字符串。但是记住 Vim 是用 C 编写的,那么如果它以类似的方式

int string_compare(const char* s1, const char* s2)
{
    while(*s1 && (*s1 == *s2)) {
        ++s1;
        ++s2;
    }
    return *s1 == *s2;
}

那么STRING_VAR != ""肯定比len(STRING_VAR) != 0

前者的时间复杂度是 O(1) - 结果是在比较第一个字符之后。后者需要 O(n) - 用于计算长度。

另一方面,如果 Vim 中的字符串由结构表示,例如

struct string {
    char str[1000];
    int len;
};

那么len(STRING_VAR) != 0将只是简单的整数比较(var.len != 0)。

其实,len(STRING_VAR)就够了。


* 由于我们宁愿相信 Bram,他empty()以最有效的方式实施

在 Vim 中,就像在 Python 中一样,if不需要括号


推荐阅读