1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Vimを使ったテキスト一括操作まとめ 検索置換・ビジュアルブロックモードの応用

Last updated at Posted at 2025-02-18

この記事について

Vimを使ったテキストの一括操作の方法をまとめておきます。

Vimの一番の強み・利点は、「あらゆる操作がコマンド・キーボードで完結するため、テキストの一括編集が圧倒的に早い」点だと思います。

テキストの一括操作は、日常のプログラミング・コーディング作業でも頻出です。ここでは、

  • ビジュアルブロックモード
  • 検索置換

などの機能を活用することになります。

関連のあるモード・コマンド

テキストの一括編集において特に重要になるのは、この2つの機能です。

機能 コマンド できること
ビジュアルブロックモードへの切り替え <Ctrl-v> 複数行に対して、同じテキスト操作を一括で可能にする
検索置換(現在の行) :s/置き換え前/置き換え後/g 現在の行にある対象文字列をすべて置換する

Vimの豊富な機能・コマンドの中でも、この2つは特に便利で、いろいろなことに応用できます。そのため、慣れるまで反復練習をする価値も大きいです。

具体的な利用場面

マークダウンのリストをHTMLのリストに変換する

書き換え前:マークダウン記法のリスト
- りんご
- みかん
- ぶどう

上記のテキストなら、

  1. ビジュアルブロックモード(Ctrl+v)で、先頭の「-」を選択
  2. xなどで一括削除
  3. ビジュアルブロックモード(Ctrl+v)で各行の先頭を選択
  4. 挿入モード(Shift+i)で<li>と入力し、ESC
    1. ビジュアルブロックモード(Ctrl+v)で各行の末尾を選択
  5. 挿入モード(Shift+i)で </li>と入力し、ESC
  6. ggで先頭に移動し、挿入モード(i)で <ul>と入力
  7. Gで末尾に移動し、挿入モード(i)で </ul>と入力
書き換え後:HTMLリスト
<ul>
    <li>りんご</li>
    <li>みかん</li>
    <li>ぶどう</li>
</ul>

ビジュアルブロックモードと挿入モードを行き来するイメージですね。
テキストの先頭(gg)や末尾(G)へのジャンプも、しっかり活用しています。

カンマ区切り文字列すべてに、引用符(”)をつける

