Emacs 基于每个文件(而非文件类型)禁用自动填充模式

Emacs 基于每个文件(而非文件类型)禁用自动填充模式,emacs,dot-emacs,Emacs,Dot Emacs,默认情况下,我会为所有LaTeX文件启用自动填充模式 这通常很好,但有时一个latex文件包含的大部分是表,每当我编辑那个特定的文件时,我想禁用自动填充模式 是否可以在.tex文件的顶部指定我希望它是例外? 或者,是否可以在.emacs中指定这些文件的路径/名称?查看官方emacs文档中的“文件中的局部变量”部分。有一个eval变量,允许对任何代码进行求值。所以它看起来像(把这个放到文件的末尾,注释字符应该是特定于模式的): 我喜欢在文件中查找某些内容以确定是否要自动填充的解决方案 如果要在顶部

默认情况下,我会为所有LaTeX文件启用自动填充模式

这通常很好,但有时一个latex文件包含的大部分是表,每当我编辑那个特定的文件时,我想禁用自动填充模式

是否可以在.tex文件的顶部指定我希望它是例外? 或者,是否可以在.emacs中指定这些文件的路径/名称?

查看官方emacs文档中的“文件中的局部变量”部分。有一个
eval
变量,允许对任何代码进行求值。所以它看起来像(把这个放到文件的末尾,注释字符应该是特定于模式的):


我喜欢在文件中查找某些内容以确定是否要自动填充的解决方案

如果要在顶部放置标识符,可以使用如下代码:

(defun my-auto-fill-disabling-hook ()
  "Check to see if we should disable autofill."
  (save-excursion
    (when (re-search-forward "Some Unique Identifier" 1000 t)
      (auto-fill-mode -1))))

(add-hook 'find-file-hooks 'my-auto-fill-disabling-hook)
显然,将
“某些唯一标识符”
更改为合理的内容,例如搜索表本身。然后你会得到你想要的,带有表格的LaTeX文件不会自动填充

注意:@Alex建议使用文件局部变量,但根据以下说明,这是一个错误:

然而,通常情况下,以这种方式启用次要模式是错误的。最 次要模式,如自动填充模式,代表单个用户 偏好。如果要使用次要模式,最好设置 主模式与您的init文件挂钩,以打开该次模式 您自己(参见Init文件),而不是使用局部变量列表 把你的品味强加给每个人


不确定添加了哪个Emacs版本,但您也可以根据每个文件对
自动填充功能
变量进行“中性化”:

# Local Variables:
# auto-fill-function: (lambda nil nil)
# End:

这种方法在技术上不会禁用填充模式,但与启用eval不同,它是安全的,并达到了预期的结果。将这样一行作为文件的第一行。只需指定正确的主模式(可能是文本),并将“填充”列设置为适当大的值:

-*- mode: text; fill-column: 99999 -*-

正如前面所建议的,您可以编写一个钩子来决定是否应该启用自动填充,但我觉得这比必要的工作要多。

-1。通过将
eval
作为一个安全的局部变量启用,您可以让任何能够说服您在Emacs中打开自己选择的文件的人运行任意Emacs Lisp代码。请参阅手册。@GarethRees这仍然是一个很好的解决方案:
eval
通常设置为请求确认,我认为将此特定的评估表单添加到
safe local eval forms
非常节省。如果您单独工作,并且文件太多,则局部变量工作得更好-这就是我建议此解决方案的原因…@Alex True,但是(我刚刚修改了答案),如果你搜索的是他描述的条件(表),那么你实际上不需要修改任何文件。。从Emacs 27.2-2升级到28.0.50后,这一点被打破。有什么提示吗?这是一个很好的解决方案,特别是因为Emacs 27.2中的某些内容破坏了Trey的解决方案。但这里的问题是它实际上禁用了自动填充。有了Trey的解决方案,有时仍然可以在需要时选择自动填充(M-q)。
-*- mode: text; fill-column: 99999 -*-