在VimScript中=〜意味着什么?

时间:2012-03-02 03:41:02

标签: operators vim

我无法在谷歌或此处或帮助文件中找到答案。

if "test.c" =~ "\.c"

起初我认为=~意味着结束,但观察这些结果:

Command                               Result
echo "test.c" =~ "\.c"                1
echo "test.c" =~ "\.pc"               0
echo "test.pc" =~ "\.c"               1
echo "testc" =~ "\.c"                 1
echo "ctest" =~ "\.c"                 1
echo "ctestp" =~ "\.pc"               0
echo "pctestp" =~ "\.pc"              0
echo ".pctestp" =~ "\.pc"             0

解释会很棒。尝试解密VimScript的网站链接会更好。

2 个答案:

答案 0 :(得分:46)

From the Vim documentation,它在左侧内部执行右操作数(作为模式)的模式匹配。

  

对于字符串,还有两个项目:

    a =~ b      matches with
    a !~ b      does not match with
  

左项“a”​​用作字符串。正确的项目“b”用作模式,就像用于搜索的模式一样。例如:

    :if str =~ " "
    :  echo "str contains a space"
    :endif
    :if str !~ '\.$'
    :  echo "str does not end in a full stop"
    :endif

您可以再次尝试测试用例。例如,我与你的不一致:

echo ".pctestp" =~ "\.pc"             1

双引号与单引号似乎会影响反斜杠的解释方式:

echo "test.pc" =~ "\.c"               1
echo "test.pc" =~ '\.c'               0

答案 1 :(得分:4)

来自文档:

  • http://vimdoc.sourceforge.net/htmldoc/usr_41.html

    对于字符串,还有两个项目:

    a =~ b      matches with
    a !~ b      does not match with
    

    左项“a”​​用作字符串。正确的项目“b”用作a 模式,就像用于搜索的模式一样。例如:

    :if str =~ " "
    :  echo "str contains a space"
    :endif
    :if str !~ '\.$'
    :  echo "str does not end in a full stop"
    :endif