在每个文件(不是文件类型)的基础上禁用自动填充模式

Posted

技术标签:

【中文标题】在每个文件(不是文件类型)的基础上禁用自动填充模式【英文标题】:Disabling auto-fill-mode on a per-file (not filetype) basis 【发布时间】:2011-07-12 18:43:59 【问题描述】:

我默认为所有 LaTeX 文件启用自动填充模式。

这通常很好,但有时一个乳胶文件主要包含表格,我想在编辑该特定文件时禁用自动填充模式。

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

【问题讨论】:

【参考方案1】:

查看官方 Emacs 文档中的“文件中的局部变量”部分。有eval 变量,允许评估任何代码。所以它看起来像(把它放在文件末尾,注释字符应该是特定于模式的):

# Local Variables:
# eval: (auto-fill-mode -1)
# End:

【讨论】:

-1。通过将eval 启用为安全的局部变量,您允许任何可以说服您在 Emacs 中打开他们选择的文件的人运行任意 Emacs Lisp 代码。请参阅手册中的Safety of file variables。 @GarethRees 这仍然是一个很好的解决方案:eval 通常设置为要求确认,并且将 这个特殊的 eval 表单添加到 safe-local-eval-forms 非常节省我'我说。【参考方案2】:

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

如果你想在顶部放置一个标识符,你可以使用这样的代码:

(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)

显然,将"Some Unique Identifier" 更改为合理的值 - 例如搜索表格本身。然后你会得到你想要的,带有表格的 LaTeX 文件不会被自动填充。

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

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

【讨论】:

如果你一个人工作,文件太多,局部变量效果更好——这就是我建议这个解决方案的原因...... @Alex True,但是(我刚刚修改了答案),如果您准确搜索他描述的条件(表格),那么您实际上不必修改任何文件。跨度> 嗯.. 从 Emacs 27.2-2 升级到 28.0.50 后,这被打破了。有什么提示吗?【参考方案3】:

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

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

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

【讨论】:

这是一个很好的解决方案,尤其是因为 Emacs 27.2 中的某些内容破坏了 Trey 的解决方案。但这里的问题是它真的 禁用了自动填充。使用 Trey 的解决方案,有时仍然可以在需要时选择自动填充 (M-q)。【参考方案4】:

不确定添加了哪个 Emacs 版本,但您也可以基于每个文件“中性”auto-fill-function 变量:

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

【讨论】:

以上是关于在每个文件(不是文件类型)的基础上禁用自动填充模式的主要内容,如果未能解决你的问题,请参考以下文章

在自动填充被破坏或禁用的站点上强制登录自动填充

无法在 iOS 15 swift 上禁用键盘上的自动填充。 Xcode 13

在 html 表单中禁用自动填充

禁用填写 xml-mode

如何在 ios 上禁用基于 webkit 的浏览器应用程序中的自动填充

如何使用 Chrome 禁用自动填充?