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 安装的弹丸的主要内容,如果未能解决你的问题,请参考以下文章

emacs 配置.emacs

在emacs中使用不同的包存储库

Emacs init.el

emacs 录制视频或着动画

emacs 录制视频或着动画

Emacs设置包管理器以及镜像