Проблемы понимания механизма регулярных выражений Vim - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь настроить скрипт для функции скрытия, чтобы предварительно оптимизировать строки в Python. До сих пор это работало нормально для замены одного слова. Но теперь я хотел бы заменить «не в» на «∉». Я попробовал это:

syntax match pyOperator "not in" conceal cchar=∉

Но это ничего не соответствует, и я не понимаю, почему нет. например,

x not in l остается x not in l

Однако

syntax match pyOperator " not in " conceal cchar=∉

работает. Но я хочу прежнюю версию, так как эта делает

x not in l до x∉l, скрывая пробелы.

Почему вторая версия работает, а первая нет и как я могу заставить ее работать?

кстати. Я также пробовал другие варианты, такие как

syntax match pyOperator "\s\+not\s\+in\s\+'" conceal cchar=∉

Тот тоже не работает, что меня тоже озадачивает, так как t является надмножеством второй версии.

1 Ответ

0 голосов
/ 29 августа 2018

Он блокируется определением syntax keyword pythonOperator and in is or not, которое, кажется, имеет приоритет над syntax match (и не допускает перекрытия). Итак, мы очистим это определение и заменим его эквивалентным syntax match.

" ~/.vim/after/syntax/python.vim
syn clear pythonOperator
syn match pythonOperator /and\|is\|or\|not/
syn match pythonOperator /not in/ conceal cchar=∉
syn match pythonOperator /in/ conceal cchar=∈

Я также изменил ваш pyOperator на стандартный pythonOperator; одна из причин заключается в том, что он уже есть (для in, and, is, or и not, как показано выше); другая причина (от :help 44.2):

По соглашению, каждое имя группы начинается с префикса типа файла для определяемого языка. [...] В файле синтаксиса для сценариев "csh" будет использоваться имя "cshType". Таким образом, префикс равен значению filetype.

...