2010-04-09 85 views
0
所有模式

我已經配置了我的emacs通過如何設置一個鍵綁定是有效的在Emacs

(global-set-key (kbd "M-j") 'backward-char) ; was indent-new-comment-line 

在我的.emacs文件中使用M-jbackward-char。這在很多模式下都可以正常工作(text/org/lisp)。

c++-mode & php-mode勢必默認c-indent-new-comment-line
我如何可以綁定M-j使用在這些模式backward-char了。
並且通常用於所有模式。

感謝,
AnotherEmacsLearner

+0

看這個問題:http://stackoverflow.com/questions/683425/globally-override-key-binding-in -emacs – scottfrazer 2010-04-09 11:21:26

回答

1

此問題已解決in this question。做到這一點的方法是用你的綁定創建一個小模式。你的次要模式綁定會影響任何主要模式的綁定。

我喜歡你的榜樣,因爲在過去的幾周內,我將Mh,j,k,l反彈到他們相同的vim動作,並且做了一個小模式來做到這一點(事實證明這是一個好主意Emacs的默認綁定真的很糟糕)。下面是我的一些代碼示例:

(defvar kirkland-minor-mode-map (make-keymap) "kirkland-minor-mode keymap.") 
(define-key kirkland-minor-mode-map (kbd "M-h") 'backward-char) 
(define-key kirkland-minor-mode-map (kbd "M-l") 'forward-char) 
(define-key kirkland-minor-mode-map (kbd "M-j") 'next-line) 
(define-key kirkland-minor-mode-map (kbd "M-k") 'previous-line) 
(define-minor-mode kirkland-minor-mode 
    "A minor mode so that my key settings aren't shadowed by other major/minor modes" 
    t " kirkland" 'kirkland-minor-mode-map) 

一個我要提到另一件事是,雖然這將覆蓋所有主要模式綁定,它仍然可以由被加載後其他次要模式覆蓋。

+0

感覺不錯,有我自己的模式:) – shashankpv 2010-04-10 04:21:09

0

沒有什麼能重新定義任意鍵它想要的任何方式阻止任何模式,它總是陰影的global-set-key。所以你必須重新定義它重新定義的每種模式:

(defun redefine-cc-mode-keys() 
    (define-key c-mode-base-map "M-J" 'backward-char)) 
(add-hook 'c-initialization-hook 'redefine-cc-mode-keys) 

或類似的。

10

有關於哪些密鑰應該依賴於模式而哪些不符合策略。您可以否決由特定模式更改的綁定,但這很麻煩,必須針對您將使用的每種模式執行。保持你自己的交叉neato綁定到主要模式不會觸及原則的鍵上會更聰明。我特別喜歡F1 - F12鍵,或者我可以得到它們時的Sun功能鍵。 +字母序列也明確地保留給用戶定義的命令,並且不會被主要模式反彈。 (請參閱:Key Binding Conventions

+0

噢,事實證明它並不像我想象的那麼容易。 – shashankpv 2010-04-10 04:21:40

4

我沒有設置按鍵是在特定的模式是這樣的方式:

(add-hook 'gnus-summary-mode-hook 
      (function (lambda() 
         (local-unset-key '[M-down]) 
         (local-unset-key '[M-up])))) 

(add-hook 'org-mode-hook 
      (function (lambda() 
         (local-unset-key '[S-down]) 
         (local-unset-key '[S-left]) 
         (local-unset-key '[S-right]) 
         (local-unset-key '[S-up]))))