2023年4月10日
dmarcoは増井さんが考案した反復処理パッケージです。emacs上で操作したあらゆる入力や操作をdmacroは学習し、繰り返してくれます。
打ち込んだ文字だけを繰り返すならば、いくらでも反復できそうですが、dmacroはそれだけでなくコマンド入力も繰り返してくれるので、簡単なものだったらemacsの操作自体を自動化できます。
dmacroのざっくりした説明は増井さんの公式ページが良いと思います。
数年前まではmelpaに登録されていないかったので、自分で用意する必要がありましたが、今は有志が登録してくれたのでuse-packageから簡単にインストールして使えます。
これが完成済みコードです。
(use-package dmacro
:ensure t
:init
(setq dmacro-key (kbd "C-t"))
(global-dmacro-mode))
文字入力のマクロ
一番簡単なマクロは文字入力のマクロです。dmacroが操作を繰り返すためには少なくとも同じ処理を二回入力する必要があります。
例えばemacs上で
123,123,
と123,
を二回打ち込みました。その後でC-t
をタイプすると、123,
が打ち込まれます。さらにC-t
すれば同じように123,
が入力されます。操作のマクロ
より便利な操作のマクロを試しましょう。今下のようなテキストがあるとします。
fish, tomato, melon, meat, burger, rice, onion, apple, banana
これを下のようなテキストにしたいとします。
- fish
- tomato
- melon
- meat
- burger
- rice
- onion
- apple
- banana
正規表現やEmacsに手慣れている人は簡単に置換できるかもしれません。
そういった高等テクニックを使わなくてもdmacroを使えば、いい感じに変換できます。
試しにEmacsに
fish, tomato, melon, meat, burger, rice, onion, apple, banana
のテキストを貼り付けて、カーソルをfish
のf
に合わせて、以下の手順を試してみてください。
1〜4までの操作が1回目、5〜8までの操作が二回目の操作になります。- 「-」をタイプ、「スペース」をタイプ
- M-fをタイプ
- C-dをタイプ
- 「エンター」をタイプ
- 「-」をタイプ、「スペース」をタイプ
- M-fをタイプ
- C-dをタイプ
- 「エンター」をタイプ
あとは
C-t
をタイプし続ければ、リスト化するマクロが走ります。まとめ
ちょっとした操作でも、繰り返すとなると大変になるときにdmacroは大活躍します。何か反復的に面倒なことをやっているぞと気づいた時はdmacroを思い出して使ってみてください。
Ted
大学でコンセンサスアルゴリズムを研究。卒業後ベンチャー企業に入社してフルスタックでWebサービスを開発。現在は大手IT企業に転職し、プログラミングを行っている。AIにプログラマーの仕事を奪って欲しいと願っている。