2014-12-02 60 views
2

這看起來像一些基本的Emacs配置問題,我不明白。在Emacs中禁用軟件包的鍵綁定覆蓋

我在網站上預裝了Emacs 24.3。在Verilog文件中,按M-s綁定到p4-current-file「edit」(Perforce操作),同樣M-e綁定到p4-current-file「sync」。一切都很好。 問題出在VHDL文件中,M-s也是這樣,但是M-e綁定到「vhdl-end-of-statement」。我希望它能像Verilog一樣進行「p4編輯」。

似乎vhdl-mode覆蓋了M-e鍵功能,而且我也找不到如何永久地改變它。如果我執行本地未設置密鑰並取消設置M-e,我會得到期望的結果,M-e會執行p4編輯,但是當我重新啓動Emacs M-e時,會再次執行「vhdl-end-of-statement」。

如何更改M-e永久執行「p4編輯」?我在Lisp中不太流利,但很樂意得到如何改變這個問題的說明。 謝謝。

+0

注意,在許多重大的模式, 「我」將被設置爲與句子結尾/句末相當的部分。您可能會發現在日誌運行中更容易重新綁定您的perforce綁定。 – Squidly 2014-12-02 14:30:53

+0

在VHDL模式下查看它使用的鍵盤映射代碼 - 很可能是'vhdl-mode-map'。在該鍵盤映射中定義「M-e」作爲你想要的命令。如果需要的話(例如,如果模式映射一開始就沒有定義),你可以在模式鉤子中放入'define-key' sexp,以便在模式打開時生效。 – Drew 2014-12-02 15:14:46

+0

MrBones,感謝您的建議,我會這樣做,這也是最簡單的解決方案來更改perforce綁定(請參閱下文) – avshae 2014-12-03 11:54:03

回答

1

要刪除壓倒一切從模式的鍵盤映射結合,使Emacs會回落到什麼通常會用,你通常會做這樣的事情:

(eval-after-load "vhdl-mode" 
    '(progn 
    (define-key vhdl-mode-map (kbd "M-e") nil) ;; unbind M-e 
    (define-key vhdl-mode-map (kbd "M-a") nil))) ;; unbind M-a 

由於MrBones的意見,不過,這些不是非常可取的定製綁定。 M-sM-e在Emacs中有標準用法(前者通常是前綴綁定,一堆有用的東西會掛起),並且如果可能的話,您應該考慮將這些綁定移動到其他鍵。

(我的印象是,「預裝現場」版本有這些綁定已經到位有關係嗎?在這種情況下,這是更多的誰主張......記)

+0

感謝phils,perforce綁定是我的.emacs文件中的全局設置鍵,我可以編輯它們。我決定遵循你和MrBones的建議,我改變了對ESC M-e,ESC M-s等的perforce綁定。eval-after-load看起來很有用,在下雨天保存:-)。繼我對德魯的評論之後,爲了增強我的理解,我該如何修改vhdl-mode-map? (vhdl-mode.elc) – avshae 2014-12-03 12:05:15

+0

您可以使用上面顯示的技術來修改'vhdl-mode-map'中的綁定,它是'vhdl-mode'的鍵盤映射。 'eval-after-load'確保您的代碼在它存在之前不會嘗試修改鍵盤映射。我在代碼中添加了一個'progn'包裝器和一個額外的例子,以展示如何做多件事情。如果你想*綁定鍵盤映射中的某個命令,你可以簡單地用''some-command'替換'nil'。 – phils 2014-12-03 13:46:04