16.4 文本和自动填充模式

现在我们来讨论打开文本模式和自动填充模式的部分。

;;; 文本模式和自动填充模式
;; 下面两行将Emacs置于文本模式和自动填充模式,适用于希望开始写散文而非代码的作者。
(setq-default major-mode 'text-mode)
(add-hook 'text-mode-hook 'turn-on-auto-fill)

这是这个 .emacs 文件的第一部分,不仅提醒了健忘的人类!

括号中的两行中的第一行告诉Emacs在找到文件时打开文本模式,除非该文件应该进入其他模式,比如C模式。

当Emacs读取一个文件时,它查看文件名的扩展名,如果有的话(扩展名是 ‘.’ 后面的部分)。如果文件以 ‘.c’ 或 ‘.h’ 结尾,那么Emacs将打开C模式。此外,Emacs查看文件的第一非空行;如果该行说 ‘-*- C -*-,Emacs将打开C模式。Emacs拥有一个自动使用的扩展名和规范列表。此外,Emacs在文件的最后一页附近查找每个缓冲区的本地变量列表,如果有的话。

现在,回到 .emacs 文件。

这里是上一行;它是如何工作的?

(setq major-mode 'text-mode)

这一行是一个简短但完整的Emacs Lisp表达式。

我们已经熟悉了 setq。它将变量 major-mode 设置为后续的值,即 text-mode。在 text-mode 之前的单引号告诉Emacs直接处理 text-mode 符号,而不是处理它可能代表的任何东西。参见 See Setting the Value of a Variable, 了解 setq 的工作原理。主要的观点是,在你的 .emacs 文件中设置值的过程与在Emacs的其他任何地方使用的过程没有区别。

这是下一行:

(add-hook 'text-mode-hook 'turn-on-auto-fill)

在这一行中,add-hook 命令将 turn-on-auto-fill 添加到变量中。

turn-on-auto-fill 是一个程序的名称,猜对了!它打开自动填充模式。

每次Emacs打开文本模式时,Emacs都会运行挂钩到文本模式的命令。因此,每次Emacs打开文本模式时,Emacs也会打开自动填充模式。

简而言之,第一行使Emacs在编辑文件时进入文本模式,除非文件名扩展名、第一非空行或本地变量告诉Emacs使用其他模式。

文本模式在其他操作中将语法表设置为方便写作者使用。在文本模式中,Emacs将撇号视为单词的一部分,如字母一样;但Emacs不将句点或空格视为单词的一部分。因此,M-f 可以将光标移到 ‘it's’ 上。另一方面,在C模式中,M-f 在 ‘it's’ 的 ‘t’ 后停止。

第二行使Emacs在打开文本模式时打开自动填充模式。在自动填充模式中,Emacs会自动断开太宽的行,并将行的过宽部分移到下一行。Emacs在单词之间断开行,而不是在它们内部。

当关闭自动填充模式时,行将根据您输入它们而继续向右延伸。根据您设置的 truncate-lines 的值,您输入的单词可能会从屏幕右侧消失,或者以一种相当丑陋和不可读的方式显示在屏幕上,作为续行。

此外,在我的 .emacs 文件的这一部分中,我告诉Emacs填充命令在冒号后插入两个空格:

(setq colon-double-space t)