匹配包含 a-zA-Z 以外字符的单词

匹配包含 a-zA-Z 以外字符的单词

要匹配一个可以使用的单词

\v(\w+)

来自 vim 帮助:h \w

\w 单词字符:[0-9A-Za-z_]

这与手册中描述的完全一样。但是,我想匹配包含超出字符的单词a-z,例如 普拉斯特花园。匹配正则表达式\v(\w+)表达式 普拉斯特花园产生三个匹配,而是:

prästgården
^^ ^^^ ^^^^

如何匹配包含超出字符的单词a-z?我的语言环境设置为英语,如果可能的话我想保持这种状态。

编辑:这些单词可能不属于单个区域设置,例如

prästgården
treść

答案1

Vim(从版本 7.3 开始)在模式中对非 ASCII 字符的支持非常有限。特别是,\w仅匹配 ASCII 字母,用途有限。

有一些字符类模式确实支持 Unicode。您感兴趣的是\I,大体上匹配字母并且仅匹配字母,加上_@。至少在 Debian squeeze 上(在 UTF-8 语言环境中),存在错误;例如×÷被匹配为字母,但所有拉丁重音字母似乎都能正确识别。\I可以通过配置isident选项,至少对于 ASCII 部分。

如果您想要严格的 Unicode 支持,则需要依赖外部工具。例如,perl -C -e '/\p{L}/'匹配 UTF-8 字母(假设 UTF-8 区域设置)。

答案2

使用\k。看iskeyword选项。

答案3

它也适用于西里尔字母

\v\k

有点复杂,西里尔字母失败

\v(\c[0-9a-z_[=a=][=c=][=e=][=i=][=l=][=n=][=o=][=r=][=s=][=t=][=u=][=y=][=z=]])

医生

在 Vim 7.4 上测试。

相关内容