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

时间:2017-05-05 10:53:58

标签: emacs configuration cc-mode

我想用另一个文件覆盖默认的Emacs cc-mode.el。在我的.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。但是,它没有加载我放在cc-mode.el中的/usr/home/smooth/emacs文件。相反,它继续使用默认值。

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

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

我的Emacs版本是25.2。

2 个答案:

答案 0 :(得分:0)

看着Emacs Wiki,我注意到“load-path”末尾没有“t”,所以我删除了它并开始工作。上面的“t”可能是问题的根源。非常奇怪的是,我试图绕过的cc模式中的不当行为也消失了。上述“t”可能导致某种其他错误。有关Emacs Wiki页面,请参阅emacswiki.org/emacs/LoadPath。

我找到了这个页面:gnu.org/software/emacs/manual/html_node/elisp/...它说正常情况下,如果添加了元素,它将被添加到符号的前面,但如果可选参数append是非零,则在末尾添加它。看来我最后还是补充道。我不确定为什么会破坏cc模式如此可怕,因为它工作直到我几天前切换到emacs 25.2。它现在运作良好。

答案 1 :(得分:0)

您可以使用 load-library (或load无条件加载库,即使它提供的功能已经存在已提供(例如,已由另一个库或已加载的同一库的其他版本)。

只需将要加载的库放在load-path开头附近的目录中,然后调用load-library

[但是,请注意,加载(或重新加载)库 NOT 会取消可能已经评估过的defvars和defcustoms。例如,如果库foo.el具有foo-option的defcustom且已加载,则您加载自己的foo.el版本,其具有此类defcustom但具有不同的默认值,你的将被忽略。这是defvardefcustom行为的一部分。]