vim 认为什么是单词?

vim 认为什么是单词?

可能的重复:
匹配包含 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。按gaonś告诉我们它的十进制值为 347,该值大于 255,因此超出了 的范围 iskeyword。光标放在ttreść 上,然后按w

treść bar
^ (cursor)

结果:

treść bar
      ^ (cursor)

如果一个词可以由以下组成字母、数字、下划线等字符,唯一的可能性是 vim 对待ś视为,因为它显然不是数字或下划线。让我们检查一下如何确定一个字符是否是字母。从:h :alpha:

支持以下字符类: [:α:] [:alpha:] 字母

测试与

/[[:alpha]]

显示ś不被视为字母。

为什么光标跳到bifś既不是字母,也不是数字,也不是下划线并且没有列出来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。

相关内容