本节描述用于插入文本的更高级别命令,这类命令主要面向用户,但在 Lisp 程序中同样有用。
此命令将 from-buffer-or-name(必须已存在)的全部可访问内容插入到当前缓冲区的光标之后。
它会把标记置于插入文本的末尾。返回值为 nil。
此命令插入字符 char(即最后键入的字符);在光标前重复插入 count 次,并返回 nil。
多数可打印字符都绑定到此命令。在日常使用中,self-insert-command 是 Emacs 中被调用最频繁的函数,
但程序一般很少直接使用它,通常只是将其绑定到按键映射。
在交互式调用时,count 为数字前缀参数。
自插入会通过 translation-table-for-input 转换输入字符。See 字符转换。
当 auto-fill-function 非空且插入的字符在 auto-fill-chars 表中时,此命令会调用该函数。see 自动换行。
若启用了缩写模式且插入的字符不具备单词构成语法,此命令会执行缩写展开。See 缩写与缩写展开,以及 语法类别表。
当插入的字符具有右括号语法时,它还负责调用 blink-paren-function。see 括号闪烁。
此命令最后会运行钩子 post-self-insert-hook。
例如,你可以用它在输入文本时自动重新缩进。
该钩子中的函数可以通过 last-command-event 获取刚刚插入的字符。see 来自命令循环的信息。
若该钩子中的某个函数需要作用于区域,see 区域,
应确保在 post-self-insert-hook 函数执行前,选择删除模式不会删除该区域。see Delete Selection in The GNU Emacs Manual。
实现方式是向 self-insert-uses-region-functions 添加一个返回 nil 的函数,
这是一个专用钩子,用于告知选择删除模式不应删除区域。
不要尝试用自定义定义替换标准的 self-insert-command。编辑器命令循环会对该函数做特殊处理。
此命令在当前缓冲区的光标前插入换行符。 若提供了 number-of-newlines,则插入对应数量的换行符。 在交互式调用时,number-of-newlines 为数字前缀参数。
此命令调用 self-insert-command 插入换行,随后可能通过调用 auto-fill-function 折行前一行。see 自动换行。
通常 auto-fill-function 的行为是插入一个换行;因此这种情况下的整体结果是在不同位置插入两个换行:一个在光标处,另一个在本行靠前位置。
若 number-of-newlines 非空,newline 不会执行自动填充。
此命令不会运行 post-self-insert-hook,除非是交互式调用或 interactive 非空。
若左页边距不为零,此命令会缩进至左页边距。See 填充边距。
返回值为 nil。
此命令用于确保光标前有指定数量的空行。 (此处 “空行(empty line)” 定义为不包含任何字符的行—含有空格的行不算空行。) 默认确保光标前有一行空行。
若光标不在行首,会先插入一个换行符。 若光标前空行数量多于指定值,则减少空行数量;否则增加至指定数量。
此变量控制是否启用覆盖模式。取值可为 overwrite-mode-textual、overwrite-mode-binary 或 nil。
overwrite-mode-textual 表示文本覆盖模式(对换行与制表符特殊处理),
overwrite-mode-binary 表示二进制覆盖模式(将换行与制表符视为普通字符)。