Emacs 编辑
100%

高级文本操作 · 第 12 课

Emacs 编辑

学习如何移动 point、激活区域,并使用 Emacs kill ring 命令编辑文本。

Emacs 把当前光标位置称为 point。移动命令会重新定位 point;编辑命令则在其周围插入、删除、kill、复制或 yank 文本。在以下按键记法中,C- 表示 Control,M- 表示 Meta,通常是 Alt。

按字符和行移动

方向键和其他平台导航键可能可用,但 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-w kill,或使用 M-w 复制。

  • 使用 C-y yank,并紧接着使用 M-y 循环选择。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 高级文本操作