【问题标题】:Emacs: can't autostart projectile installed through MELPAEmacs:无法自动启动通过 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。

如何正确设置自动启动?

【问题讨论】:

  • 很遗憾,您提供的问题只能部分解决此问题。即使我设法做到了(projectile-global-mode 1),projectile 仍然拒绝工作。
  • 确实解决了问题正如你所说的,相信我。如果您现在有不同的问题,您可能应该更新问题以提供更多详细信息。否则我们将无法为您提供帮助。

标签: emacs autostart melpa


【解决方案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-modeautoloaded。如果从 MELPA 安装,则不需要先加载 Projectile。
    • @lunaryorn 对我来说并不明显。
    猜你喜欢
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多