Vimの基礎知識

【Vimの基礎知識】マクロを活用した自動編集テクニック

「同じ操作を何度も繰り返していて時間がもったいない」と感じたことはありませんか。

Vimには、単純作業を効率化できる強力な機能として「マクロ」が用意されています。

テキストの整形や複数行にわたる編集など、毎回手作業で行うと手間がかかる処理を、一度記録しておけばキー入力一つで自動再生できます。

特にプログラムコードや設定ファイルの編集では、似たような修正を繰り返す場面が多く、このマクロを使いこなせるかどうかで作業速度は大きく変わります。

本記事では、マクロの基本操作から応用的な使い方、そしてトラブル対策までを体系的に整理し、実務の中で即戦力となる知識を解説します。

Vimの基礎知識

🟢 Vimの基礎知識
📌 Linuxで必ず触れるテキストエディタの入門から応用までを体系化
 └─【Vimの基礎知識】入門から応用までを体系化した学習ロードマップ
   ├─ 入門編(初心者向け)
   | ├─ 【Vimの基礎知識】ゼロから始めるVim入門とモード終了、コマンド基本操作
   | ├─ 【Vimの基礎知識】テキスト編集の基本操作(挿入・削除・移動) 
   | ├─ 【Vimの基礎知識】viとvimの違い|現場で覚えるべきポイント
   | ├─ 【Vimの基礎知識】VimとEmacsの違い|Linux現場で使われるエディタの選び方
   | └─ 【Vimの基礎知識】主要コマンド一覧|移動・編集・検索・コピーモード切替の早見表
   ├─ 活用編(中級者向け)
   | ├─ 【Vimの基礎知識】検索・置換・コピー・ペーストの操作まとめ
   | └─ 【Vimの基礎知識】マウス不要!カーソルを乗せたら勝ち確定|ビジュアルモード
   ├─ 実践編(実務で役立つ)
   | ├─ 【Vimの基礎知識】Vimで複数ファイルを同時編集する方法とウィンドウ分割の基本
   | └─ 【Vimの基礎知識】外部コマンド&シェル連携でVimを超実用ツールへ進化
   ├─ 応用編(上級者向け)
   | ├─ 【Vimの基礎知識】マクロを活用した自動編集テクニック
   | └─ 【Vimの基礎知識】正規表現を使った高度なテキスト編集
   └─ 設定編(カスタマイズ)
     ├─ 【Vimの基礎知識】Vimを使いこなす基礎:.vimrcで快適な開発環境を構築する方法
     └─ 【Vimの基礎知識】VSCodeでVimを使う方法|GUIで再現するVim操作

マクロによる自動編集の概要

Vimのマクロは、日常的に発生する繰り返し操作を記録し、自動で再現できる機能です。

人の手による作業を短縮するだけでなく、同じ手順を正確に繰り返すことができるため、作業の品質を一定に保てるのが大きな特徴です。

ここでは仕組みや特徴、実務での利用シーン、そして導入メリットを整理して、マクロの全体像を理解できるようにします。

マクロの仕組みと特徴

マクロは「コマンドをプログラムとして組む」のではなく、ユーザーのキー入力そのものを逐次記録して再生する仕組みです。

そのため、一度記録した操作は同じ順序で正確に繰り返されます。

特徴としては、複雑な知識がなくても誰でも利用でき、単純な作業であっても一度の操作で大量の行に対して適用できる点が挙げられます。

実務で役立つシーン

実務の現場では、マクロはさまざまな場面で有効に働きます。

例えば、ログファイルに対して特定のプレフィックスを一括で付与したり、設定ファイルの書式を整えるといった場面です。

また、大量のコードに共通の修正を加える場合にも、マクロを使うことで繰り返しの負担を大幅に減らすことができます。

人手による修正ではミスが生じやすい操作も、マクロを利用すれば正確に実行できます。

導入メリットの整理

マクロを導入することで得られるメリットを以下に整理します。

効率性だけでなく、正確性や応用性といった側面からも実務に役立つことが理解できるはずです。

