目次

目次

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

アバター画像
江藤 光
アバター画像
江藤 光
最終更新日2018/01/10 投稿日2018/01/10

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

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

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

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

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

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

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

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

DDL のフォーマット修正

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

CREATE TABLE IF NOT EXISTS `top_banner` (
  top_banner_id int(11) NOT NULL AUTO_INCREMENT COMMENT 'トップバナーID',
  top_banner_title VARCHAR(100) NOT NULL COMMENT 'バナー名',
  top_banner_alt_text TEXT DEFAULT NULL COMMENT 'altテキスト',
  top_banner_link_url TEXT NOT NULL COMMENT 'バナーリンクURL',
  top_banner_image_url_pc TEXT NOT NULL COMMENT 'PC用バナー画像URL',
  top_banner_image_url_sp TEXT NOT NULL COMMENT 'SP用バナー画像URL',
  top_banner_start_datetime DATETIME NOT NULL COMMENT '公開開始日時',
  top_banner_end_datetime DATETIME NOT NULL COMMENT '公開終了日時',
  top_banner_category VARCHAR(25) NOT NULL COMMENT 'バナーカテゴリ',
  top_banner_priority INT(11) DEFAULT NULL COMMENT '優先順位',
  top_banner_is_delete TINYINT(1) NOT NULL COMMENT '削除フラグ',
  top_banner_reg_datetime DATETIME DEFAULT NULL COMMENT '登録日時',
  top_banner_mod_datetime DATETIME DEFAULT NULL COMMENT '更新日時',
PRIMARY KEY (`top_banner_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci COMMENT 'トップバナー';

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

これを

  top_banner_id int(11) NOT NULL AUTO_INCREMENT COMMENT 'トップバナーID',

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

  `top_banner_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'トップバナーID',

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


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

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

  top_banner_id int(11) NOT NULL AUTO_INCREMENT COMMENT 'トップバナーID',

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

□ top_banner_id int(11) NOT NULL AUTO_INCREMENT COMMENT 'トップバナーID',

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

 □top_banner_id int(11) NOT NULL AUTO_INCREMENT COMMENT 'トップバナーID',

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

 top_banner_id int(11) NOT NULL AUTO_INCREMENT COMMENT 'トップバナーID',

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

 `top_banner_id int(11) NOT NULL AUTO_INCREMENT COMMENT 'トップバナーID',

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

 `top_banner_id int(11) NOT NULL AUTO_INCREMENT COMMENT 'トップバナーID',

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

 `top_banner_id□int(11) NOT NULL AUTO_INCREMENT COMMENT 'トップバナーID',

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

 `top_banner_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'トップバナーID',

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

 `top_banner_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'トップバナーID',
   top_banner_title VARCHAR(100) NOT NULL COMMENT 'バナー名',

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

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


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

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

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

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

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

アバター画像

江藤 光

まだまだ気持ちは新人です。

目次