2013-04-18 30 views
5

Tôi có vấn đề nhỏ này, tôi có một số ràng buộc chính như vậy C-. C-x hoặc C-. C-m. Sau khi tôi kích hoạt chế độ flyspell, tôi không thể sử dụng các lệnh này. Trong tập tin emacs của tôi, tôi có 2 dòng tiếp theo trước khiemacs, flyspell, hủy kích hoạt "C-". quan trọng ràng buộc

(global-unset-key (kbd "C-.")) 
(define-key (current-global-map) (kbd "C-.") nil) 
(global-set-key (kbd "C-. C-l") 'global-linum-mode) 

Sau đó, C-. C-l tác phẩm của tôi, nhưng nó không phải khi flyspell chế độ được kích hoạt. Lệnh được liên kết với C-.flyspell-auto-correct-word. Tôi đã cố gắng hủy kích hoạt nó như sau:

;; first try 
(defun flyspell-auto-correct-word-disable() (define-key (current-local-map) (kbd "C-.") nil)) 
(add-hook 'flyspell-mode-hook 'flyspell-auto-correct-word-disable) 
;; second try 
(define-key (current-global-map) [remap flyspell-auto-correct-word] nil) 

Không có công việc nào, tôi có thể làm gì? Tôi đã thử trong Emacs 23 và 24 và tôi có cùng một vấn đề.

Trả lời

9

gì về:

(eval-after-load "flyspell" 
    '(define-key flyspell-mode-map (kbd "C-.") nil)) 

giải pháp đầu tiên của bạn là gần như chính xác, nhưng bạn phải nhớ rằng bản đồ hiện tại địa phương được thiết lập theo phương thức chủ yếu, chứ không phải chế độ nhỏ. Các tùy chọn tốt nhất bạn có nó để truy cập trực tiếp flyspell-mode-map và sửa đổi nó (một lựa chọn khác sẽ là để tìm thấy nó trong minor-mode-map-alist nhưng tôi nghĩ rằng nó sẽ là không cần thiết phức tạp).

Ngoài ra, tôi thích đặt các cài đặt cụ thể theo chế độ trong phạm vi eval-after-load (có nghĩa là chúng sẽ được đánh giá một lần) chứ không phải trong móc (trong trường hợp cài đặt được đánh giá nhiều lần: mỗi lần một bộ đệm kích hoạt flyspell-mode). Nhưng đây là vấn đề ưu tiên và một trong hai cách là tốt.

+0

Cảm ơn rất nhiều, nó hoạt động suôn sẻ ngay bây giờ =) – silgon

+0

Tôi đang gặp vấn đề tương tự nhưng bây giờ với chế độ php, lần này tôi đã thử (php-sau khi tải "php" (define-key php-mode- map (kbd "C-.") nil)) nhưng nó không hoạt động. Tôi biết, tôi nên thay đổi keybinding của tôi nhưng tôi muốn biết tại sao nó không hoạt động, cảm ơn! – silgon

+0

Tôi chưa cài đặt 'php-mode' trên hệ thống của mình; nó có tiêu chuẩn không? Bạn nên kiểm tra thư viện nào định nghĩa 'php-mode' và' php-mode-map'. Điều này có thể được thực hiện bằng cách truy cập hệ thống tài liệu của emacs với 'C-h v php-mode-map' hoặc' C-h f php-mode'. Tên mà bạn nên đặt trong biểu mẫu 'eval-after-load' là tên thư viện không có hậu tố" .el ". – Francesco