メリット内容
効率化一度の記録で何十行もの作業を瞬時に再生でき、作業時間を短縮できる
正確性毎回同じ操作を再現できるため、人手による入力ミスを防止できる
柔軟性検索やビジュアルモードと組み合わせることで複雑な編集にも対応できる
学習コストの低さ高度な知識がなくてもすぐに使えるため、初心者でも導入しやすい

マクロの基本操作

Vimのマクロは、日常的に繰り返す作業を大幅に効率化できる手段です。

基本操作を理解しておくことで、単調な編集を何度も繰り返す必要がなくなり、作業の正確性も高まります。

ここでは、マクロの記録と再生の流れ、さらに覚えておくと便利なコマンド一覧を整理します。

マクロの記録と再生

マクロの第一歩は「記録」と「再生」です。

一度の記録で、複数行に同じ操作を瞬時に展開できるようになります。

対象ファイルを明示します。

sample.txt の内容:

テキスト1行目
テキスト2行目
テキスト3行目

  1. ターミナルで対象ファイルを Vim で開きます。

    vim sample.txt

  2. Vim が起動したら「通常モード」で以下の手順を実行します。

    qaA;[Esc]

    sample.txt を対象に、各行の末尾へ「;」を追加するマクロを記録します。
    【出力例:】

    テキスト1行目;  👉 マクロ等力時に追加された「;(セミコロン)」
    テキスト2行目
    テキスト3行目

  3. マクロを終了します。

    jq

ポイント

jqの内訳" webicon="st-svg-check-circle" color="#757575" bordercolor="#BDBDBD" bgcolor="#ffffff" borderwidth="2" borderradius="5" titleweight="bold" fontsize="" myclass="st-mybox-class" margin="25px 0 25px 0"]

  • qa → レジスタaで記録開始
  • A;[Esc] → 行末に「;」を挿入
  • j → 次の行へ移動
  • q → 記録終了 続けて記録したマクロを再生します。
  • qa でマクロ記録を開始(レジスタaに記録する)
  • A;[Esc]j で「行末に ; を追加 → 次の行に移動」の操作を実行
  • q でマクロ記録を終了

ここで2段目に単独で書かれている q は「操作の一部」ではなく、「マクロ記録を閉じる」ための終了コマンドです。

だからこそ、上の並びは「マクロの中身」と「マクロ終了」を分けて表記しているわけです。

もしこの終了の q を忘れると、Vimはずっと「記録中」のままになってしまい、以後の操作がすべてマクロに追加されてしまいます。

記録マクロの繰り返し実行

ここまで記録したマクロを繰り返すことも可能です。

@a

【出力例:】

テキスト1行目;
テキスト2行目;
テキスト3行目

前の処理で「jq」を使って一段下へ移動した状態でマクロを終了しているため、下記のコマンドを打つと2段目の末尾に「;」がマクロによって追加されます。

記録マクロを数値指定で繰り返し実行

記録マクロの繰り返し実行後に「u(アンドゥコマンド)」を実行してマクロ記録直後の状態へ復元します。

テキスト1行目;
テキスト2行目
テキスト3行目

数値指定(ここでは2段下まで)マクロを実行します。

2@a

【出力例:】

テキスト1行目;
テキスト2行目;
テキスト3行目;

このように数値を指定することで、任意の回数だけマクロを一括適用でき、手作業では時間がかかる作業を一瞬で終わらせることができます。

よく使うコマンド一覧表

基本的なマクロ操作を効率的に習得するためには、よく使うコマンドを覚えておくと便利です。

以下の表では代表的なコマンドを整理しています。

コマンド内容
qaレジスタaでマクロ記録開始
qマクロ記録終了
@aレジスタaに記録したマクロを再生
@@直前に実行したマクロを再実行
n@aマクロをn回繰り返し実行

応用的な活用方法

応用的にマクロを使うことで、単純な繰り返し作業からログ整形やリスト化まで効率的に処理できます。

ここでは実務で役立つ具体的なサンプルを紹介します。

繰り返し作業の効率化

タスク管理やドキュメント作成では、テキストを一括でリスト形式にしたいことがあります。

