Что означает = ~ в VimScript?

Я не могу на всю жизнь найти ответ на это либо в Google, либо здесь, либо в файлах справки.

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, будет еще лучше.

Ответы

Ответ 1

Из документации Vim, она соответствует совпадению шаблона правого операнда (в виде шаблона) в левой части.

Для строк есть еще два элемента:

    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

Ответ 2

Из документов:

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

    Для строк есть еще два элемента:

    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