我刚刚cmake-mode
在 Emacs 24 中安装了该包,使用方法如下:
M-x package-install cmake-mode
我可以在以下位置看到该包: ,并且可以使用以下部分的~/.emacs.d/elpa/cmake-mode-20110824
指令加载它:Commentary:
~/.emacs.d/elpa/cmake-mode-20110824/cmake-mode.el
;; Add this code to your .emacs file to use the mode:
;;
;; (setq load-path (cons (expand-file-name "/dir/with/cmake-mode") load-path))
;; (require 'cmake-mode)
;; (setq auto-mode-alist
;; (append '(("CMakeLists\\.txt\\'" . cmake-mode)
;; ("\\.cmake\\'" . cmake-mode))
;; auto-mode-alist))
然而,这与使用说明在 ELPA 的 EmacsWiki 页面上:
... 软件包在 init.el 加载后初始化。这意味着您不应该将软件包特定的初始化放入 init.el 中...
我倾向于同意这个指示,因为在我的~/.gnu-emacs
文件中添加了一行,例如:
(add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")
很丑陋,而且如果我升级软件包,它就会崩溃。但是如果没有这行代码,我就无法使用cmake-mode
。
我这里遗漏了什么吗?
笔记:
- 我没有做任何奇怪的事情
package-enable-at-startup
,它的价值是t
。 - 我在用序幕。
user-emacs-directory
价值是"~/.emacs.d/"
(感谢@lawlist 的建议)package-user-dir
价值是"~/.emacs.d/elpa"
答案1
我使用 marmalade-repo 安装了 cmake-mode,并查看了 cmake-mode-autoloads.el。看来作者有意识地决定not
在 autoloads 文件中包括设置所需的一切。但是,cmake-mode.el 第 25 至 30 行的说明是正确的,您在问题中引用了这些说明。如果您使用第 25 至 30 行并正确设置路径,那么您确实不是需要额外的一行代码,例如(add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")
。
显然,您不会想使用/dir/with/cmake-mode
-- 您想~/.emacs.d/elpa/cmake-mode-20110824
在结尾处不使用正斜杠。
(setq load-path (cons (expand-file-name "~/.emacs.d/elpa/cmake-mode-20110824") load-path))
(require 'cmake-mode)
(setq auto-mode-alist
(append '(("CMakeLists\\.txt\\'" . cmake-mode)
("\\.cmake\\'" . cmake-mode))
auto-mode-alist))
如果上述代码不起作用,您可能需要删除 c-make-mode... 目录并尝试重新安装(使用您自己的路径)。
答案2
鉴于 wiki 的本质是一半代码存储库,一半备忘录对于 Emacs 黑客来说,你很容易忽略了这一点:
将 package-initialize 移动到启动期间的另一个点可能会更容易,这样您就可以(需要)ELPA 包;这解决了许多描述的问题:
这是我所做的;我的自定义初始化脚本加载的第一个文件之一(据我所知,创建该脚本的是脑桥认真使用 Emacs 1)
(require 'package)
(setq package-enable-at-startup nil)
(package-initialize)
然后我只需要选择(require)
我需要的 ELPA 包即可。这样做的好处还在于可以更好地控制 ELPA 安装包的行为;例如,如果我想暂时禁用某个包但不完全卸载它,只需注释掉相关调用即可(require)
,而默认行为需要将包完全移出我的 ELPA 目录。
(1. 尽管诱惑几乎压倒一切,我还是勇敢地拒绝为我的自定义初始化脚本命名lightsaber.el
。
答案3
您可以在程序包加载后使用 进行所有初始化after-init-hook
。从EmacsWiki:
;; init.el
(add-hook 'after-init-hook (lambda () (load "<real init file>")))
答案4
我开始使用 ELPA 时也遇到过类似的问题。我有几个本地包,但 ELPA 中没有这些包。
因此我修改了 load-path。由于某种原因,package.el 无法正确更新 load-path。为了解决这个问题,我不得不(setq load-path (cons "~/.emacs.d" load-path))
后呼吁package-initialize