Làm cách nào để thiết lập các ràng buộc chính cho các chế độ trong trạng thái Evil cụ thể?


9

Tôi có một bộ các ràng buộc chính mà tôi sử dụng cho cả hai web-modephp-modetrong chế độ chèn (của Evil). Vì vậy, tôi không thể sử dụng set-local-maphoặc một cái gì đó. Bởi vì trong chế độ bình thường, các phím tương tự sau đó sẽ gọi các lệnh khác. Vì vậy, các ràng buộc cần phải được hoạt động evil-insert-state-mapchỉ.

Tôi có những điều sau đây:

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

Vì vậy, mỗi khi web-modehoặc php-modeđang được tải, các ràng buộc chính này sẽ được kích hoạt.

Vấn đề là: Giả sử tôi có hai bộ đệm mở, một trong php-modevà một trong web-mode. Khi web-modebộ đệm là bộ đệm hiện tại và tôi chuyển sang bộ đệm khác php-mode, các web-modeliên kết vẫn hoạt động bên trong php-modebộ đệm.

Tôi đã cố gắng giải quyết vấn đề này bằng cách sử dụng (add-hook 'web-mode-hook [...])(add-hook 'php-mode-hook [...])thay vì thiết lập các ràng buộc trong eval-after-load. Nhưng giải pháp đó không hoạt động trong tình huống này.

Bất kỳ đề xuất? Tôi thực sự sẽ đánh giá cao nó.

Câu trả lời:


12

Evil có evil-define-keymacro để xác định các lệnh cho các trạng thái nhất định chỉ trong một sơ đồ cụ thể:

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

Nó có thể trì hoãn việc thực hiện ràng buộc (bằng cách sử dụng eval-after-loadchính nó) và cũng có thể mất nhiều hơn một cặp lệnh-khóa, đây là một bổ sung khá tiện lợi.


Giải pháp của bạn hiệu quả, tôi rất biết ơn về điều đó. Không bao giờ biết có những thứ như khóa xác định ác. Và thực sự khá tiện lợi khi bạn có thể liên kết nhiều cặp keycommand hơn với evil-define-key.
ReneFroger
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.