如何覆盖Emacs中的默认模式文件?

问题描述:

我想用另一个文件覆盖默认的Emacs cc-mode.el。在我.emacs,我有以下行:如何覆盖Emacs中的默认模式文件?

(add-to-list 'load-path "/usr/home/smooth/emacs" t) 

这工作正常装载本地Emacs的配置文件。例如,

(require 'go-mode-autoloads) 

正在从上述目录加载go-mode.el

我试着将所需的cc-mode.el文件放到上面的目录中,希望它能覆盖默认的Emacs c-mode。但是,它没有加载我在/usr/home/smooth/emacs中输入的cc-mode.el文件。相反,它继续使用默认的。

如何让Emacs使用我的cc-mode.el文件而不是默认的文件?我已经广泛搜索了Google并尝试了Emacs Wiki,但是我找不到正确的页面。

或者,我如何设置Emacs使用c-mode系统默认的另一个文件?我不介意将当前的cc-mode.el重命名为另一个名称。

我的Emacs版本是25.2。

+0

通常,如果在加载路径修改之前没有加载cc模式,您所做的工作就会奏效。 – phils

+0

看着Emacs Wiki,我注意到在“加载路径”末尾没有“t”,所以我删除了它并开始工作。上面的“t”可能是问题的根源。非常奇怪的是,我在cc模式下试图解决的不正常行为也消失了。上面的“t”可能导致了某种其他错误。请参阅https://www.emacswiki.org/emacs/LoadPath以获取Emacs Wiki页面。 –

+0

我发现这个网页:https://www.gnu.org/software/emacs/manual/html_node/elisp/List-Variables.html。它说'通常情况下,如果元素被添加,它会被添加到符号的前面,但是如果可选参数append不是零,它会被添加到最后。“看起来我是在最后添加的。我不确定为什么这样打破了cc模式如此可怕,因为它在工作,直到前几天我转向emacs 25.2。它现在运作良好。 –

看着Emacs Wiki,我注意到在“加载路径”末尾没有“t”,所以我删除了它并开始工作。上面的“t”可能是问题的根源。非常奇怪的是,我在cc模式下试图解决的不正常行为也消失了。上面的“t”可能导致了某种其他错误。查看Emacs Wiki页面的emacswiki.org/emacs/LoadPath。

我发现此页面:gnu.org/software/emacs/manual/html_node/elisp/...。它通常表示,如果元素被添加,它将被添加到符号的前面,但是如果可选参数append不是零,则会在末尾添加元素。看来我在最后加入了。我不确定为什么这样打破了cc模式如此可怕,因为它在工作,直到前几天我转向emacs 25.2。它现在运作良好。

+0

通常,像add-to-list中的APPEND这样的可选参数是布尔值,即只有当它们是'nil'或不'nil'时才是重要的。在这种情况下,我喜欢给它们描述性的值,例如'(add-to-list'load-path“foo”'append)'。 – jpkotta

您可以使用load-library(或load)至无条件加载图书馆,即使已经有过的功能(S)提供已提供(例如,通过另一个库或同一库的另一版本加载)。

只需将要载入的库放入load-path开头附近的目录,然后再拨load-library即可。

[但请注意,加载(或重新加载)库会取消已经评估过的defvars和defcustoms 而不是。例如,如果库foo.elfoo-option有一个不确定性,并且它已被加载,然后加载自己版本的foo.el,该版本具有这种不适用但具有不同的默认值,那么您将被忽略。这是defvardefcustom的行为的一部分。]