Emacs:无法自动启动通过 MELPA 安装的弹丸
Posted
技术标签:
【中文标题】Emacs:无法自动启动通过 MELPA 安装的弹丸【英文标题】:Emacs: can't autostart projectile installed through MELPA 【发布时间】:2014-08-27 22:57:07 【问题描述】:我对 emacs 还很陌生。事实上,我正在学习编辑器并尝试设置一些可以复制 Code::Blocks 或 notepad++ 的某些插件中已知的“转到项目内的文件”功能的东西。
'projectile' 满足了这个需求,我通过 MELPA 安装了它。软件包安装正确,因为我可以使用M-x projectile-global-mode
启动它,并且可以识别C-c p
命令。
但是,如果我把它放到我的.emacs
文件中,Emacs 会出现错误:
Symbol's function definition is void: projectile-global-mode
我的.emacs
文件内容如下:
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
(global-whitespace-mode 1)
(global-linum-mode 1)
(require 'package)
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
(projectile-global-mode 1)
当我首先尝试(require 'projectile)
时,我只会遇到另一个错误:
'File error: Cannot open load file, projectile'
我使用的是 Emacs 24.3.1。
如何正确设置自动启动?
【问题讨论】:
Emacs 24 Package System Initialization Problems 的可能重复项 很遗憾,您提供的问题只能部分解决此问题。即使我设法做到了(projectile-global-mode 1),projectile 仍然拒绝工作。 它确实解决了问题正如你所说的,相信我。如果您现在有不同的问题,您可能应该更新问题以提供更多详细信息。否则我们将无法为您提供帮助。 【参考方案1】:默认情况下,Emacs 会在 评估 init.el
之后初始化包。因此,在标准设置中,在评估 init
时,软件包尚不可用。
仅在包初始化后使用(add-hook 'after-init-hook #'projectile-global-mode)
启用 Projectile,或使用以下代码在 init.el
开头显式初始化包:
(require 'package)
(setq package-enable-at-startup nil) ; To avoid initializing twice
(package-initialize)
【讨论】:
这工作得更好一些。错误现在消失了,变量设置正确,但弹丸仍然拒绝工作。 describe-variable 对此提供了一些见解:'直接设置此变量不生效;要么定制它(见信息节点Easy Customization') or call the function
projectile-global-mode'。不过,我不知道如何解决这个问题。定制也没有多大帮助。
@ZalewaPL 什么“变量”?您在这里启用了一种模式,它不仅仅是一个变量。 “拒绝工作”是什么意思?它是否无法启用?特定命令是否失败? 究竟是“这个[新]问题”是什么?
经过进一步检查,它确实有效,只是不在 GNU Emacs 欢迎缓冲区中。我必须打开一个 scratch 缓冲区或一个 dired,然后我才能开始使用 C-c p
命令。
@ZalewaPL 你应该向 Github 上的 Projectile 报告。对我来说似乎是一个错误。您还可以使用 (setq inhibit-startup-screen t)
禁用欢迎屏幕,以使 Emacs 立即切换到 *scratch*
缓冲区。【参考方案2】:
你可以添加
'(initial-major-mode (quote projectile-global-mode))
到自定义设置变量部分中的 .emacs(或 init.el 或任何您的文件)文件。
另外,在较新版本的 emacs 中,菜单选项 |自定义 Emacs |您可以键入“initial-major-mode”的特定选项,这将带您进入 emacs 可以使用该设置自定义自身的界面。记得申请并保存
【讨论】:
【参考方案3】:您必须先加载弹丸,例如通过使用这个:
(require 'projectile)
(projectile-global-mode)
【讨论】:
之前试过了,没提到有问题。这会产生另一个错误:“文件错误:无法打开加载文件,弹丸” 您是否在(require 'projectile)
之前和(require 'package)
之后的某处添加了(package-initialize)
?
@ckruse 显然不是。此外,projectile-global-mode
是autoloaded。如果从 MELPA 安装,则不需要先加载 Projectile。
@lunaryorn 对我来说并不明显。以上是关于Emacs:无法自动启动通过 MELPA 安装的弹丸的主要内容,如果未能解决你的问题,请参考以下文章