Emacs:如何在文件头部禁用一个小模式

10
虽然我大多数情况都不喜欢自动填充模式,但 Org 模式给出了一个使用它的好理由,因此我不想默认禁用它。但是,我有一些 Org 文件,绝对不想使用它,并且每次打开它们时都很烦恼需要键入M-x auto-etc
我知道可以从文件头向 Emacs 传递变量,在查找一番后,我找到了这篇文档,并得出我需要像这样的东西:
-*- mode: Org; auto-fill-mode 0 -*-

作为我的文件的第一行。但不是这个,因为它会导致错误:

Malformed mode-line: "auto-fill-mode 0"

自动填充模式没有启动。

我相信这是语法上的一个简单错误,但知道正确的方法会很好。

3个回答

12

这是我使用的内容:

# -*- mode: Org; eval: (auto-fill-mode 0) -*- #

注意,# 字符是可选的,我只是出于样式的原因更喜欢使用它们。

$ info emacs

48.2.4.1 Specifying File Variables:

Do not use the `mode' keyword for minor modes.  To enable or disable 
a minor mode in a local variables list, use the `eval' keyword with a
Lisp expression that runs the mode command (*note Minor Modes::).`

1
@Dmitri: 我在启用次要模式时遇到了问题。特别是当我尝试使用visual-line-mode时。缓冲区底部的模式栏显示“Wrap”,就像我处于visual-line-mode模式下一样,但是行没有按预期换行。我还没有进一步研究,但是我以这种方式做时没有遇到任何问题。 - nispio
1
可能的差别在于自动填充模式不会立即生效,因为它不会影响任何东西,直到我在超出填充列点之后第一次按下空格/回车键。然而,视觉行模式需要立即采取行动,因为它会将所有扩展到缓冲区边缘之外的行进行可视化换行。 - nispio
1
这是启用/禁用文件本地变量中较小模式的推荐方式,如果您在使用中遇到问题,请通过M-x report-emacs-bug RET进行报告。 - Stefan
1
@Stefan:你得到了错误的信息。我提交了一个错误报告,并收到了GNU的快速回复,他们引用了info emacs的48.2.4.1节。请参见我的帖子更新以获取相关文本。 - nispio
1
@nispio:好的,很棒,所以我们一开始就完全同意了。 - Stefan
显示剩余3条评论

5
根据文档的这一部分,将以下内容附加到您的文件末尾:
# Local Variables:
# eval: (auto-fill-mode 0)
# End: 

这确实有效。不幸的是,在 Org Mode 文件中,缓冲区末尾的某些内容将被折叠到列表中的最后一项中,因此您必须去寻找它。这就是为什么对于 Org 文件,我希望所有设置都在导言部分中的原因。 - Dmitri
2
为了清楚地表明您在Org文件末尾有“系统设置”,您可以添加一个Org部分,例如“*本地变量”,并对其进行注释,以便它永远不会被导出。 - fniessen
1
@Dmitri,只需使用最后标记为“:noexport:”的部分。 - gdkrmr

4

这只适用于设置变量,而不是启用次要模式,对吗? - abo-abo
它确实可以启用/禁用次要模式。事实上,我会收到一个对话框询问它是否“安全”,如果是,它可以将其保存到我的.emacs文件中的变量中。太酷了!谢谢。 - Dmitri
1
就我个人而言,当我以这种方式启用次要模式时,我会得到混合的行为。只要注意这种方法可能并不总是有效。 - nispio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接