重新映射Emacs命令

时间:2012-03-18 19:48:19

标签: emacs elisp key-bindings remap

我想在forward-sexp中将matlab-forward-sexp重新映射为matlab-mode

目前我这样做:

(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]

2 个答案:

答案 0 :(得分:3)

是的,[remap]语法明确用于键绑定。当绑定调用旧函数时,重映射会使其调用新函数。但这并没有改变任何一种函数的定义 - 它们仍然可以直接调用。

有关详细信息,请参阅 M - : (info "(elisp) Remapping Commands") RET

最近Emacs 24的变化澄清了这个帮助文本,现在它的内容如下:

  

forward-sexp是`lisp.el'中的交互式编译Lisp函数。

     

它的键重新映射到`matlab-forward-sexp-safe'。没有这个重新映射,   它将与C-M-f绑定,   &lt; C-M-right&gt;,ESC&lt; C-right&gt;。   

答案 1 :(得分:2)

如果您确实想要更改该功能的行为,可以使用forward-sexp-function

你也可以查看Emacs-24的八度模式,它使用SMIE进行解析,使得forward-sexp自动跳过实际的Octave句法元素,而不仅仅是parens / bracket / braces。