31.2.2 按单词移动

下文描述的用于解析单词的函数会使用语法表与 char-script-table 判断给定字符是否属于单词的一部分。See 语法表,另见 字符属性

Command: forward-word &optional count

该函数将光标位置向前移动 count 个单词;若 count 为负数则向后移动。若省略 count 或为 nil,默认值为 1。交互式调用时,count 由数字前缀参数指定。

“移动一个单词(Moving one word)” 指的是将光标移动到越过单词构成字符的位置(该字符标志着单词的起始),然后继续移动直至该单词结束。默认情况下,用于标记单词开头和结尾的字符(即单词边界(word boundaries))由当前缓冲区的语法表定义(see 语法类别表),但主模式可通过设置合适的 find-word-boundary-function-table 覆盖该规则,详见下文。属于不同文字体系的字符(由 char-script-table 定义)同样会构成单词边界(see 字符属性)。无论何种情况,该函数都不会将光标移动到缓冲区可访问区域的边界之外,也不会跨越字段边界(see 定义与使用域)。字段边界最常见的情形是迷你缓冲区中提示符的末尾。

若能够移动 count 个单词,且未被缓冲区边界或字段边界提前终止移动,则返回值为 t。否则返回值为 nil,且光标停留在缓冲区边界或字段边界处。

inhibit-field-text-motion 为非 nil 值,该函数将忽略字段边界。

Command: backward-word &optional count

该函数与 forward-word 功能完全相同,区别在于它会向后移动直至遇到单词开头,而非向前移动。

User Option: words-include-escapes

该变量会影响 forward-wordbackward-word 以及所有调用它们的函数的行为。若其值为非 nil,则转义语法类和字符引用语法类中的字符会被算作单词的一部分;否则不会。

Variable: inhibit-field-text-motion

若该变量为非 nil 值,包括 forward-wordforward-sentenceforward-paragraph 在内的若干移动函数将忽略字段边界。

Variable: find-word-boundary-function-table

该变量会影响 forward-wordbackward-word 以及所有调用它们的函数的行为。其值为一个字符表(see 字符表),表中存储用于查找单词边界的函数。若某个字符在该表中对应非 nil 项,则当单词以该字符开头或结尾时,对应的函数会被调用并传入两个参数:poslimit。 该函数应返回另一处单词边界的位置。具体而言,若 pos 小于 limit,则 pos 位于单词开头,函数应返回该单词最后一个字符的下一个位置;反之,pos 位于单词末尾,函数应返回该单词首个字符的位置。

Function: forward-word-strictly &optional count

该函数与 forward-word 类似,但不受 find-word-boundary-function-table 影响。对于不希望因设置该表的模式(如 subword-mode)修改单词移动行为的Lisp程序,应使用此函数而非 forward-word

Function: backward-word-strictly &optional count

该函数与 backward-word 类似,但不受 find-word-boundary-function-table 影响。与 forward-word-strictly 同理,当单词移动仅需依据语法表判断时,应使用此函数而非 backward-word