回答:
以下の手順を実行できます。
マクロの記録を開始します。
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
。それが質問に対する答えです(そしてこの答えの残りは追加のヘルプを提供します)。