重映射Emacs命令



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

目前我这样做:

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

但是当我在matlab模式下输入CCD_ 4时,我仍然得到旧的行为。为什么?它只在我通过键盘快捷键调用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]

是的,[remap]语法明确用于键绑定。当绑定调用旧函数时,重新映射会导致它调用新函数。然而,这并没有改变这两个函数的定义——它们仍然可以直接调用。

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

Emacs24中最近的一个更改澄清了这个帮助文本,因此它现在的内容如下:

前向sexp是"Lisp.el"中的一个交互式编译Lisp函数。

它的密钥被重新映射到"matlab forward sexp safe"。在没有这种重新映射的情况下,它将与C-M-f结合,<C-M-右>,ESC<C-右>。.

如果您真的想更改函数的行为,可以使用forward-sexp-function

此外,您可能还想看看Emacs-24的八度模式,它使用SMIE进行解析,使前向sexp自动跳过实际的八度语法元素,而不仅仅是括号/括号/大括号。

最新更新