Игнорировать регистр в части шаблона поиска в Vim - PullRequest
3 голосов
/ 12 февраля 2020

В следующем поиске по Vim Я хотел бы игнорировать регистр первой буквы:

/[tlcp]omo

Я хотел бы знать, как регистр можно игнорировать только для первая буква шаблона поиска.

Vim имеет следующие параметры, чтобы игнорировать регистр в шаблоне поиска:

:set ignore
:set smartcase [ignore case if no uppercase in search]

или использовать \c в любом месте шаблона поиска. :

/hello\c => [find hello and HELLO]

Но все эти параметры игнорируют регистр во всем шаблоне, а не частично.

Один из вариантов игнорировать регистр одной буквы в шаблоне поиска - использование * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *, * * * * * * * * * Есть ли способ игнорировать регистр в части шаблона поиска без указания каждого и каждый символ верхнего и нижнего регистра, использующий регулярное выражение?

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

В общем, это невозможно в Vim. Модификаторы регулярных выражений /\c и /\C, к сожалению, превращают весь шаблон в регистр (не) чувствительное соответствие, независимо от того, где они размещены. (Представить новый набор модификаторов, которые работают только с этой позиции и далее, на мой взгляд, было бы лучшим решением.)

Большинство людей обычно обходят это, используя строчные / прописные коллекции для нечувствительные части, /like [tT][hH][iI][sS]/.

Вы также можете go противоположный маршрут и вместо этого принудительно вводить определенные символы в регистр (используя /\l для строчных букв и /\u для прописных букв), /\c\%(\l\l\l\l\&like\) this/.

0 голосов
/ 08 апреля 2020

Мой Плагин CmdlineSpecialEdits имеет (среди многих других) отображение CTRL-G c, которое преобразует шаблон в командной строке поиска таким образом, что эти символы алфавита c между \c .. . \C становятся нечувствительными к регистру совпадениями, а остальные остаются чувствительными к регистру. Другими словами, он преобразует шаблон так, как будто \c и \C будут применяться только к следующим атомам, а не ко всему шаблону.

Пример

/My \cfoo\C is \cbad!/

становится

/My [fF][oO][oO] is [bB][aA][dD]!/

или альтернативно

/\c\%(\u\&M\)\%(\l\&y\) foo\%(\l\{2}\&is\)  bad!/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...