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

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

22 голосов
/ 02 марта 2012

Я не могу найти ответ на этот вопрос ни в 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, была бы еще лучше.

Ответы [ 2 ]

47 голосов
/ 02 марта 2012

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

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

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

Левый элемент «а» используется в качестве строки. Правильный элемент «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
4 голосов
/ 02 марта 2012

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

  • 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
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...