2013-10-11 375 views
5

我創建一個自定義鍵綁定宏如下:Emacs的取消綁定模式的鍵綁定

(global-set-key (kbd "C-C C-c") "\C-a\C- \C-n\M-w\C-y")

的問題是,C-c C-cpython-send-bufferpython-mode定義。所以我的宏適用於除python模式以外的所有模式。我假設python-mode在我的初始化文件後被評估,因此它會覆蓋該鍵綁定。

我嘗試不使用C-c C-c使用(eval-after-load "python-mode")和使用global-unset-key但這不起作用。 python中的C-c C-c總是映射到python-send-buffer

我該如何完全禁用Python的C-c C-c,並改用我的宏?

我正在使用Emacs 24.2.1。

+0

C-C C-C是很多模式的定義。也許你應該考慮http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs – scottfrazer

+1

或者只是考慮使用不同的密鑰。 'Cc'後跟一個控制鍵(如'Cc')是「爲主要模式保留的」,這意味着定義主要模式的Lisp代碼有權使用它(並且它們通常使用'Cc Cc',就像ScottFrazer說過)。當然,用戶仍然有權綁定這樣的密鑰,但只是知道主要模式也會隨意這樣做,因此您可能需要找到替換密鑰以用於此類模式(請參閱此處的答案) 。請參閱Elisp手冊,節點「鍵綁定約定」。 – Drew

+0

@Drew我似乎無法找到一個免費且易於訪問的C-x綁定,或者對於我經常使用的複製和粘貼操作有意義。 – darksky

回答

7
(add-hook 'python-mode-hook 
      (lambda() 
      (local-unset-key (kbd "C-c C-c")))) 
1

這應做到:

(add-hook 'python-mode-hook 
      (lambda() 
      (define-key python-mode-map (kbd "C-c C-c") nil)))