我有一个文件,有些行包含带有变音符号的unicode字符。 我想删除文件中包含任何unicode变音重音字符的所有行(unicode 0x0300 - unicode 0x0362)。
我可以吹掉文件中的任何其他unicode作为范围匹配,如下面的函数:
:克/ [{CTRL-V} u0129- {CTRL-V} u0229] / d
但由于某些原因,当范围处于变音范围内时,变音符号适用于范围括号,因此我最终使用带有不匹配任何内容的方括号。
我可以然后一次匹配一个,例如:g / {ctrl-v} u0301 / d,但是我宁愿不经过100次左右的迭代来确保我得到它们所有
此外,反向搜索也让我失望。 :g / [^ - 〜] / d将删除包含除{space}到波浪号范围内的字符以外的字符的每一行,除了带有变音符号的行。
由于
答案 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'
应该做你想做的事。