2012-12-20 72 views
20

例如結合,在禪編碼的碼中,「CJ」陰影「CJ」的正常行爲(newline-and-indent取消設置鍵在emacs中

(define-key zencoding-mode-keymap (kbd "C-j") 'zencoding-expand-line) 

然後我怎樣才能取消設置這個鍵綁定和使用C-j for newline-and-indent again?

我嘗試這樣做,但它不工作:這個

(add-hook 'html-mode-hook 
      (lambda() 
      (progn 
       (zencoding-mode) 
       (local-set-key (kbd "C-j") 'newline-and-indent)))) 

沒有人有想法?

+0

任何人都知道爲什麼'附加hook'沒有在這種情況下工作? – darksky

+1

Nayefc:該代碼不影響zencoding-mode的鍵盤映射,因爲zencoding-mode是次要模式,並且(根據下面的答案)local-set-key影響主要模式的鍵盤映射。次要模式鍵盤映射優先於主要模式鍵盤映射,因此仍然使用未修改的zencoding-mode綁定。 – phils

回答

29

解除綁定密鑰(對於任何鍵映射)的一般方法是定義的nil的結合:

(define-key KEYMAP KEY nil) 

爲了方便,也有從全球鍵映射,並從本地爲解綁定兩個標準功能鍵盤映射(這是通常是主要模式的鍵盤映射)。

  • (global-unset-key KEY)
  • (local-unset-key KEY)

那些部分是交互式命令,如每它們各自的互補global-set-keylocal-set-key

至於你具體的例子,你可能想是這樣的:

(eval-after-load "zencoding-mode" 
    '(define-key zencoding-mode-keymap (kbd "C-j") nil)) 
+0

我會說完美的答案。 – PascalVKooten

+0

99%的時間,這正是你想要的。然而,昨天我被絆倒了,並認爲我會發表評論,因爲它仍然是我的頭腦中新鮮。某些鍵盤映射具有默認綁定,即任何未明確綁定的鍵都默認爲某些命令而不是任何內容。在我的情況下,它是isearch-mode-map,對於以M或ESC開頭的鍵,默認爲isearch-other-meta-char。 – jpkotta

+1

也許這應該是一個完整的問題,但如果我不知道它是什麼,找出鍵盤映射的名稱的好方法是什麼? –