Emacs 把当前光标位置称为 point。移动命令会重新定位 point;编辑命令则在其周围插入、删除、kill、复制或 yank 文本。在以下按键记法中,C- 表示 Control,M- 表示 Meta,通常是 Alt。
高级文本操作 · 第 12 课
Emacs 编辑
学习如何移动 point、激活区域,并使用 Emacs kill ring 命令编辑文本。
按字符和行移动
方向键和其他平台导航键可能可用,但 Emacs 的标准移动命令在终端和图形会话中都可以使用:
C-f:向前移动一个字符。C-b:向后移动一个字符。C-n:移动到下一行。C-p:移动到上一行。C-a:移动到行首。C-e:移动到行尾。
哪个 Emacs 按键会把 point 移动到下一行?
按单词和缓冲区边界移动
Meta 命令可以跨越更大的单位:
M-f:向前移动一个单词。M-b:向后移动一个单词。M-<:移动到缓冲区开头。M->:移动到缓冲区末尾。
在许多键盘上,Alt 充当 Meta。如果无法使用这个组合键,先按 Esc 再按后续按键通常能发送等效的 Meta 命令。
哪个 Emacs 按键会把 point 移动到缓冲区末尾?
定义区域
mark 是已保存的缓冲区位置。point 与 mark 之间的文本称为区域。按 C-SPC(有些文档写作 C-space)运行 set-mark-command,然后移动 point 以扩展活动区域。
在终端中,C-SPC 可能编码为 C-@。是否高亮取决于 transient-mark 设置,但 point 和 mark 仍会定义一个区域。
哪个按键会在 point 处设置 mark,从而开始定义区域?
Kill 或复制区域
Emacs 把被 kill 和复制的文本存入 kill ring:
C-w:kill 活动区域,将其移除并加入 kill ring。M-w:把活动区域复制到 kill ring,而不移除它。C-k:从 point kill 到行尾;重复使用可以包含换行符。
Kill 不只是普通删除,因为被移除的文本会保留供之后 yank。
哪个按键会把活动区域复制到 kill ring,而不移除它?
从 Kill Ring 中 Yank
使用 C-y 在 point 处 yank 最近的 kill ring 条目。紧接着 yank 操作使用 M-y,会用更早的 kill ring 条目替换刚插入的文本;重复 M-y 可以循环选择条目。
C-y
M-y
如果在 C-y 之后执行了其他无关命令,M-y 就不再拥有相同的 yank-pop 上下文。
哪个按键会在 point 处插入最近的 kill ring 条目?
请在 *scratch* 或可丢弃文件中练习:移动 point、设置 mark、复制一个区域、kill 另一个区域,再把两者 yank 回来。只有结果值得保留时才保存。
课程已完成
你已完成 Emacs 编辑
现在,你可以使用 point、mark 和 kill ring 导航并重新排列 Emacs 文本。
使用 Control 命令按字符或行移动。
使用 Meta 命令按单词或缓冲区边界移动。
使用
C-SPC设置 mark 以定义区域。使用
C-wkill,或使用M-w复制。使用
C-yyank,并紧接着使用M-y循环选择。