dmacroでemacsの面倒な操作を乗り切る

2023年4月10日
thumbnail
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,が入力されます。
article image

操作のマクロ

より便利な操作のマクロを試しましょう。今下のようなテキストがあるとします。
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のテキストを貼り付けて、カーソルをfishfに合わせて、以下の手順を試してみてください。 1〜4までの操作が1回目、5〜8までの操作が二回目の操作になります。
  1. 「-」をタイプ、「スペース」をタイプ
  2. M-fをタイプ
  3. C-dをタイプ
  4. 「エンター」をタイプ
  5. 「-」をタイプ、「スペース」をタイプ
  6. M-fをタイプ
  7. C-dをタイプ
  8. 「エンター」をタイプ
あとはC-tをタイプし続ければ、リスト化するマクロが走ります。

まとめ

ちょっとした操作でも、繰り返すとなると大変になるときにdmacroは大活躍します。何か反復的に面倒なことをやっているぞと気づいた時はdmacroを思い出して使ってみてください。
profile image
Ted
大学でコンセンサスアルゴリズムを研究。卒業後ベンチャー企業に入社してフルスタックでWebサービスを開発。現在は大手IT企業に転職し、プログラミングを行っている。AIにプログラマーの仕事を奪って欲しいと願っている。