8

Unicode 指定\X应该匹配“扩展字形簇” ——例如,一个基本字符后跟零个或多个组合字符。(我相信这是一种简化,但可能足以满足我的需要。)

我很确定至少 Perl 支持\X它的常规表达式。

但是 Vim 定义\X匹配一个非十六进制数字。

Vim 是否有任何等效\X或任何方式来匹配 Unicode 扩展字素簇?

Vim 确实有组合或“组合”字符的概念,但它的文档并未涵盖正则表达式是否支持或如何支持它们。

Vim 似乎还没有直接支持这一点,但我仍然对一种解决方法感兴趣,在这种解决方法中,搜索将突出显示所有字符,这些字符至少包括最基本的U+0300to范围内的组合字符U+0364

4

2 回答 2

3

如果你的 vim 安装是用perl support编译的,你可以运行:

:perldo s/\X/replacement/g

我安装vim-nox在 debian 上(其中包含 perl 支持),并且与\Xwith匹配perldo确实有效,但我不确定它是否会满足您的需求,因为所有普通字符也都匹配,而且似乎perldo不会让您突出显示在 vim.

虽然它并不完美,但如果您可以获得 perl 支持,您可以使用 unicode 块和类别。这意味着您可以使用\p{Block: Combining_Diacritical_Marks}\p{Category: Nonspacing_Mark}至少检测某些字符,尽管您仍然不会突出显示。

于 2012-06-07T13:22:06.187 回答
3

您可以搜索所有字符并忽略使用\Z. 或者,您可以搜索一系列 Unicode 字符。阅读:help /[]有关两者的更多信息。

这里的最后一篇文章可能会提供更多帮助:

http://vim.1045645.n5.nabble.com/using-regexp-to-search-for-Unicode-code-points-and-properties-td1190333.html

但是 Vim 的正则表达式没有像 Perl 这样的字符类。

于 2012-06-07T13:52:59.120 回答