ฉันจะเลื่อนการโหลด 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)))))

อย่างไรก็ตามมันค่อนข้างสิ้นเปลืองหากฉันไม่เคยแก้ไขโมดูลหลาม ปัญหาคือ elpy คือชุดของโหมดดังนั้นฉันไม่สามารถใช้รูปแบบการรวมโหมดตามที่elpy-enableต้องการเรียกใช้ ดังนั้นฉันควรใช้วิธีใด มันเป็นเพียงกรณีของการทริกเกอร์ในเบ็ดหลามโหมด?


ฉันหยุดการติดตามแพคเกจการใช้เวอร์ชัน MELPA ดูเหมือนว่า: ว่างถูกลบโดยไม่มีอะไรจะแทนที่ ฉันจะรอจนกว่าผู้แทนจะปรากฏขึ้น
abo-abo

@ abo-abo: ฉันสามารถเข้าใจว่าทำไม: ไม่ได้ใช้งานเป็นบิตของการแฮ็ค จริง ๆ สำหรับการโหลดตามความต้องการที่เหมาะสมมันควรถูกทริกเกอร์โดยเหตุการณ์อื่นที่ไม่ใช่ "เวลาผ่านไป"
stsquad

2
:idleสามารถถูกแทนที่ด้วยบางสิ่งบางอย่างเช่น:defer 30ที่หมายเลขคือความล่าช้าในไม่กี่วินาทีหลังจากที่แพคเกจควรจะโหลด
Kaushal Modi

@kaushalmodi มันใช้งานได้แล้วเหรอ?
abo-abo

@ abo-abo ฉันไม่ได้ลอง แต่น่าจะเป็นไปได้ ฉันอ่านการอัปเดตนั้นเมื่อวันที่ผ่านมา README ได้รับการปรับปรุงด้วยข้อมูลนั้น
Kaushal Modi

คำตอบ:


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 เป็นโหมดง่าย ๆ ก็คงจะใช้ได้ อย่างไรก็ตามจริงๆแล้วมันเป็นกลุ่มของโหมดย่อยที่รวมเข้าด้วยกันเพื่อให้ประสบการณ์ของหลามรวมกันมากขึ้น ดังนั้นขั้นตอนการเปิดใช้งาน elpy จะต้องถูกเรียกใช้ก่อนที่จะโหลดไฟล์หลามแรกเพื่อให้โมดูลทั้งหมดได้รับการกำหนดค่าและพร้อมใช้งาน
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
ขอบคุณที่ค้นหาสิ่งนี้เมื่อฉันทำไม่ได้ ฉันได้รับคำติชมจากผู้ดูแลว่า IMHO นี่เป็นสถานที่ที่ไม่ถูกต้องในการซ่อนข้อมูลนี้ นอกจากนี้ยังมีในอย่างเป็นทางการREADME.rstแต่ไม่ได้อยู่ในสถานที่แรกและที่เห็นได้ชัดที่สุดในการดู: ส่วนการติดตั้งของเอกสาร ฉันได้รายงานเรื่องนี้ในฉบับที่ 1606
Adam Spires

2

ฉันคิดว่ามันเป็นไปได้ด้วย: หลังจาก

(use-package python
  :ensure t
  :defer t
  :mode ("\\.py\\'" . python-mode))

(use-package elpy
  :ensure t
  :after python
  :config (elpy-enable))

1
ไม่ได้ผลสำหรับฉัน นอกจากนี้คุณไม่จำเป็นถ้าคุณใช้อยู่แล้ว:defer github.com/jwiegley/use-package#notes-about-lazy-loading:mode
azzamsa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.