36.6.1 基于解析的移动命令

本节介绍基于表达式解析工作的简单光标移动函数。

Function: scan-lists from count depth

该函数从位置 from 开始向前扫描 count 个平衡括号结构,并返回扫描停止的位置。 若 count 为负,则向后扫描。

depth 非零,则将起始位置视为已处于 depth 层括号深度。 扫描器在缓冲区中前后移动,直到深度归零的次数达到 count 次。 因此,正的 depth 表示从起始位置向外退出 depth 层括号, 负的 depth 表示向内进入 -depth 层括号。

parse-sexp-ignore-commentsnil,扫描会忽略注释。

若在扫描完 count 个括号结构前到达缓冲区可访问区域的开头或末尾: 若此时深度为零则返回 nil;若深度非零则抛出 scan-error 错误。

Function: scan-sexps from count

该函数从位置 from 开始向前扫描 count 个 sexp,并返回停止位置。 若 count 为负,则向后扫描。

parse-sexp-ignore-commentsnil,扫描会忽略注释。

若扫描在括号结构中间到达缓冲区(可访问部分)的开头或末尾,会抛出错误。 若在结构之间到达边界但尚未完成指定次数,则返回 nil

Function: forward-comment count

该函数将光标向前移动,跨过 count 个完整注释(即包含起始定界符与结束定界符,若存在)以及途中遇到的任意空白。 若 count 为负则向后移动。 若遇到注释或空白以外的内容则停止,光标停在该位置。 例如向前移动时遇到注释结尾而非预期的注释开头,也会停止。 函数在移动完指定数量的完整注释后也会立即停止。 若按预期找到 count 个注释且之间仅有空白,则返回 t,否则返回 nil

该函数无法判断所遍历的注释是否嵌在字符串中;只要外观符合注释格式,就会按注释处理。

若要向前跳过光标后所有注释与空白,可使用 (forward-comment (buffer-size))(buffer-size) 是一个合适的参数,因为缓冲区中的注释数量不可能超过它。