2

我想重新映射forward-sexpmatlab-forward-sexpin matlab-mode

目前我这样做:

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

但是当我输入M-x forward-sexpmatlab-mode 时,我仍然会得到旧的行为。为什么?只有当我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]
4

2 回答 2

3

是的,该[remap]语法明确用于键绑定。当绑定调用旧函数时,重新映射会导致它调用新函数。但是,这不会改变任何一个函数的定义——它们仍然可以直接调用。

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

Emacs 24 中最近的一个更改已经澄清了这个帮助文本,所以它现在看起来如下:

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

它的键被重新映射到“matlab-forward-sexp-safe”。如果没有这种重新映射,它将绑定到 CMf、<CM-right>、ESC <C-right>。.

于 2012-03-18T20:03:44.433 回答
2

如果你真的想改变函数的行为,你可以使用forward-sexp-function.

此外,您可能想查看 Emacs-24 的 octave-mode,它使用 SMIE 进行解析,使 forward-sexp 自动跳过实际的 Octave 句法元素,而不仅仅是括号/括号/大括号。

于 2012-03-20T02:46:27.757 回答