それ、キーボードマクロで出来ますよ(Emacs)

Emacs

この記事は最終更新日から1年以上が経過しています。

周りの人に聞いたらあまり知名度がなかったので、記事にしてみました。

キーボードマクロ(別名:キーマクロ)とは

キーボードマクロとは、その名の通りでキーボードの入力パターンを記録してその通りの操作を再実行してくれる機能です。

シェルスクリプトを書くほどでもない単純な処理については、こっちでやったほうが早いです(デバッグもしやすいです)
例えば、「行の先頭に移動する」「一文字削除する」「次の行に移動する」というパターンを記録して実行すれば、各行の1文字目を消すマクロになります。

人力でやりたくない面倒なことをコンピュータにやらせる、ということがプログラミングの根本的な部分だと思うのですが、その中でもキーボードマクロは割と手を出しやすい…割には影が薄い気がします。

Emacsでのキーボードマクロ
キーボードマクロ機能は多機能なエディタならば大抵付いていると思います。
この記事では Emacs のキーバインドを例に説明したいと思います。

Emacsでは、以下のショートカットでキーボードマクロを利用できます。

  • Ctrl + (: マクロの記録開始
  • Ctrl + ): マクロの記録終了
  • Ctrl + e: マクロの実行 (eを連打すると連続して実行できる)

DDL のフォーマット修正

テーブル定義は「カラム名などの識別子はバッククオートで囲む」形式で統一していたのですが、
一部のカラム名にバッククオートがついていないことが発覚しました。

誰がフォーマットを乱したのか特定しようとコミット履歴を見るとほとんど私の犯行だったので、頑張って直します。
調べたら100カラム近くあったので、手ではやりたくありません。かといって、シェルスクリプトを書くほど複雑でもない気がしました。キーボードマクロで処理してみます。

これを

このようにするにはどうすればいいのかを考えてみます

エディタで汎用的にこの処理を行い、それをマクロとして記録します。
↓が私が実際に行った操作です。


もっといい回答があるかもしれません。

0: マクロの記録を開始する (Ctrl + ( )

1: カーソルを行の先頭(□の場所)に持っていく (Ctrl + A)

2: カーソルを一文字進める(□の場所へ) (Ctrl + F)

3: 一文字削除 (Ctrl + D)
これでカーソルは t の位置に

4: バッククオートを入力 (`)

5: 空文字で検索 (Ctrl + s –> Space –> Enter)
これでカーソルが i の位置にくる

6: カーソルを一文字後退(□の場所へ) (Ctrl + B)

7: バッククオートを入力 (`)

8: 一行下へ (Ctrl + N)
カーソルは top_banner_title の i へ

9: 記録を終了 (Ctrl + ) )

あとは、Ctrl + e を実行するだけで、カラム名にバッククオートを付けることが出来ます。


キーボードマクロを作るときに見落としがちなのが「検索する」って事だと思います。
この例だと、カラム名の文字数が一定ではないので、空文字で検索をしないとカラム名の末尾にカーソルを持っていくのは困難だと思います。

それ以外にも、エディタのショートカットでできることは何でも出来るので、
「別ファイルから一部の項目をコピーしてきて…」や「ファイル名を持ってきて…」みたいなことも出来ます。

単純なテキスト整形作業があったとき、

  • 手でやる
  • スクリプトを書く

の中間に「キーボードマクロで処理する」の選択肢があると仕事が捗ると思います。

Emacs