如何延迟使用use-package加载elpy?


9

现在,我一直在更新所有的使用包调用,这:idle不再是推迟工作的好方法。目前,对我的加载时间影响最大​​的是elpy加载一堆其他模块。目前,我的调用非常基本:

(use-package elpy
  :commands elpy-enable
  :init (elpy-enable)
  :config
  (progn
    (setq elpy-rpc-backend "jedi"
          elpy-rpc-project-specific 't)
    (when (fboundp 'flycheck-mode)
      (setq elpy-modules (delete 'elpy-module-flymake elpy-modules)))))

但是,如果我从不编辑任何python模块,这将非常浪费。麻烦的是elpy是模式的集合,因此我不能随便使用模式绑定表单elpy-enable。那么我应该使用哪种方法。这只是在python模式钩子上触发的一种情况吗?


我只是停止跟踪MELPA版本的使用包。似乎:idle已被删除,没有任何替代方法。我将等到弹出替换框。
ABO血型ABO

@ abo-abo:我能理解为什么:idle有点hack。实际上,对于正确的按需加载,它应该由“某些时间过去”以外的事件触发。
stsquad

2
:idle可以用类似的方式代替,:defer 30其中数字是应延迟的秒数,之后应加载软件包。
Kaushal Modi 2015年

@kaushalmodi,已经可以了吗?
ABO血型ABO

@ abo-abo我还没有尝试过,但应该可以。我在昨天的提交中阅读了该更新。自述文件也随该信息更新。
Kaushal Modi 2015年

Answers:


6

我不认识Elpy,所以不确定我是否正确理解您的问题。use-package不过,我确实知道,最近又遇到了同样的问题,即删除:idle

基本上,有两种解决方法,具体取决于您使用Elpy的方式。您可以使用一个穷人的:idle,有run-with-idle-timer,如

:init (run-with-idle-timer 10 nil #'elpy-enable)

或者,您可以依靠良好的旧版本,with-eval-after-load或者使用python-mode-hook和延迟Elpy直到分别加载或启用Python模式之后:

:init (add-hook 'python-mode-hook #'elpy-enable)
;; or
:init (with-eval-after-load 'python (elpy-enable))

如果elpy是一个简单的模式,那就没问题了。但是实际上,这是一堆次要模式,将python体验整合在一起。因此,必须在加载第一个python文件之前运行elpy-enable步骤,以便所有模块都已配置并准备就绪。
stsquad

@stsquad with-eval-after-load应该可以做到这一点。
lunaryorn

1
我需要添加:commands elpy-enable使其生效。:init (with-eval-after-load 'python (elpy-enable)) :commands elpy-enable
azzamsa

3

elpy的作者建议通过建议来执行此操作,因为elpy-enable会修改python-mode-hook变量,因此在模式挂钩中调用它为时已晚:https : //github.com/jorgenschaefer/elpy/wiki/Configuration

简单方法:

(package-initialize)
(advice-add 'python-mode :before 'elpy-enable)

使用use-package

(use-package elpy :ensure t
  :defer t
  :init
  (advice-add 'python-mode :before 'elpy-enable))

1
感谢您在无法找到时找到此文件。我已经向维护者反馈说恕我直言,这是隐藏此信息的错误位置。它也位于官方网站中README.rst,但不在第一个最明显的地方:文档的安装部分。我已经在问题#1606中报告了此问题
亚当·斯皮尔斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.