合理地在Emacs中使用分页符
Table of Contents
今天我想说一说 GNU Emacs中页 的概念, 我是怎么使用页的,以及为什么我要使用页. 在我的经验看来页的作用经常被Emacs用户所忽视, 原因可能是都觉得它太丑了吧, 不过我会告诉你一个package可以美化它. 同时,我还会推荐你一个package可以实现很方便的在各页之间跳转.
1 A Crash Course Introduction to Pages
Emacs中的‘页’指的是那些被form-feed字符(即^L,或者说Ctrl+L字符)所分割的那些文本. 在Emacs中可以按下 C-q C-l
来输入. 其中 C-q
是告诉Emacs直接插入你接下来输入的键.
正常情况下按下 C-l
会运行命令 recenter-top-bottom
. 因此我们不能通过直接按下 C-l
的方式插入form-feed字符.
不过 C-q C-l
则是告诉Emacs忽略 C-l
所绑定的命令,直接插入字面量^L, 而这个字符正是我门用来将文本分割成页的字符.
我们可以通过 C-x [
和 C-x ]
来向上/向下翻页. 他们对应的命令分别是 backward-page
和 forward-page
.
另外,按下 C-x C-p
可以选中我们当前页的所有内容.
关于页的介绍就差不多了. 下面来说说帮助我们在页之间跳转的那些package.
2 Why Use Pages?
我喜欢将内容按页分成几个章节,尤其在编程时更是如此. 比如我的工作室最近刚编写了一个名为 Chance 的库. 其源代码 就用分页符分成了几个部分,当然,这你在Github上是看不出来的;这些分页符看起来就像是一个空行而已,不行你可以看看第228行. 不过在Emacs上,分页符可以看起来像是这样的.
借助Steve Purcell那超赞的 page-break-lines package可以让丑陋的^L字符显示成这些漂亮的横线.
库 Chance
使用了 LDoc 来生成文档—LDoc类似于Javadoc的Lua版本. 在LDoc中,我们可以使用 @section
标注来将代码组织成相关的几块.
我在每个创建新 @section
的注释前都插入一个分页符,这样一来,源代码的各个块就与Emacs的各个页一一对应起来了.
如此,我就可以通过页在源代码的各个块之间跳转了. 我当然可以用前面提到过的 C-x [
/ C-x ]
来跳转,但其实还有更好的方案….
3 A Nicer Way to Navigate Pages
我觉得用 helm-pages 在页之间跳转挺不错的. 当我在 Chance
的源代码中调用 helm-pages
后,看到的结果是这样的:
它会列出每页的第一行内容,这样可以很容易的在代码的各部分之间进行跳转.
Chance
的测试案例 也一样用分页符划分成了几部分, 用 helm-pages
来浏览的效果也不错. 而且每个page的第一行恰好是一个调用 describe()
的语句,这条语句说明了这部分代码测试的内容(我用Busted 来进行单元测试).
4 Conclusion
是的,这是一篇很多的文章,不过也确实没什么好说的了. 希望本文能告诉你如何将代码划分出多个页,同时如何在这些页之间进行快速的跳转. 如果你从未用过页,那么请尝试一下,也许你会像我一样,发现这真是组织文件内容的好工具.
Update (2015年12月15日): 强烈推荐阅读此文info by Artur Balabarba on page-breaks.