如何匹配Vim中的变音符号范围?

时间:2010-08-24 03:53:38

标签: vim unicode

我有一个文件,有些行包含带有变音符号的unicode字符。 我想删除文件中包含任何unicode变音重音字符的所有行(unicode 0x0300 - unicode 0x0362)。

我可以吹掉文件中的任何其他unicode作为范围匹配,如下面的函数:

:克/ [{CTRL-V} u0129- {CTRL-V} u0229] / d

但由于某些原因,当范围处于变音范围内时,变音符号适用于范围括号,因此我最终使用带有不匹配任何内容的方括号。

可以然后一次匹配一个,例如:g / {ctrl-v} u0301 / d,但是我宁愿不经过100次左右的迭代来确保我得到它们所有

此外,反向搜索也让我失望。 :g / [^ - 〜] / d将删除包含除{space}到波浪号范围内的字符以外的字符的每一行,除了带有变音符号的行

由于

1 个答案:

答案 0 :(得分:2)

我认为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'

应该做你想做的事。