Какво означава =~ във 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, би била още по-добра.


person puk    schedule 02.03.2012    source източник
comment
Няма начин "ctest =~ "\.c" и ".pctestp" !~ "\.pc".   -  person Benoit    schedule 02.03.2012
comment
Между другото, вероятно е най-добре да избягвате =~, но вместо това използвайте =~# или =~?, които изрично указват дали желаете чувствителност към малки и малки букви или нечувствителност. С обикновен =~ зависи от текущите настройки на потребителя. Повече информация: vimdoc.sourceforge.net/htmldoc/eval.html#expr4   -  person Evgeni Sergeev    schedule 13.07.2015


Отговори (2)


От документацията на 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
person Michael Berkowski    schedule 02.03.2012
comment
Благодаря, двойните кавички ми доведоха до странното поведение - person puk; 02.03.2012
comment
@puk Това, което все още не съм намерил, са документите, които обясняват разликите в цитирането... - person Michael Berkowski; 02.03.2012
comment
Намирам, че документацията на vim е навсякъде. Страниците :help са изключително полезни за прости неща като d или :ls, но са безполезни, ако не знаете какво търсите (т.е. stridx()). По същия начин vim wiki е страхотно за клавиши и команди, но не толкова за функции като гореспоменатия stridx(). - person puk; 02.03.2012
comment
Вашата бележка за двойни срещу единични кавички реши проблема ми. Благодаря! - person Stephen Talley; 15.08.2017

От документите:

  • 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
    
person icyrock.com    schedule 02.03.2012