2

に再マップforward-sexpしたい。matlab-forward-sexpmatlab-mode

現在私はこれを行います:

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

しかしM-x forward-sexp、matlabモードで入力すると、まだ古い動作が得られます。なんで?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

また、構文解析にSMIEを使用するEmacs-24のオクターブモードを確認することもできます。これにより、forward-sexpは、parens / brackets / bracesだけでなく、実際のOctave構文要素を自動的にジャンプします。

于 2012-03-20T02:46:27.757 に答える