ここでは todo.txt の各行の先頭に「- 」を自動で追加する例を示します。

対象ファイル:todo.txt

Buy milk
Fix server
Write report

カーソルを1行目に置き、次の手順でマクロを記録します。

qaI- [Esc]jq

ポイント

jqの内訳" webicon="st-svg-check-circle" color="#757575" bordercolor="#BDBDBD" bgcolor="#ffffff" borderwidth="2" borderradius="5" titleweight="bold" fontsize="" myclass="st-mybox-class" margin="25px 0 25px 0"]

  • qa でレジスタ a に記録開始
  • I- で行頭に「- 」を追加
  • j で次の行に移動
  • q で記録終了 次にマクロを実行します。

@a

【出力例:】

- Buy milk
- Fix server
Write report

さらに残りの行もまとめて処理する場合は回数を指定します。

2@a

【出力例:】

- Buy milk
- Fix server
- Write report

このようにマクロを活用すれば、複数行に対して同じ編集を効率的に適用できます。

検索とマクロの組み合わせ

マクロは検索やビジュアルモードと組み合わせることで、効率的に複数の行を処理できます。

重要なポイントは「検索操作はマクロに含めず、処理だけを記録する」ことです。そうすることで、二重に処理が走る問題を防げます。

対象ファイル:access.log

192.168.0.1 GET /index.html
192.168.0.2 POST /api/data
192.168.0.3 GET /contact.html

1行目でカーソルを先頭に置き、次のマクロを記録します。

qaA #CHECK[Esc]q

ポイント

qの内訳" webicon="st-svg-check-circle" color="#757575" bordercolor="#BDBDBD" bgcolor="#ffffff" borderwidth="2" borderradius="5" titleweight="bold" fontsize="" myclass="st-mybox-class" margin="25px 0 25px 0"]

  • qa でレジスタ a に記録開始
  • A #CHECK で行末に「 #CHECK」を追加(Append)
  • [Esc] でノーマルモードに戻る
  • q で記録終了

次に、検索結果へこのマクロを適用します。/GET でヒットした行にのみ実行されるため、余計な重複は発生しません。

:g/GET/if getline('.') !~ '#CHECK' | normal A #CHECK

  1. :g/GET/ の意味
    • :g/GET/ はファイル全体を対象にしながら「GET を含む行だけ」を抽出します。
    • これにより POST 行など余計な行は無視され、対象が限定されます。
  2. if getline('.') !~ '#CHECK'
    • getline('.') は現在の行全体を取得するコマンドです。 その後ろの !~ '#CHECK' は「行内に #CHECK が含まれていない」という条件を意味します。 つまり、GET 行であってもすでに #CHECK が付いていれば処理をスキップし、まだ付いていない行だけを対象にします。
  3. normal A #CHECK
    • normal コマンドはノーマルモードの操作をスクリプトから呼び出すものです。
    • A は「行末に移動して入力を開始」という操作で、続けて入力される #CHECK がそのまま行末に追記されます。
    • 結果として、対象行の末尾に一度だけ #CHECK が追加されます。

【出力例:】

192.168.0.1 GET /index.html #CHECK
192.168.0.2 POST /api/data
192.168.0.3 GET /contact.html #CHECK

不要になった#CHECKを削除する例

ログやコードに付与した「#CHECK」が不要になった場合、Vimでは検索と置換を組み合わせることで効率的に削除できます。

すでにマークを付けた後で状況が変わったときや、レビュー用に一時的にタグを外したい場合に有効です。ここではGET行だけを対象にして、末尾の「#CHECK」を外す手順を解説します。

対象ファイル:access.log

192.168.0.1 GET /index.html #CHECK
192.168.0.2 POST /api/data
192.168.0.3 GET /contact.html #CHECK

Vimのコマンドラインから次を実行します。

:g/GET/s/\s#CHECK$//

このコマンドの意味は以下の通りです。

:g/GET/s/s#CHECK$//の内訳

  • :g/GET/ はファイル全体から「GET」を含む行だけを抽出します。

  • s/\s#CHECK$// は行末の半角スペースと「#CHECK」を検索し、空文字に置き換えることで削除します。

