Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

Vimマクロの使い方を徹底解説!操作の記録と再生をステップバイステップでマスター

Vimマクロの使い方を徹底解説!操作の記録と再生をステップバイステップでマスター

Vimには強力な「マクロ」機能が搭載されており、エディタ内で行った一連の操作を記録し、あとで何度でも再生することができます。同じような編集作業を大量に繰り返す場合、この機能を使いこなせるかどうかで作業効率が大きく変わります。

本記事では、Vi/Vimエディタにおけるマクロの記録・再生方法を、2つの具体的な例題を通じて詳しく解説します。

Vimマクロの記録と再生:基本の手順

  1. 記録を開始:「q」キーを押した後、小文字のアルファベット(レジスタ名)を入力
  2. 編集操作を実行:Vim上で通常どおりの編集を行うと、その操作がすべて記録される
  3. 記録を終了:「q」キーを押す
  4. マクロを再生:「@」キーの後にマクロ名(レジスタ名)を入力
  5. 複数回繰り返す:「回数@マクロ名」(例:10@a)で指定回数分まとめて再生

例題1:Vimマクロでファイル内に連番を自動生成する

手順1:テストファイルを作成する

$ vim sequence-test.txt

手順2:挿入モードで「1.」と入力する

「Esc」→「i」の順に押して挿入モードに入り、「1.」と入力します。

$ vim sequence-test.txt
1.

手順3:記録を開始し、レジスタ「a」に保存する

「Esc」→「q」→「a」の順に入力します。

  • 「q」は記録の開始を意味します
  • 「a」はレジスタaに記録内容を保存することを意味します
  • 「qa」と入力すると、画面下部に「recording(記録中)」という表示が現れます

手順4:1行目を2行目にコピーする

「Esc」→「yy」→「p」の順に入力します。

  • 「yy」は現在の行をコピー(ヤンク)します
  • 「p」はコピーした行を貼り付けます
$ vim sequence-test.txt
1.
1.

補足:この時点でも画面下部には「recording」の表示が残っています。

Vimマクロの使い方を徹底解説!操作の記録と再生をステップバイステップでマスター
図:画面下部に表示されたrecordingメッセージ

手順5:数値をインクリメントする

カーソルを2行目に置いた状態で「Ctrl+a」を押すと、数値が1つ増えて「2」になります。

$ vim sequence-test.txt
1.
2.

補足:まだ記録中であるため、下部の「recording」表示は消えません。

手順6:記録を終了する

「q」を押すと記録が終了し、画面下部の「recording」表示が消えます。

手順7:マクロを98回繰り返す

「98@a」と入力します。

  • 「@a」はマクロ「a」を1回再生します
  • 「98@a」はマクロ「a」を98回連続で再生します

これにより、1〜100までの連番が自動的に生成されます。

Vimマクロの使い方を徹底解説!操作の記録と再生をステップバイステップでマスター
図:マクロを使った連番の自動生成

例題2:引数を変えながらVimマクロを繰り返し実行する

この例では、同じコマンド構造を保ちながら、各行ごとに異なる引数(ここではユーザー名)を当てはめて処理を繰り返す方法を解説します。名前のリストからSQL文を一括生成するケースを見ていきましょう。

マクロ実行前:change-password.sql

$ vim change-password.sql
Annette
Warren
Anthony
Preston
Kelly
Taylor
Stiller
Dennis
Schwartz

マクロ実行後:change-password.sql

$ vim change-password.sql
ALTER USER Annette IDENTIFIED BY 'Annette';
ALTER USER Warren IDENTIFIED BY 'Warren';
ALTER USER Anthony IDENTIFIED BY 'Anthony';
ALTER USER Preston IDENTIFIED BY 'Preston';
ALTER USER Kelly IDENTIFIED BY 'Kelly';
ALTER USER Taylor IDENTIFIED BY 'Taylor';
ALTER USER Stiller IDENTIFIED BY 'Stiller';
ALTER USER Dennis IDENTIFIED BY 'Dennis';
ALTER USER Schwartz IDENTIFIED BY 'Schwartz';

手順1:名前のみが記載されたファイルを開く

$ vim change-password.sql
Annette
Warren
Anthony
Preston
Kelly
Taylor
Stiller
Dennis
Schwartz

手順2:記録を開始し、レジスタ「a」に保存する

「qa」と入力します。画面下部に「recording」メッセージが表示されます。