書き換え前:引用符(”)のないカンマ区切りテキスト
aaa,bbb,ccc
  1. ビジュアルブロックモード(Ctrl+v)で、文字列全体を選択し、ESCで、コマンドモードに戻る
  2. :s/,/","/g と入力し、カンマ(,)の前後に引用符(")をつける
  3. ggで先頭に移動し、挿入モード(i)で "を付け足し、ESCで、コマンドモードに戻る
  4. Gで末尾に移動し、挿入モード(i)で "を付け足し、ESCで、コマンドモードに戻る
書き換え後:引用符(”)を付けたカンマ区切りテキスト
"aaa","bbb","ccc"

CSVファイルのヘッダーを作成するときや、JSON形式で項目名を作るときに、よく出てきます。

引用符つきの単語リストから、引用符を外す

今度は逆に、引用符(”)を外す操作です。

書き換え前:引用符(”)を付けたカンマ区切りテキスト
"aaa","bbb","ccc"

考え方は何も変わらず、

  • ビジュアルブロックモードで全範囲選択
  • 文字置換(:s/,/"//g )

で、いけます。
引用符(”)を削除するという作業のみで足りる分、引用符(”)を新たに付け足すよりも簡単です。

書き換え後:引用符(”)のないカンマ区切りテキスト
aaa,bbb,ccc

CSVのヘッダー名をそのままプログラムの変数名として使いたい場面では、こうした作業も出てきます。

各行のインデントをとる

書き換え前:インデントあり
    aaa
    bbb
    ccc
  1. ビジュアルブロックモード(Ctrl+v)で、不要なインデントにあたる箇所を指定
  2. d でインデント削除
書き換え後:インデントなし
aaa
bbb
ccc

本質は、各行の先頭を範囲指定し、削除するということです。
したがって、先頭にあるカンマ(,)をまとめて除去する場合も、同じ要領でできます。

書き換え前:カンマあり
aaa
,bbb
,ccc
書き換え後:カンマなし
aaa
bbb
ccc

各行にカンマ(,)を追加する

書き換え前:カンマなし
aaa
bbb
ccc
  1. ビジュアルブロックモード(Ctrl+v)で、各行の先頭を指定
  2. Shift + i で挿入モードに切り替え、カンマ(,)を入力し、ESC
書き換え後:カンマあり
aaa
,bbb
,ccc

これも、各行の先頭を範囲指定し、任意の文字を追加することが本質です。
したがって、変数名にデータ型指定を追加する場合も、同じです。

書き換え前:テキストの羅列
var1
var2
var3
書き換え後:各変数名に、型を加えて、変数宣言にする。
int var1
int var2
int var3

挿入モードの切り替え時に、Shift + iとする点を忘れやすいです。(たんにiとするだけではダメ。)
Ctrl + v →Shift + i という流れで覚えましょう。

tsvファイルをcsvファイルに変更する

書き換え前:tab区切りのtsv
banana  apple  orange
  • tsv:tab( )区切り
  • csvファイル:カンマ(,)区切り

ここまで見てきた人なら、もう楽勝だと思います。

はい、tabをカンマに変えるだけ、つまり文字置換でいけますね。

  1. ビジュアルブロックモード(Ctrl+v)で、対象範囲を選ぶ
    ggVGとかでテキストを全範囲選択すればOK
  2. 文字置換(:s/<tab>/,/g)
書き換え後:カンマ区切りのcsv
banana,apple,orange

検索方法・ビジュアルモードの詳細

以下は補足です。

様々なビジュアルモード

本記事で紹介したのは、ビジュアルブロックモードのみですが、実はビジュアルモードにもいくつか種類があります。

モード名 コマンド できること 主な用途
ビジュアルモード (Visual Mode) v 文字単位で選択 1単語だけ色を変える、特定の部分だけ削除するなど
ビジュアルラインモード (Visual Line Mode) <Shift> + v *行単位で選択 複数行のコメントアウト、一括削除など*
ビジュアルブロックモード (Visual Block Mode) <Ctrl> + v 矩形(ブロック)単位で選択 ⭐︎もっとも重要。変数名の先頭に型情報を追加、JSONのキーへの引用符を追加など。

もっとも重要なのは、ビジュアルブロックモードだと思います。
なぜなら、

  • 一文字ずつの操作(ビジュアルモード)
     → 挿入モード(:i)での一文字ずつの操作で足りるため
  • 一行ずつの操作(ビジュアルラインモード )
     → 行単位での一括操作(削除ならdd、コピーならyyなど)で足りるため

といった理由から、あえてビジュアルモードに頼る必要性がないためです。

一方でビジュアルブロックモードは、複数行に一括で同じ文字列操作を適用するなど、他の機能で代替しづらい役割があります。

そのため、複数あるビジュアルモードの使い分けがややこしい、と悩むくらいなら、まずはビジュアルブロックモードの活用に慣れるのがおすすめです。

様々な検索置換の手法

また、検索置換の方法も様々です。

コマンド 説明 備考
:s/error/fix/g 現在の行の "error" をすべて "fix" に置換 ⭐︎最重要
:%s/error/fix/g ファイル全体の "error" をすべて "fix" に置換
:%s/error/fix/gc 置換ごとに確認しながら実行
:%s/error/fix/gi 大文字小文字を区別せずに置換

本記事では一番上:s/error/fix/gしか紹介していませんが、このように検索方法も実は色々です。
※本当は、ここに掲載しきれないほど沢山あります。

流石に全部は覚えきれないので、どんなことができるかだけざっくり把握して、必要になったら都度調べるのがおすすめです。

作業時の注意点:検索時には、'<,'>という表記があるのを確認

これはビジュアルブロックモードの選択範囲が、検索対象になっているという意味です。
これが出ていれば、s/error/correct/gの構文に沿って、文字置換ができます。

image.png

筆者のマシンで:したときが上記の表示。左下に注目。

まとめ

本記事では、テキストの一括操作を取り上げました。この辺りの作業は、慣れていないとついマウスとキーボードを何往復もしがちです。そして時間をかけた作業ほど、ミスもしがちなんですよね。

一方Vimを使うとキーボードだけで完結するため、慣れればとにかく早いです

テキストの取り扱いがシステマチックに行えるというVimの強みが伝われば嬉しいです。普段は自分の好きなエディタ(VSCodeなど)を使うとしても、こうした一括テキスト操作をする際、Vimの活用も検討してみてください。

筆者からひと言

他にも便利なVimの置換技や活用法を知っている人は、ぜひコメントで共有してください。

関連記事

本記事は、

の続編です。Vimのコマンド操作に全般慣れていないという人は、まずはこちらを参照してください。

また、Vimって何?触ったことすらないんだけど? な人は、

こちらを参照してください。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?