Emacs 的 outline-mode

来源:百度文库 编辑:神马文学网 时间:2024/04/19 08:39:32

Emacs 的 outline-mode

Hick

2007-09-08目录1. 前言2. outline-mode3. outlin-minor-mode4. 在 doc-mode 中使用 outline mode5. outline-mode 命令和快捷键

1. 前言

写文本文档的一个难题就是定位比较麻烦,第一次录入的时候还好说,按照流水直接逐章节的敲,但是当需要修改某个地方时,就可能要花费不少力气去定位需要修改的地方了。

之前也听说过 outline-mode ,但是一直不清楚它具体能够干什么。平时使用一些 IDE 的折叠功能,并没有能够触发我什么感想。最近看了一下 Emacs 的outline-mode 才发现,Emacs 原来早就有了代码折叠功能的实现。当然,一如传统的 Emacs mode ,它具备高度的可定制性。

2. outline-mode

outline-mode 是 Emacs 自带的一种 major mode ,把本文源文档 的等号全部替换成星号(*)以后,用Emacs 打开并 M-x outline-mode ,然后按 C-c C-t (hide-body) 即可只显示本问的相关标题,相当于一般意义上的目录,只不过我们这里不管它叫目录(TOCTable Of Content),而叫 outline 。

隐藏部分文本并不意味着修改 buffer ,移动上下方向键,注意行数的变化可以 发现,达到每个标题的时候,行数仍然是原文本文档相应文本所在行数。而删除 outline 中的标题(包括三个句号部分)则会删除该标题下的所有文本。

outline-mode 能够让 Emacs 有选择的显示基于分级标题的任意级的文本。

outline-mode 是 major mode, 对应的 minor mode 为 outline-minor-mode ,后面再进行具体说明。

3. outlin-minor-mode

通过 M-x outline-minor-mode 可以在当前 major mode 附加 outline mode 。在 mode line 上的 major mode name 旁边会增加显示 outl 表示当前文本在outline-minor-mode 下。

在 outline-mode 下使用 C-c 配合另外一个按键来执行命令,而 minor mode 下,默认需要把 C-c 换成 C-c @ ,实际上这个键并不好敲,一般建议修改成其他键。比如有些用 C-o ,有些用 C-z 。

4. 在 doc-mode 中使用 outline mode

在 .emacs 文件中定义下面的 elisp 代码,就可以在 doc-mode 下自动启用outline-minor-mode ,并把 ourline-minor-mode 的的相关命令前缀按键设置为C-z 。

;; binding C-z to outline-minor-mode in major mode doc-mode
(add-hook 'doc-mode-hook 'doc-outline-hook)
(defun doc-outline-hook ()
(make-local-variable 'outline-regexp)
(setq outline-regexp "[=\^L]+")
(setq outline-minor-mode-prefix "\C-z")
(outline-minor-mode t)
)
上面只适合 AsciiDoc(doc-mode) 以等号表示的单行标题的格式。

5. outline-mode 命令和快捷键

C-c C-n(outline-next-visible-heading)

下一个可见标题。

C-c C-p(outline-previous-visible-heading)

上一个可见标题。

C-c C-f(outline-forward-same-level)

下个同级标题。

C-c C-b(outline-backward-same-level)

上个同级标题。

C-c C-u(outline-up-heading)

移动到上级标题。

C-c C-t(hide-body)

隐藏所有非 outline 也就是标题/章节部分。

C-c C-a(show-all)

显示所有被被隐藏的文本。

C-c C-s(show->show-subtree)

显示当前标题下的所有文本。

C-c C-d(hide->hide-subtree)

隐藏当前标题下的所有文本。

C-c C-q(hide-sublevels)

只显示第一级标题。

C-c C-o(hide-other)

隐藏当前标题以外的所有其他。

C-c C-c(hide-entry)

隐藏当前标题。

C-c C-e(show-entry)

Show the body associated with a particular heading (not subheads and their bodies).

C-c C-l(hide-leaves)

Hide the body of a particular heading and the bodies of all its subheads.

C-c C-k(show-branches)

Show the body of a heading and bodies of all its subheads.

C-c Tab(show-children)

Show the next level of subheads associated with a particular heading (none of body text).

Last updated 08-Sep-2007 16:57:55 中国标准时间