手順3:行頭に移動して「ALTER USER」と入力する

1行目の任意の位置にカーソルを置き、「I」(大文字のi)を押します。カーソルが行頭に移動して挿入モードになるので、「ALTER USER 」と入力します。

手順4:次の単語(名前)をコピーする

「Esc」→「w」→「yw」の順に入力します。

  • 「w」で次の単語(名前)の先頭に移動します
  • 「yw」で現在の単語(名前)をコピーします

手順5:行末に移動して「IDENTIFIED BY '」と入力する

「Esc」→「A」の順に押して行末に移動し、「IDENTIFIED BY '」と入力します。

手順6:コピーした名前を貼り付ける

「Esc」→「p」の順に入力すると、手順4でコピーした名前が貼り付けられます。

手順7:末尾の引用符を閉じる

「Esc」→「A」で行末に移動し、「';」と入力して文を完成させます。

手順8:次の行に移動して記録を終了する

「Esc」→「j」→「q」の順に入力します。

  • 「j」で次の行に移動します
  • 「q」で記録を終了します

補足:画面下部の「recording」メッセージが消えます。この時点でファイルは以下のようになっています。

Vimマクロの使い方を徹底解説!操作の記録と再生をステップバイステップでマスター
図:マクロの記録完了時点の状態

手順9:残りの行に対してマクロを8回実行する

「8@a」と入力します。

  • 「@a」はマクロ「a」を1回再生します
  • 「8@a」はマクロ「a」を8回連続で再生し、残りの行を自動的に処理します

Vimマクロの使い方を徹底解説!操作の記録と再生をステップバイステップでマスター
図:マクロ再生の完了

おすすめの参考書籍

Vimマクロの使い方を徹底解説!操作の記録と再生をステップバイステップでマスター Ramesh Natarajan著『Vim 101 Hacks』。筆者はコマンドラインが大好きで、当然ながらVi/Vimエディタの熱心なファンでもあります。かつてLinux上でC言語のコードを大量に書いていた頃は、入手できる限りのVimのTipsやトリックを読み漁っていました。そうした経験をもとに執筆した本書には、Vimの高度な機能に関する101の実践例が収録されており、Vimをより速く、より生産的に使いこなすためのヒントが満載です。何年もVi/Vimを使っている方でも、読めば必ず新しい発見があるはずです。Vimの隠れた能力にきっと驚かされることでしょう。

合わせて読みたいVim関連記事

以下のVi/Vimチュートリアル記事も参考になるかもしれません。

  • VimperatorアドオンでFirefoxブラウザにVimの操作性を持たせる方法
  • c.vimプラグインでVimをC/C++ IDE化するチュートリアル
  • Vimエディタをあらゆるプログラミング言語対応の美しいソースコードブラウザに変える方法
  • Vimエディタで使える12の強力な検索・置換の実例集

お知らせ:The Geek Stuffを購読登録していただくと、今後配信されるVi/VimエディタのTipsやトリック情報をお見逃しなくチェックできます。

  1. Cockpit(コックピット)で実現するWebベースのLinuxサーバー管理 – インストールから使い方まで徹底解説

    Cockpitは、GNU/Linuxサーバー向けの軽量で直感的に操作できるリモート管理ツールです。Webブラウザ経由で対話型のサーバー管理インターフェースを提供し、ライブのLinuxセッションをそのまま操作できます。 RHEL系およびDebian系を中心に、Ubuntu、Linux Mint、Fedora、CentOS、Rocky Linux、AlmaLinux、Arch Linuxなど、幅広いディストリビューションで動作します。 Cockpitを活用すれば、コンテナの起動、ストレージ管理、ネットワーク設定、ログの確認といった日常的なシステム管理タスクを、管理者が簡単かつ確実に実行できるように

  2. Linux chmodの再帰的変更:ファイルやディレクトリのパーミッションを一括変更する方法

    Linuxのchmodコマンドを使えば、すべてのファイルとディレクトリのパーミッションを再帰的に変更できます。この記事では、その具体的な方法をわかりやすく解説します。 以下のようなエラーに遭遇したことはありませんか? 111 [Permission Denied] Linux-Screw [Permission Denied] Linux-Screw [readonly] システムファイルを編集する場合は、sudoを使うのが基本です。これにより、システムの設定や文脈を壊すことなく安全に編集できます。一方、日常的に扱うユーザーファイルについては、パーミッション自体を変更するのが最適なアプローチで