第9回 vi 入門|置換コマンド(r, :s)の基本と効率的な修正術|UNIX Cafe

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

第9回 vi 入門|置換コマンド(r, :s)の基本と効率的な修正術|UNIX Cafe

vi 入門 | 第9回

目次

修正がぐっと楽になる「vi 置換コマンド」の使い方

編集しているとき、文字を消して書き直すより、その場で置き換えたほうが早い場面があります。特に、小さな打ち間違いや短い語句の修正では、置換コマンドを知っているだけで操作の手数がかなり減ります。

今回のゴールは、r:s/old/new/ を使って、1文字と文字列の置換を使い分けられるようになることです。どちらも難しくありません。実例を見ながら、順番に試してみましょう。

動画で流れを先に見たい方は、UNIX Cafe の YouTube もあわせてどうぞ。記事と同じく、初心者向けのやさしい流れで vi の操作を確認できます。


📝 この記事で学べること

  • r で1文字だけをその場で置き換える方法
  • :s/old/new/ で行の中の文字列を置き換える方法
  • 行全体・ファイル全体に置換を広げるオプション(g フラグ・%s
  • r:s の使い分けの基準

置換は「消して書く」より早いことがある

たとえば「appla」と打ち間違えたとき、ふつうは xi を組み合わせて修正しようとします。しかし、1文字だけ違う・単語を差し替えたい、といった場面では、置換コマンドのほうが操作が少なく済みます。

置換コマンドを使えば、カーソルを合わせてコマンドを1つ打つだけで修正が完了します。「消す→入力モード→書く→Esc」という手順を省けるのが大きなメリットです。

r で1文字だけ置き換える

r は、カーソル位置の1文字を別の1文字にその場で置き換えるコマンドです。入力モードに切り替える必要がなく、コマンドモードのままで使えます。

r(置き換えたい文字)

操作の流れはシンプルです。まずカーソルを直したい文字の上に移動し、r を押します。すると次に打った1文字が、カーソル位置の文字と入れ替わります。Esc を押す必要もなく、置き換えが終わったら自動的にコマンドモードに戻ります。

r の実例:1文字だけ打ち間違えたとき

たとえば、次のように打ち間違えたとします。

Before(間違い)

appla orange banana

After(修正後)

apple orange banana

「appla」の最後の「a」を「e」に直したい場合、操作は次のようになります。

  1. l キーなどで、カーソルを「a」の上に移動する
  2. r を押す
  3. 続けて e を押す

これだけで「appla」が「apple」に変わります。入力モードへの切り替えも、Esc も不要です。


⚠ 注意:r は1文字しか置き換えられません

r の後に2文字以上を打っても、最初の1文字だけが置き換わり、残りはコマンドとして解釈されます。2文字以上を直したいときは :s を使いましょう。


:s/old/new/ で文字列を置き換える

:s/old/new/ は、行の中の特定の文字列を別の文字列に置き換えるコマンドです。old に元の文字列、new に新しい文字列を入れて使います。

:s/old/new/

このコマンドはコマンドモードで :(コロン)を押したあと入力します。画面の下部にカーソルが移動するので、そこに続けて打ちます。

:s の実例:単語を差し替えたいとき

たとえば、カーソルがある行に「orange」という語があり、「melon」に変えたい場合は次のように入力します。

Before

apple orange banana

After

apple melon banana
:s/orange/melon/

Enter を押すと、カーソルのある行の「orange」が「melon」に置き換わります。ただし、デフォルトでは行の中で最初に見つかった1箇所だけが対象になります。

行の中の同じ語をすべて置き換える:g フラグ

同じ語が行の中に複数あるとき、末尾に g を付けると、その行に含まれるすべての一致を置き換えます。

Before

cat and cat and cat

After

dog and dog and dog
:s/cat/dog/g

g は「global(グローバル)」の略で、「この行の中にあるものを全部」という意味です。g なしだと最初の1箇所だけ、g ありだと行全体が対象になります。

ファイル全体を一括置換する:%s

ファイル全体の特定の語をまとめて置き換えたいときは、:s の代わりに :%s を使います。

:%s/old/new/g

% は「ファイル全体」を意味します。:%s/old/new/g とすると、ファイルのすべての行に含まれる oldnew に置き換わります。変数名やファイルパスの修正など、まとめて直したいときに便利です。


⚠ 注意::%s は元に戻せないケースがあります

ファイル全体の一括置換は、意図しない箇所まで書き換えてしまうことがあります。実行前に :w で保存しておくか、小さなファイルで試してから使いましょう。間違えた場合は u(アンドゥ)で直前の操作を取り消せます。


r と :s の使い分け

どちらを使うか迷ったときは、「直したいのが1文字かどうか」で判断しましょう。

  • 1文字だけ直したい → r(カーソルを合わせて r + 新しい文字)
  • 単語や短い文字列を直したい → :s/old/new/
  • 行の中の同じ語をすべて直したい → :s/old/new/g
  • ファイル全体をまとめて直したい → :%s/old/new/g

最初は r:s/old/new/ の2つだけ覚えれば十分です。慣れてきたら g%s を少しずつ使ってみましょう。

まとめ|小さな修正ほど置換が効く


✔ この記事のまとめ

  • r はカーソル位置の1文字をその場で置き換える。入力モード不要
  • :s/old/new/ は行の中の文字列を置き換える。最初の1箇所が対象
  • :s/old/new/g は行全体の一致をすべて置き換える
  • :%s/old/new/g はファイル全体を一括置換する
  • 迷ったら「1文字なら r、文字列なら :s」で判断する

置換コマンドは、覚えた瞬間から「消して書き直す」手間が減ります。まずは r だけでも試してみると、操作がずいぶん楽に感じられるはずです。

次回予告

次は、「vi ビジュアルモード」の実践編を見ていきます。範囲を目で確認しながら選択・削除・コピーができるビジュアルモードは、置換と組み合わせるとさらに便利になります。

あわせて読みたい

検索の基本をもう一度確認したい方は、「vi 検索コマンド」の基本もあわせてどうぞ。

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

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

目次