【出力例:】

192.168.0.1 GET /index.html
192.168.0.2 POST /api/data
192.168.0.3 GET /contact.html

結果として、POST行には影響を与えず、GET行に付与された「#CHECK」だけを確実に取り除くことができます。

これにより、マークアップの後処理やログのクリーンアップをスムーズに行えるようになります。

ビジュアルモードと組み合わせ

複数行を選択して一括で処理を適用する場合、範囲を選んでからマクロを再生するだけで効率的に編集ができます。

対象ファイル:access.log

内容は以下のとおりです。

192.168.0.1 GET /index.html
192.168.0.2 POST /api/data
192.168.0.3 GET /contact.html

access.log を対象に、行頭へ「# 」を付けるマクロを記録し(1行分の処理のみ)、記録直後に元に戻してから、ビジュアルライン選択した範囲へ一括適用します。

qaI# [Esc]q
u
Vjj
:'<,'>normal @a

【出力例:】

# 192.168.0.1 GET /index.html
# 192.168.0.2 POST /api/data
# 192.168.0.3 GET /contact.html

さらに、検索と置換をマクロに組み合わせると、文字列の差し替えに加えてコメントの付与など追加処理も可能です。

例えば「POST」を「PUT」に変換し、同時に「#UPDATED」を末尾に追記するケースです。

qa
/POST [Enter]
:s/POST/PUT/ [Enter]
A #UPDATED [Esc]
q

コマンド内訳

  1. qa → レジスタ a にマクロ記録を開始。
  2. /POST [Enter] → 次の POST を検索してカーソルを移動。
  3. :s/POST/PUT/ [Enter] → その行の POST を PUT に置換。
  4. A #UPDATED [Esc] → 行末に移動して「 #UPDATED」を追記。
  5. q → マクロ記録終了。

【出力例:】

# 192.168.0.1 GET /index.html
# 192.168.0.2 PUT /api/data #UPDATED
# 192.168.0.3 GET /contact.html

このように、検索・置換やビジュアルモードとマクロを組み合わせれば、単なる繰り返し作業を超えて条件付きの自動化や範囲限定の効率的な加工が実現できます。

ここでの実行例はあくまでもサンプルとしての実行コマンドです。

実際の作業では、検索とマクロ、さらにビジュアルモードとの組み合わせを繰り返し試すことで、ようやく自分の編集スタイルとして身につきます。

複雑なファイル編集ほど効率化の効果が大きいため、ぜひ練習を重ねて感覚を掴んでください。

トラブルと対処法

マクロを活用すると編集作業が大幅に効率化できますが、実際には記録が途中で止まってしまったり、意図しない動きをしてしまうことがあります。

こうしたトラブルを放置すると、作業のやり直しや不要な編集が発生し、かえって効率を下げてしまいます。

ここでは代表的なトラブルとその対処法を解説します。

記録ミスや途中停止の修正方法

マクロの記録中に余計なキーを押してしまったり、途中で停止してしまうケースはよくあります。

この場合は、すぐに記録を終了して内容を確認し、不要な動作を削除したうえで再度記録し直すのが確実です。

編集途中で間違えた場合でも、直前の操作は取り消し可能です。 対象ファイル:

sample.txt 内容は以下のとおりです。

apple
banana
cherry

sample.txt を対象に、誤って「apple」を「appple」と入力したまま記録を続けてしまったとします。

この場合は記録終了後に u で取り消してから再度記録を行えば問題ありません。

qaIappple[Esc]q
u
qaIapple[Esc]q

【出力例:】

apple
banana
cherry

このように「取り消し」と「再記録」を組み合わせることで、途中停止や入力ミスがあってもすぐに修正できます。

誤操作を防ぐための工夫

マクロの誤操作で一番多いのは、意図せず複数行に同じ編集を加えてしまうことです。

ミスを防ぐためには、マクロを作成した直後に必ず短い範囲でテスト実行を行うことが重要です。少数の行で動作を確認したうえで、必要に応じて全体に適用すれば安心です。

