2014-02-09 43 views
1

我想使用撤消樹模式,並且我已經成功設置了撤銷/重做密鑰綁定。Emacs - 密鑰重新綁定不起作用

但是,當我嘗試用我寫的註釋函數覆蓋默認值的綁定時,組合仍然被綁定到undo-tree-undo。

這裏是我的嘗試:

(eval-after-load 'my-functions 
    '(eval-after-load 'undo-tree 
    '(define-key global-map (kbd "C-/") 'my-commenting-function))) 

我有它後,我的函數加載所以我-註釋功能可以被調用。

嘗試此,與撤銷樹模式啓用後,C-/仍難免撤銷樹,撤銷,而不是我的,評論功能。

如何將我想要的功能更改爲C-/的撤消樹模式鍵綁定?

回答

4

這樣做是爲了定義一個全局綁定:

(global-set-key (kbd "C-/") 'my-commenting-function) 

這樣做是爲了從覆蓋它阻止未成年人模式:

(define-key undo-tree-map (kbd "C-/") nil) 
1

正如@ ABO血型ABO已經提到的問題是訂單在其中評估鍵綁定。如果你讀Emacs的文檔(http://www.gnu.org/software/emacs/manual/html_node/elisp/Active-Keymaps.html#Active-Keymaps),你會看到鍵盤佈局順序進行搜索:

keymap, minor mode maps, local keymap, global keymap 

有兩種方法避免那種走樣你描述的。可以直接修改任何衝突或設置緩衝區鍵盤映射的小模式鍵盤映射(例如使用鉤子函數)。此外還有一個約定,C-c'字母'保留給用戶映射,理論上不應該被任何其他模式覆蓋,因此您可以考慮使用其中一種綁定。

+1

還有另一種方法,就是爲您的所有keymappings創建您自己的次要模式鍵盤映射。我正在使用用戶* scottfrazer *在這裏解釋的那個(71 + upvotes當我鍵入這個),它工作正常(並且似乎很好地覆蓋C// *撤消樹地圖* OP在他的問題中提到):http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs – TacticalCoder