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

如何覆盖Emacs中的默认模式文件?,emacs,configuration,cc-mode,Emacs,Configuration,Cc Mode,我想用另一个文件覆盖默认的Emacscc mode.el。在my.emacs中,我有以下行: (add-to-list 'load-path "/usr/home/smooth/emacs" t) 这可以正确地加载本地Emacs配置文件。比如说 (require 'go-mode-autoloads) 可从上述目录加载go mode.el 我尝试将所需的cc mode.el文件放入上述目录,希望它能覆盖默认的Emacsc-mode。但是,它没有加载我放在/usr/home/smooth/em

我想用另一个文件覆盖默认的Emacs
cc mode.el
。在my
.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。

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


我找到了这个页面:gnu.org/software/emacs/manual/html\u node/elisp/…。它通常表示,如果元素被添加,它将被添加到符号的前面,但如果可选参数append为非nil,它将被添加到末尾。似乎我在最后加了一句。我不知道为什么它如此可怕地破坏了cc模式,因为它一直在工作,直到几天前我切换到Emacs25.2。它现在运行良好

您可以使用
加载库
(或
加载
)无条件加载库,即使它提供的功能已经提供(例如,另一个库或同一库的另一个版本已经加载)

只需将要加载的库放在靠近
加载路径开头的目录中
,然后调用
加载库


[但是,请注意,装载(或重新装载)库不会取消可能已经评估过的DEFVAR和defcustoms。例如,如果库
foo.el
有一个
foo的defcustom选项
,并且该选项已加载,然后加载您自己的
foo.el
版本,该版本具有这样的defcustom,但具有不同的默认值,则您的版本将被忽略。这是
defvar
defcustom
]

的行为的一部分,一般来说,如果在
load path
修改之前没有加载
cc模式
,那么您所做的工作会起作用。查看Emacs Wiki,我注意到“加载路径”末尾没有“t”,所以我删除了它,它开始工作。上述“t”可能是问题的根源。非常奇怪的是,我在cc模式下试图回避的不当行为也消失了。上面的“t”可能导致了某种其他错误。有关Emacs Wiki页面,请参阅。我找到了此页面:。通常情况下,如果元素被添加,它会被添加到符号的前面,但是如果可选参数append不是nil,它会被添加到末尾。看起来我是在末尾添加的。我不知道为什么它如此可怕地破坏了cc模式,因为它一直在工作,直到几天前我切换到Emacs25.2。它现在工作得很好。“上面的“t”可能是问题的根源。”完全正确——我没有注意到代码中的APPEND参数。将其与
加载路径
一起使用是不寻常的,因为Emacs只有在列表中任何较早的目录中找不到库时才会在该目录中查找。您已经成功地回答了自己的问题,因此您可以将其作为答案发布并接受。通常,可选参数(如附加在
add to list
中)是布尔值,也就是说,只有当它们是
nil
或不是
nil
时才重要。在这种情况下,我喜欢为它们提供描述性的值,例如
(添加到列表'load path“foo”'append)