禁用填写 xml-mode
Posted
技术标签:
【中文标题】禁用填写 xml-mode【英文标题】:Disable fill in xml-mode 【发布时间】:2015-01-28 19:09:22 【问题描述】:我正在尝试将 Emacs 配置为在编辑 XML 文档时不激活自动填充。
在我的.emacs
文件中,我添加了一个钩子,以便文本模式默认启用自动填充:
(add-hook 'text-mode-hook 'turn-on-auto-fill)
我在加载路径中添加了一个目录:
(add-to-list 'load-path "~/.emacs.d/lisp/")
在那个目录中,我为这个工作站写了一个文件xml.el
,我尝试了下面的每一个,但都没有成功:
(add-hook 'xml-mode-hook 'turn-off-auto-fill)
(add-hook 'xml-mode-hook 'auto-fill-mode)
(remove-hook 'xml-mode-hook 'turn-on-auto-fill)
(remove-hook 'xml-mode-hook 'auto-fill-mode)
如何在 XML 模式下禁用自动填充?
编辑:这似乎是由我上面提到的text-mode-hook
引起的。如何在nxml-mode
中覆盖这个钩子?
【问题讨论】:
“我写了一个文件xml.el
”是什么意思?您是否编写了自己的主要模式来编辑 XML?它实际上有xml-mode-hook
吗?通常我希望看到nxml-mode
用于编辑XML 文件,它有自己的nxml-mode-hook
。
不,xml.el
在 ~/.emacs.d/lisp
中。
将我的钩子调用更改为使用 nxml-mode-hook
也不起作用。
好吧,只有当你同时调用nxml-mode
时它才会起作用。
xml.el
是标准 Emacs 库的名称。你不应该在你的load-path
下放置一个冲突的文件名,因为它可能会影响标准库,破坏任何依赖它的东西。我建议对所有自定义 elisp 库使用不冲突的前缀。例如,我使用my-
作为前缀(用于文件名和函数名)。
【参考方案1】:
啊,nxml-mode
派生自 text-mode
。这让我有点吃惊(尽管仔细观察,它似乎是 Emacs 中标记语言模式的标准)。
在这种情况下,您可以在nxml-mode-hook
中再次禁用它(因为此时text-mode-hook
已经运行):
(add-hook 'nxml-mode-hook 'turn-off-auto-fill)
(请注意,您在 cmets 中说过这对您不起作用,但它确实对我有用)。
或者只需将您的 text-mode-hook
代码更改为类似以下内容,以便在启用自动填充之前捕获这种情况:
(defun my-text-mode-hook ()
"Custom behaviours for `text-mode'."
;; Enable `auto-fill-mode', except in `nxml-mode' (which is derived
;; from `text-mode').
(unless (eq major-mode 'nxml-mode)
(turn-on-auto-fill)))
(add-hook 'text-mode-hook 'my-text-mode-hook)
【讨论】:
将第一个 sn-p 添加到我的.emacs
有效,所以看来真正的问题是我在加载路径中的 elisp 文件没有运行。
你是怎么加载它的?
我在~/.emacs.d/lisp
中有一个文件my-xml.el
,它在我的load-path
列表中。
如果仅此而已,那么您没有加载它。 load-path
告诉 Emacs 在被要求加载库时在哪里寻找库,但 Emacs 不会在没有被告知的情况下加载任何内容。您需要致电(load "my-xml")
,或者,如果您的文件包含(provide 'my-xml)
,您可以使用(require 'my-xml)
。以上是关于禁用填写 xml-mode的主要内容,如果未能解决你的问题,请参考以下文章