2012-03-18 218 views
2

我想在matlab-mode中重映射forward-sexpmatlab-forward-sexp重新映射Emacs命令

目前,我這樣做:

(define-key matlab-mode-map [remap forward-sexp] 'matlab-forward-sexp-safe) 

但是當我在MATLAB模式類型M-x forward-sexp我仍然得到舊的行爲。爲什麼?當我通過鍵盤快捷方式撥打forward-sexp時,它才起作用嗎?

當我輸入C-h f forward-sexp一切似乎確定:

forward-sexp is an interactive compiled Lisp function in `lisp.el'. 

It is remapped to `matlab-forward-sexp-safe', which is bound to C-M-f, 
<C-M-right>, ESC <C-right>. 

(forward-sexp &optional ARG) 



For more information check the manuals. 

Move forward across one balanced expression (sexp). 
With ARG, do it that many times. Negative arg -N means 
move backward across N balanced expressions. 
This command assumes point is not in a string or comment. 

This function is advised. 

After-advice `ctx-flash'. 

[back] 

回答

1

如果你真的想改變函數的行爲,你可以使用forward-sexp-function

此外,您可能會喜歡查看Emacs-24的八度模式,它使用SMIE進行分析,使得forward-sexp自動跳過實際的Octave語法元素而不是隻有parens /括號/大括號。

+0

SMIE是什麼意思?解析基礎架構? – 2012-03-20 11:13:06

4

是的,[remap]語法是明確的鍵綁定。當綁定會調用舊函數時,重新映射會導致它調用新的函數。這並不會改變任何一個函數的定義,但是它們仍然可以直接調用。

有關詳細信息,請參閱M-:(info "(elisp) Remapping Commands")RET

在Emacs 24最近的變化已經澄清了這個幫助文本,所以它現在內容如下:

向前SEXP是`lisp.el'中交互式編譯的Lisp函數。

它的鍵被重新映射到`matlab-forward-sexp-safe'。沒有這個重映射,它將被綁定到C-M-f, < C-M-right,ESC < C-右>。 。

+2

+1 @Nordlöw:還請注意您用於重新映射的函數的名稱:(define- * key * ...)。這已經給你一個暗示,重映射只適用於鍵盤快捷鍵。 – Thomas 2012-03-19 03:43:02