【问题标题】:Load plugin from specific location从特定位置加载插件
【发布时间】:2013-06-18 07:33:51
【问题描述】:

在我的计算机上,我安装了一个 Emacs 插件,它与 Debian 软件包系统一起安装,但是这个插件已经过时了,我正在尝试使用 package-install 将它安装在我的主目录中。我安装了较新的版本,但如果我检查加载的是哪个版本,则会是较旧的版本。

我尝试使用load-file 和新版本的全局路径,但它仍会加载旧版本。

如何强制加载新的?请假设我不是计算机的系统管理员,我无法卸载任何软件包。

【问题讨论】:

  • 您尝试加载的库是否仅包含一个文件?还是有多个文件?
  • 另外,如果您指定了您所指的库(和 debian 包),将会有所帮助。
  • 库是“yasn-p”。旧的只有一个文件(0.6),新的有多个文件(我在 Emacs 24 上通过 package-install 安装)

标签: emacs


【解决方案1】:

当一个库包含多个文件时,可以假设一个主文件将根据需要加载其他文件;但如果该目录不在 load-path 中,那么它将无法加载它们(或者至少不能加载那些版本),所以 load-file 本身不会成功。

我自己并没有过多使用 package.el,但我真的认为它会管理加载路径,使其优先于 site-lisp 中的任何内容(大概是 debian 包的位置)正在安装东西。)

尝试运行emacs --no-site-lisp 并检查是否加载了正确版本的库。如果您不想要站点库中的任何内容,那么这甚至可能是您的解决方案。

如果可行,则在正常启动 Emacs 后检查 load-path 变量。除非给出绝对路径,否则 Emacs 将按顺序查看这些目录,并使用第一个匹配的目录。我猜由于某种原因,您的 site-lisp 目录出现在 package.el 创建的目录之前。

或者可能软件包根本没有正确安装。

话虽如此,在 Emacs 24.3 中至少会自动调用 (package-initialize),我认为您不需要手动加载任何内容。检查package-load-list 变量。

编辑:

关于最后一点,请参阅cannot open load dired-details

当时我没有注意到 Emacs 直到用户初始化文件加载之后才初始化包,所以你通常需要手动初始化它们在你的初始化文件中。

【讨论】:

  • 感谢您的回答:我检查了 load-path 的值,它首先有一个绝对路径,指向下载的版本而不是 site-lisp 的。我在load-path 中有很多路径,但是所有基于家庭的路径都在基于 dpkg 的路径之前。另外,package-load-list 变量设置为(all),所以我无法弄清楚问题是什么......
  • M-x locate-library RET yasnippet RET 告诉你什么?
  • 它说库位于我的主目录(包安装版本!),但M-x yas/about sais 安装了 0.6.1b 版本(Debian 包之一)
  • 当您运行emacs --no-site-lisp 时,它是否使用了包安装版本?
  • 我怀疑有些东西正试图在包初始化发生之前 加载 yasn-p。运行emacs --no-site-lisp --debug-init。当一个错误被抛出时,你应该得到一个回溯,它会告诉你它发生在哪里。
【解决方案2】:

试试这个

(defun please-load-my-stuff ()
  (interactive)
  (load "PATH-TO-STUFF/STUFF))

当可以访问 init 时,只需将表单 "(load ...)" 放在那里。 如果需要多个文件,load-path 也必须这样设置 - 在加载之前,以便可以访问其他所需的文件。

【讨论】:

  • 感谢您的回答。我不是 Emacs 配置专家,正如您对我的问题所了解的那样……我需要将该代码放在哪里?我想它会转到我的.emacs 文件,不是吗?我从哪里“调用”这个函数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 2011-08-24
  • 2022-11-15
  • 1970-01-01
相关资源
最近更新 更多