[Vim問題] カーソル行の文字列を手早く置換する方法は何種類?

置換モード

この記事では、Vim / neovim でプラグインを使わずに「カーソル行の文字を手早く置換する」ためのコマンドやキーバインドについて、ご紹介します。

[解答] 4種類

主には次の四種類が考えられます。

  1. 置換モード
  2. 置換コマンド
  3. ビジュアルモード+オペレータ
  4. オペレータ+モーション/テキストオブジェクト

置換パターン1. 置換モード

(ノーマルモードで対象テキストに移動後 )
 R {変更後のテキスト}
置換モード
置換モード

該当箇所に移動した後、R キーで置換モードに移行して、変更後のテキストを上書きしていきます。

初心者Vimmerが恐らく最初に覚えるであろうキー操作です。

ただし、この方法は対象が同じ文字数のテキストの必要がある点が難点です。

これはテキストを上書きする置換モードの特性がゆえです。

そのため、次の段階では恐らくコチラを使います。

置換パターン2. 置換コマンド

(ノーマルモード)
:substitute/{置換前の単語}/{置換後の単語}/
または
:s/{置換前の単語}/{置換後の単語}/
置換コマンド
置換コマンド

他のエディタでもよく利用するであろう置換コマンドです。

テキストの置き換えですから、こちらも非常に直感的です。

オプションに g を指定すれば複数のテキストを一括置換できますし、c を指定すれば確認しながら慎重に置換することができます。

また、実行するタイミングでは別の行にカーソルがあったとしても実行することは可能です。

ただし、こちらはファイル全体で文字を置換したい場合には非常に強力な反面、一行での置換にはちょっとステップ数(キー入力数)が多すぎます。

別に悪くはないですが、もっと手軽に置換する方法はもっとあります。

そのため、もっと慣れてくると次のようにオペレータとモーションを組み合わせるようになります。

置換パターン3. ビジュアルモード

(ノーマルモードで対象テキストに移動後 )
v {範囲指定/移動} -> c     (行選択する場合)
または
Ctrl-v {範囲指定/移動} -> c  (短形選択する場合)
ビジュアルモード
ビジュアルモード

ビジュアルモードを覚えた上で、それにオペレータを組み合わせるようになるはずです。

つまり、範囲を指定してから変更する、という動作になるわけで直感的と言えます。

こちらも移動の仕方によっては、非常に手軽で直感的にテキスト置換を行うことができます。

しかし、繰り返し実行や範囲指定が面倒くさいのは事実です。

人によっては、ビジュアルモードで選択してから置換コマンドで置換する人もいるでしょう。

しかし、それぞれのデメリットを完全には打ち消すことができません。

そこで、初級~中級 Vimmer になると、次のキー操作を頻繁に活用するようになります。

置換パターン4. オペレータ+モーション/テキストオブジェクト

(ノーマルモードで対象テキストに移動後)
cw  (単語の頭文字にカーソルがある場合)
または
ciw  (単語の頭文字以外にカーソルがある場合)
オペレータ+テキストオブジェクト  ciw
オペレータ+テキストオブジェクト ciw

置換を示すオペレータ c の後、モーション w でカーソル下の単語を範囲指定するか、あるいはテキストオブジェクト iw でカーソルで選択中の単語を範囲指定します。

wiw の違いは、選択するときのカーソルの位置です。前者はカーソル位置から単語末尾の文字までを選択しますが、後者は単語のどこにカーソルがあってもその単語を選択します。

特に後者のテキストオブジェクトでの選択は、Vim ならでは非常に人気です。

移動は t や F などで手早く済ませ、このキー操作で置換してしまうというのが、よくある編集パターンと言えます。


なお、細かいことを言えば、置換コマンドやビジュアルモードだってやり方はいろいろあります。

しかし、Vimmer の間ではオペレータ+モーションが使えることがVimを選ぶ理由の1つになっているようです。

いずれの方法も覚えておくことに越したことはありませんが、特に置換パターン4は確実に練習して、自分のものにしましょう。

目次

このVimコマンドの補足情報

  • 利用頻度[star rate=5]
  • 便利さ[star rate=5]
  • 覚え易さ[star rate=3]

関連するVimヘルプ

Vimからは、下記のコマンドでヘルプを確認できます。

:help R
:help visual.txt
:help substitute
:help motion
:help objects

ヘルプで検索するときは、通常は大文字小文字は識別されませんので、どちらでも構いません。

テキストオブジェクトやモーションを勉強できる参考書籍

テキストオブジェクトやモーションを詳しく勉強できるのは、こちらの書籍になります。

[temp id=3]

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Vim力アップして、そろそろ上級 Vimmer の仲間入りしたいIT系エンジニアの端くれです。読んでくる訪問者の皆様と一緒に、Vim力を上げていくことができる記事が書ければと考えています。

目次