2012-03-18 214 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