可能的重复:
匹配包含 a-zA-Z 以外字符的单词
我不明白vim
一个词的定义。来自动议w
( :h w
) 的帮助:
w [向前计数] 个单词。 |独家|运动。这些命令在单词或单词上移动。
*word*
单词由一系列字母、数字和下划线组成,或者由一系列其他非空白字符组成,并用空格(空格、制表符、)分隔。这可以使用“iskeyword”选项进行更改。
这意味着当我调用该w
动作时,vim 需要在该选项的帮助下检查哪些字符可以组成一个单词iskeyword
。让我们检查一下单词可能由哪些字符组成:
:set iskeyword?
iskeyword=@,48-57,_,192-255
让我们使用选项中列出的字符中未包含的字符进行测试iskeyword
,例如U+015B LATIN SMALL LETTER S WITH ACUTE
。按ga
onś
告诉我们它的十进制值为 347,该值大于 255,因此超出了 的范围
iskeyword
。光标放在t
treść 上,然后按w
:
treść bar
^ (cursor)
结果:
treść bar
^ (cursor)
如果一个词可以由以下组成字母、数字、下划线等字符,唯一的可能性是 vim 对待ś
视为信,因为它显然不是数字或下划线。让我们检查一下如何确定一个字符是否是字母。从:h :alpha:
:
支持以下字符类: [:α:] [:alpha:] 字母
测试与
/[[:alpha]]
显示ś
不被视为字母。
为什么光标跳到b
ifś
既不是字母,也不是数字,也不是下划线并且没有列出来iskeyword
?
在 VIM 上测试 - Vi IMproved 7.3(2010 年 8 月 15 日,2012 年 12 月 27 日编译 21:21:18)包含的补丁:Debian GNU/Linux 上的 1-762,区域设置为
en_GB.UTF-8
.
答案1
正如乌尔里希在他的评论中提到的,原因是多字节字符始终被视为单词的一部分。它们不需要在 中指定iskeyword
。:h iskeyword
引用指向的帮助:h isfname
:
始终包含 256 及以上的多字节字符,仅使用此选项指定最多 255 个字符。对于 UTF-8,还包括字符 0xa0 到 0xff。