【问题标题】:How to mask an already installed Emacs package?如何屏蔽已经安装的 Emacs 包?
【发布时间】:2018-05-30 17:05:21
【问题描述】:

我在无法修改个人文件夹之外的内容的工作环境中使用 Emacs 24。

我想安装一个特定的包,但在我的个人文件夹之外已经安装了这个包的旧版本。我必须手动安装它,所以我将包文件夹路径添加到“加载路径”,并在 init.el 文件中自己需要它。但是,启动后,当我检查版本时,它显示该版本仍然是从我个人文件夹之外的地方加载的旧版本。

我的问题是如何屏蔽那个旧包?换句话说,我该如何选择加载我的版本?

【问题讨论】:

  • 您在load-path 的哪个位置添加了文件夹?
  • init.el 文件中的@choroba
  • 把它放在你的load-path中的旧版本之前
  • list-load-path-shadows 可能有助于调试加载路径排序问题
  • 提供详细信息(即引用您正在使用的代码,显示您用于“检查版本”的命令)。

标签: emacs package load-path


【解决方案1】:

关键是在你的 init.el 文件的最开始修改 load-path 变量。

add-to-list 添加到列表的前面。例如,这是我加载我的 org 版本的方式:

(add-to-list 'load-path "~/.emacs.d/org-mode/lisp")

我还建议您检查变量的内容(使用 Meta-x describe-variable)。这将通知您首先扫描哪些目录。

请注意,有时混合软件包会产生奇怪的问题。如果发生这种情况,请耐心等待,一次尝试一个包。

附录:正如 Drew 下面提到的,emacs 会尝试找到要加载的包 在加载路径中的每个目录中,从其头部开始。 所以目录的顺序很重要。

--dmg

【讨论】:

  • load-path 中条目的顺序很重要。如果包所在的其他目录列在你的之前,那么它将被使用,而不是你的。但是,如果在加载初始化文件之前已经预加载了库,那么您必须使用 load-library 而不是 require 显式加载库(在更新 load-path 之后,如本答案所示)。
  • @Drew 感谢 cmets。我想这就是现在发生在我身上的事情。因为当我检查包版本时,它仍然给我旧版本。那么,对于加载库,我可以给出与要求相同的参数吗?例如,从 (require 'org) 更改为 (load-library 'org)?
  • @dmg 谢谢!但是当我检查包版本时,它仍然给我旧版本号。那么,是不是包是预加载的呢?如果有,你有什么建议?
  • @Drew 我刚刚尝试了加载库,但仍然检查版本只是给了我旧版本。有什么建议或想法吗?
  • mm,我有一个建议。擦除您的 .emacs.d/init.el,因此您不会加载任何内容。然后运行emacs。检查包是否已加载,及其版本。在这种情况下,这意味着系统配置在您之前预加载了该软件包。在这种情况下,您需要修改系统范围的 init 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
相关资源
最近更新 更多