回答:
以下の手順を実行できます。
マクロの記録を開始します。
M-x start-kbd-macro
M-x query-replace-regexp(「abc」を「def」に!置き換え)、を使用して、リージョン全体で検索置換を強制します。マクロの記録を停止します。
M-x kmacro-end-or-call-macro。
M-x kmacro-name-last-macro、マクロにのようなわかりやすい名前を付けreplace-abc-with-defます。そうすると、そのマクロを再度呼び出すことができM-x replace-abc-with-defます。init.el。
M-x insert-kbd-macro自動作成されたreplace-abc-with-def関数定義は次のようになります。
(fset 'replace-abc-with-def
(lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([59 39 return 97 98 99 return 100 101 102 return 33] 0 "%d")) arg)))
これM-x replace-abc-with-defで、すべてのemacsセッションで使用できます。
insert-kbd-macroするかkmacro-name-last-macroは、(上記の回答のように)を使用して命名したか、それともを使用して命名したかによって異なりますname-last-kbd-macro。
name-last-kbd-macro(上記の@philsで述べた)形式を使用すると、関数ではなく文字列になることに注意してください。fsetこれをシンボルに指定すると、Mxを使用してマクロを実行できますが、lispから呼び出すことはできません(commandp-> t、functionp-> nil)。奇妙なことに、それを経由call-interactivelyして呼び出しても動作しません(ただし、実行に使用できますexecute-kbd-macro)。
elmacroは@lunaryornによってすでに言及されていますが、このパッケージの作成者として、例を提供するのが良いと思いました。
このようなマクロを記録する場合:
F3 C-e M-b M-u C-a C-n F4
次に、以下を実行M-x elmacro-show-last-macro upcase-last-wordしてバッファーを生成します。
(defun upcase-last-word ()
"Change me!"
(interactive)
(move-end-of-line 1)
(backward-word 1)
(upcase-word 1)
(move-beginning-of-line 1)
(next-line 1 1))
insert-kbd-macro。それが質問に対する答えです(そしてこの答えの残りは追加のヘルプを提供します)。