Как мне сопоставить диапазон сочетания диакритических знаков в Vim? - PullRequest
2 голосов
/ 24 августа 2010

У меня есть файл, и некоторые строки содержат символы Юникода с диакритическими знаками в них.Я хотел бы удалить все строки в файле, которые содержат любые символы диакритического акцента в Юникоде (Юникод 0x0300 - Юникод 0x0362).

Я могу удалить практически любой другой Юникод в файле, так как диапазон соответствует, как в следующей функцииштраф:

: г / [{ctrl-v} u0129- {ctrl-v} u0229] / d

Но по какой-то причине, когда диапазон находится в диакритическом диапазоне, применяются диакритические знакив квадратные скобки, так что я получаю квадратные скобки с акцентами, которые ничего не соответствуют.

I может однако сопоставлять их по одному, например: g / {ctrl-v} u0301/ d, но я бы предпочел не проходить около 100 итераций, чтобы убедиться, что я их всех получу.

Кроме того, обратные поиски меня тоже не дают.: g / [^ - ~] / d удалит каждую строку, содержащую символ, отличный от символов в диапазоне от {пробел} до тильды, , за исключением строк с диакритическими знаками .

Спасибо

1 Ответ

2 голосов
/ 24 августа 2010

Я думаю, что в vim есть какая-то ошибка: коллекции не соответствуют диакритическим знакам.В качестве обходного пути можно использовать альтернативы:

execute 'g/\('.join(map(range(0x0300, 0x0362), 'printf("\\%%u%04x", v:val)'), '\|').'\)/d'

или

execute 'g/\('.join(map(range(0x0300, 0x0362), 'nr2char(v:val)'), '\|').'\)/d'

должен делать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...