ฉันจะตั้งค่าการเชื่อมโยงที่สำคัญสำหรับโหมดในสถานะความชั่วร้ายที่เฉพาะเจาะจงได้อย่างไร


9

ฉันมีชุดของการเชื่อมโยงคีย์ที่ฉันใช้สำหรับทั้งสองweb-modeและphp-modeในโหมดแทรก (ของความชั่วร้าย) ดังนั้นฉันไม่สามารถใช้set-local-mapหรืออะไรบางอย่าง เพราะในโหมดปกติปุ่มเดียวกันจะเรียกคำสั่งอื่น ๆ ดังนั้นการผูกจะต้องใช้งานในevil-insert-state-mapเท่านั้น

ฉันมีดังต่อไปนี้:

(eval-after-load 'php-mode
  '(progn
     (define-key evil-insert-state-map
       (kbd "C-<next>") (lambda () (interactive) (insert " = ")))
     (define-key evil-insert-state-map
       (kbd "C-<prior>") (lambda () (interactive) (insert "->")))))

(eval-after-load 'web-mode
  '(progn
     (define-key evil-insert-state-map
       (kbd "C-<next>") 'zencoding-expand-yas) 
     (define-key evil-insert-state-map
       (kbd "C-<prior>") 'zencoding-expand-line)))

ดังนั้นทุกครั้งweb-modeหรือphp-modeกำลังถูกโหลดการเชื่อมโยงคีย์เหล่านี้จะถูกเปิดใช้งาน

ปัญหาคือ:สมมติว่าฉันมีบัฟเฟอร์เปิดสองอันหนึ่งอันphp-modeและอีกweb-modeอัน เมื่อweb-modeบัฟเฟอร์เป็นบัฟเฟอร์ปัจจุบันและฉันสลับไปยังบัฟเฟอร์อื่นที่อยู่ในphp-modeการweb-modeผูกยังคงใช้งานอยู่ภายในphp-modeบัฟเฟอร์

ผมพยายามที่จะแก้ปัญหานี้โดยใช้(add-hook 'web-mode-hook [...])และแทนการตั้งค่าในการผูก(add-hook 'php-mode-hook [...]) eval-after-loadแต่ทางออกนั้นใช้ไม่ได้ในสถานการณ์นี้

ข้อเสนอแนะใด ๆ ฉันจะขอบคุณมันจริงๆ

คำตอบ:


12

Evil มีevil-define-keyมาโครสำหรับกำหนดคำสั่งสำหรับบางสถานะใน keymap เฉพาะเท่านั้น:

(evil-define-key 'insert emacs-lisp-mode-map (kbd "C-c C-c") 'butterfly
                                             (kbd "<pause>") 'zone)

มันสามารถหน่วงเวลาการดำเนินการของการผูก (โดยใช้eval-after-loadตัวเอง) และยังสามารถใช้คู่มากกว่าหนึ่งคำสั่งที่สำคัญซึ่งเป็นการเพิ่มที่สวย


วิธีการแก้ปัญหาของคุณใช้งานได้ฉันขอบคุณที่ ไม่เคยรู้เลยว่ามันเป็นกุญแจที่ชั่วร้าย และแน่นอนสวยเก๋ที่คุณสามารถผูกคู่ keycommand evil-define-keyมากขึ้น
ReneFroger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.