以下是若干与平衡括号表达式相关的函数(在 Emacs 中移动遍历这类表达式时也称作 符号表达式(sexps))。语法表控制这些函数如何解释各类字符;详见 语法表。See 表达式解析 章节介绍用于扫描符号表达式或其片段的底层原语。用户级命令请参考 Commands for Editing with Parentheses in The GNU Emacs Manual。
该函数向前移动越过 arg 组(默认为 1)平衡括号。(单词、成对字符串引号等其他语法单元会被忽略。)
该函数向后移动越过 arg 组(默认为 1)平衡括号。(单词、成对字符串引号等其他语法单元会被忽略。)
该函数向前退出 arg 层(默认为 1)括号。参数为负表示向后移动,但仍移至更浅的层级。若 escape-strings 非 nil(交互调用时即为真),则同时退出外层字符串。若 no-syntax-crossing 非 nil(交互调用时即为真),则优先退出包裹的字符串,而非移至跨多个字符串的列表开头。出错时点的位置未定义。
该函数与 up-list 完全相同,仅参数取反。
该函数向前进入 arg 层(默认为 1)括号。参数为负表示向后移动,但仍向括号更深处进入(−arg 层)。
该函数向前移动越过 arg 个(默认为 1)平衡表达式。平衡表达式既包括括号界定的表达式,也包括单词、字符串常量等其他类型。 See 表达式解析。示例如下:
---------- Buffer: foo ---------- (concat∗ "foo " (car x) y z) ---------- Buffer: foo ----------
(forward-sexp 3)
⇒ nil
---------- Buffer: foo ----------
(concat "foo " (car x) y∗ z)
---------- Buffer: foo ----------
若变量 forward-sexp-function 的值非 nil,forward-sexp 会调用该函数完成实际工作,并将自身接收的参数原样传递给它。主模式可根据自身需要定义专属的平衡表达式移动函数,并将此变量设为该函数。
该函数向后移动越过 arg 个(默认为 1)平衡表达式。
该函数回退至第 arg 个函数定义开头。若 arg 为负,则实际向前移动,但仍移至函数定义开头而非结尾。arg 默认为 1。
该函数向前移至第 arg 个函数定义结尾。若 arg 为负,则实际向后移动,但仍移至函数定义结尾而非开头。arg 默认为 1。
若非 nil,该缓冲区局部变量保存一个正则表达式,用于指定函数定义开头左括号之前可出现的文本。也就是说,函数定义起始于匹配该正则表达式、后跟左括号语法字符的行首。
若该变量值非 nil,第 0 列出现的左括号将被视为函数定义开头。若为 nil,第 0 列的左括号无特殊含义。默认值为 t。若字符串字面量恰好在第 0 列有括号,可用反斜杠转义以避免误判。
若非 nil,该变量保存一个用于查找函数定义开头的函数。函数 beginning-of-defun 会调用该函数而非使用默认方法,并将可选参数传递给它。若参数非 nil,该函数应按指定次数回退至上一个函数,行为与 beginning-of-defun 一致。
若非 nil,该变量保存一个用于查找函数定义结尾的函数。函数 end-of-defun 会调用该函数而非使用默认方法。
若 Emacs 编译时包含 tree-sitter 支持,便可利用 tree-sitter 解析信息在语法结构间移动。由于不同语言对“函数定义”的界定不同,主模式应设置 treesit-defun-type-regexp 进行指定。之后模式可直接使用 treesit-beginning-of-defun 和 treesit-end-of-defun 获得按函数定义导航的能力。
该变量决定 Emacs 将哪些节点视为函数定义。它可以是一个匹配函数定义节点类型的正则表达式。(关于“节点”与“节点类型”,参见 see 解析程序源代码。)
例如,python-mode 将此变量设为可匹配 ‘function_definition’ 或 ‘class_definition’ 的正则表达式。
有时正则匹配到的节点并非全部为有效函数定义。因此该变量也可设为形如 (regexp . pred) 的 cons 单元,其中 pred 为一个函数,接收节点作为参数,节点有效时返回非 nil,无效时返回 nil。
该变量决定 Emacs 如何处理嵌套函数定义。若值为 top-level,导航函数仅遍历顶层函数定义。若值为 nested,则识别嵌套函数定义。
变量 forward-sentence-function 的值决定如何移动遍历称作 语句(sentences)的语法结构。主模式可为此变量指定自定义函数,以定制 forward-sentence 命令的行为。若 Emacs 编译时包含 tree-sitter 支持,便可利用其解析信息在语法结构间移动。由于不同语言对“语句”的界定不同,主模式应设置 treesit-thing-settings 进行指定。之后 forward-sentence-function 会被设为 treesit-forward-sentence,模式即可直接使用 forward-sentence 和 backward-sentence 获得按语句导航的能力(see Moving by Sentences in The extensible self-documenting text editor)。
若 Emacs 编译时包含 tree-sitter 支持,便可利用其解析信息在语法结构间移动。由于不同语言对“符号表达式”的界定不同,主模式应设置 treesit-thing-settings 进行指定。之后 forward-sexp-function 会被设为 treesit-forward-sexp,模式即可直接使用 forward-sexp 和 backward-sexp 获得按符号表达式导航的能力(see Expressions in The extensible self-documenting text editor)。