Làm cách nào tôi có thể trì hoãn tải elpy bằng gói sử dụng?


9

Tôi đã cập nhật tất cả các cuộc gọi gói sử dụng của mình bây giờ :idlekhông còn là một cách hay để trì hoãn công cụ. Tại thời điểm này, một trong những lần truy cập lớn nhất vào thời gian tải của tôi là elpytải toàn bộ các mô-đun bổ sung. Hiện tại, lời cầu khẩn của tôi khá cơ bản:

(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)))))

Tuy nhiên điều này khá lãng phí nếu tôi không bao giờ chỉnh sửa bất kỳ mô-đun python nào. Vấn đề là elpy là một tập hợp các chế độ vì vậy tôi không thể chỉ sử dụng hình thức ràng buộc chế độ khi elpy-enablecần để được gọi. Vì vậy, cách tiếp cận tôi nên sử dụng. Có phải nó chỉ là một trường hợp kích hoạt trên hook chế độ python?


Tôi chỉ dừng theo dõi phiên bản MELPA của gói sử dụng. Có vẻ như: nhàn rỗi đã được gỡ bỏ không có gì để thay thế nó. Tôi sẽ chỉ đợi cho đến khi một sự thay thế bật lên.
abo-abo

@ abo-abo: Tôi có thể hiểu tại sao ,: nhàn rỗi là một chút hack. Thực sự để tải theo yêu cầu thích hợp, nó nên được kích hoạt bởi một sự kiện khác ngoài "một thời gian đã qua".
stsquad

2
:idlecó thể được thay thế bằng một cái gì đó như :defer 30số đó là độ trễ tính bằng giây sau khi gói sẽ được tải.
Kaushal Modi

@kaushalmodi, cái đó đã hoạt động chưa?
abo-abo

@ abo-abo Tôi chưa thử nhưng có lẽ nên. Tôi đọc bản cập nhật đó trong cam kết của ngày hôm qua. README cũng được cập nhật với thông tin đó.
Kaushal Modi

Câu trả lời:


6

Tôi không biết Elpy, vì vậy tôi không chắc liệu tôi có hiểu đúng vấn đề của bạn không. Tôi biết use-package, mặc dù, và gần đây bị vấn đề rất giống nhau, cụ thể là loại bỏ :idle.

Về cơ bản, có hai cách, tùy thuộc vào cách bạn cần sử dụng Elpy. Bạn có thể sử dụng một người đàn ông nghèo :idle, với run-with-idle-timer, vd

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

Ngoài ra, bạn có thể dựa vào cũ with-eval-after-loadhoặc sử dụng python-mode-hookvà trì hoãn Elpy cho đến khi Chế độ Python được tải hoặc bật tương ứng:

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

Nếu elpy là một chế độ đơn giản thì sẽ ổn thôi. Tuy nhiên, thực sự đó là một loạt các chế độ nhỏ được gắn với nhau để làm cho trải nghiệm trăn được tích hợp nhiều hơn. Do đó, bước kích hoạt elpy phải được chạy trước khi tệp python đầu tiên được tải để tất cả các mô-đun được cấu hình và sẵn sàng.
stsquad

@stsquad with-eval-after-load nên làm chính xác điều đó.
lunaryorn 17/03/2015

1
Tôi cần thêm :commands elpy-enableđể làm cho nó hoạt động. :init (with-eval-after-load 'python (elpy-enable)) :commands elpy-enable
azzamsa

3

Tác giả của elpy đề nghị thực hiện điều này thông qua một lời khuyên, vì elpy-enablesửa đổi python-mode-hookbiến, do đó, việc gọi nó trong hook-mode là quá muộn: https://github.com/jorgenschaefer/elpy/wiki/Configuration

cách tiếp cận đơn giản:

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

sử dụng use-package:

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

1
Cảm ơn vì đã tìm thấy điều này khi tôi không thể. Tôi đã đưa ra phản hồi cho người bảo trì rằng IMHO đây là nơi sai để che giấu thông tin này. Nó cũng chính thức README.rst, nhưng không phải ở nơi đầu tiên và rõ ràng nhất để tìm: phần cài đặt của tài liệu . Tôi đã báo cáo vấn đề này trong số 1606 .
Adam Spiers

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.