対象ファイル:numbers.txt

1
2
3

  1. マクロ記録

    qaA #NUM[Esc]q

  2. 一行目に「#NUM」が追加される

    1 #NUM
    2
    3

  3. マクロ再生

    j
    @a

  4.  【結果】二行目に「# NUM」が追加される

    1 #NUM
    2 #NUM
    3

  5. さらに再生 三行目に「# NUM」が追加される

    j
    @a

  6. 【最終結果】

    1 #NUM
    2 #NUM
    3 #NUM

「マクロの記録時に編集は反映される」ため、先頭行だけ二重に処理しないように注意が必要です。
対処方法はシンプルで、マクロを記録した直後に u で取り消してから、@a で他の行に適用すれば、余計な重複を避けられます。

このように「小規模なテスト → 全体適用」という手順を習慣にすることで、誤操作による修正の手間を減らすことができます。

まとめと次へのステップ

ここまでで、Vim のマクロを活用することで繰り返しの編集作業を効率化できることを解説しました。

マクロを使えば、単純な文字列の追加や置換だけでなく、検索やビジュアルモードと組み合わせて複数行をまとめて処理することが可能になります。

日常的に発生する単調な編集を自動化できることは、作業時間の短縮だけでなくヒューマンエラーの防止にもつながります。

要点の整理

今回の記事で取り上げた内容を振り返ると、以下の点が重要です。

  • マクロは「記録と再生」により操作を自動化できる
  • 検索や置換を含めることで条件付きの編集も可能になる
  • ビジュアルモードと組み合わせれば範囲指定した複数行に一括で適用できる
  • 誤操作を防ぐには、取り消しやバックアップ、少数行でのテスト実行が有効である

これらを意識することで、日常的な編集の精度と速度が大きく向上します。

次に取り組むべきステップ

マクロをある程度使いこなせるようになったら、次はより柔軟で高度な編集方法に挑戦することをおすすめします。

特に有効なのが、正規表現を活用した検索・置換や、.vimrc によるマクロやコマンドのカスタマイズです。

正規表現を理解すれば、特定のパターンに一致する行だけを一括で編集したり、複雑な置換処理をワンコマンドで実行できます。

さらに .vimrc による設定を行えば、よく使うマクロやコマンドを定義しておき、常に同じ環境で効率的に編集を進められます。

このように、マクロで学んだ自動化の基礎を足がかりに、正規表現や .vimrc カスタマイズを組み合わせれば、日々の作業をさらに洗練させることができます。

読者の皆さんも、ぜひ一歩先の編集技術に取り組んでみてください。

次のおすすめ記事

実践環境を整える

ここまで学んだ知識を実際に試すには、Linuxを動かす環境が必要です。手軽に始めるならVPSを利用するのがおすすめです。
VPS徹底比較!ConoHa・さくら・Xserverの選び方



VPSを利用してLinux環境を準備したら、実際の設定は下記の記事が参考になります。
VPSに開発環境を自動構築する方法|Apache+Tomcat+PostgreSQL

よく読まれている記事

1

「私たちが日々利用しているスマートフォンやインターネット、そしてスーパーコンピュータやクラウドサービス――これらの多くがLinuxの力で動いていることをご存じですか? 無料で使えるだけでなく、高い柔軟 ...

2

Linux環境でよく目にする「Vim」という名前。サーバーにログインしたら突然Vimが開いてしまい、「どうやって入力するの?」「保存や終了ができない!」と困った経験をした人も多いのではないでしょうか。 ...

3

ネットワーク技術は現代のITインフラにおいて不可欠な要素となっています。しかし、ネットワークを深く理解するためには、その基本となる「プロトコル」と「レイヤ」の概念をしっかり把握することが重要です。 こ ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

5

Javaは世界中で広く使われているプログラミング言語であり、特に業務システムやWebアプリケーションの開発において欠かせない存在です。本記事では、初心者向けにJavaの基礎知識を網羅し、環境構築から基 ...

-Vimの基礎知識