今回の記事では前回続きでLinuxのファイル編集で良く使うviコマンドについて解説していきます。この記事はviコマンドでファイルの編集に慣れてきた人向けです。
結論から言うと、cw・:%s・u・.・:spの5つの便利コマンドを覚えるだけで、viの編集スピードは見違えるほど速くなります。 効率良くviコマンドを使いこなしてインフラエンジニアとしてレベルアップしましょう。
viで効率良くファイルを編集するコマンド5選¶
まず、viコマンドを使い慣れていない方は、こちらの記事を参考に使い方を覚えてください。viコマンドの基本的な使い方を解説した記事では、ファイルを開いてから保存するまでの流れを説明しています。
基本的な使い方を覚えたら、効率良くファイルを編集したいですよね。今回は、効率良くファイルを編集するのに使えるコマンドを教えます!
最初に、この記事で紹介する5つのコマンドを一覧でまとめておきます。
| コマンド | できること |
|---|---|
cw |
カーソル位置から単語の末尾までを書き換える |
s・:%s |
文字を置換する・ファイル全体を一括置換する |
u |
直前の操作を取り消す(アンドゥ) |
. |
直前の編集操作を繰り返す |
:sp |
画面を分割して2つのファイルを同時に表示する |
どれも入力自体は一瞬ですが、効果は絶大です。それでは、実際の画面を見ながら1つずつ解説していきます。
1.単語を書き換えるcwコマンド¶
ファイルの編集時、スペースで区切られた単語を書き換える際は、cwを使いましょう。そうすることで、xで文字列を削除する必要がなく文字を書き換えることができます。
viを速く使うコツは、消してから入力し直すのではなく、書き換えたい範囲を1回の操作でまとめて編集することです。 cwはその代表で、change word(単語を変更する)の頭文字と覚えると忘れにくいですよ。
↓の画像ではtestという文字をcwを使って書き換えています。cwを入力すると書き換える単語の末尾が$になります。

末尾が$に変わったら、そのまま新しい単語を入力して[esc]を押せば書き換え完了です。なお、Vimの設定によっては$が表示されず、単語が消えてから入力状態に切り替わることもあります。
cwは単語を書き換えるものですが、[shift]+cを押すとカーソル位置から行末までを書き換えることができます。ほかにもいろいろあるので試してみましょう。
たとえばccと入力すると、行全体をまるごと書き換えられます。cの後ろに書き換える範囲を指定するという考え方をつかむと、応用が一気に広がりますよ。
2.文字列を置換するsコマンドと:%sの一括置換¶
sコマンドを使うと[esc]を押すまで、カーソルの文字を置換します。これも良く使いますが、さらに便利なものは、ファイルの中の指定したすべての文字列を置換するコマンドです。
書式は次の通りです。
:%s/[置換前の文字列]/[置換後の文字列]/g

上の画像は、ファイルの中のtestという文字列をtttttという文字列に置換する作業です。コマンドは:%s/test/ttttt/gと入力します。
コマンド実行すると、ファイルの中の文字列がすべて置換されます。

%はファイル全体を対象にするという意味で、末尾のgは行内のすべての一致を置換するという指定です。gを外すと、各行の最初の1つだけが置換されます。
設定ファイルの中のIPアドレスやホスト名をまとめて書き換えるときなど、インフラの実務でも出番が多い操作です。数百行あるファイルでも一瞬で終わるので、ぜひ手になじませてください。
1つずつ確認しながら置換したい場合は、末尾をgcに変えましょう。置換するかどうかをyかnで答えながら進められるので、大事なファイルを編集するときも安心ですね。
3.間違えた場合に戻るuコマンド¶
編集を間違えることは必ずあると思います。先ほどの全ての文字を置換するコマンドで間違えると、修正が大変です。
そんな時、uコマンドを使えば、一つ前の作業に戻ることができるので、とても便利です。undo(元に戻す)の頭文字なので覚えやすいですね。
多くのLinux環境では、viの実体は後述するVimというエディタになっています。Vimならuを押すたびに、さらに過去の状態までさかのぼることが可能です。
逆に戻しすぎてしまったときは、[ctrl]+rでやり直し(リドゥ)ができます。undoとredoを自由に行き来できるようになると、失敗を恐れずに思い切った編集ができるようになりますよ。
なお、戻れる回数は環境によって異なります。昔ながらのviでは直前の1回だけ取り消せる動きが基本なので、uの連打が効かないときは環境の違いを疑ってみてください。
4.直前の作業を繰り返す.コマンド¶
ファイルを繰り返し編集するとき、同じコマンドを何回も入力するのは、面倒ですね。そんな時は.を使えば、同じ作業を繰り返すことができます。
例えば、cwコマンドでtestを書き換えるのを繰り返すとします。一回目は普通にcwコマンドを使えばよいですが、2回目からは、.だけで書き換えることができます。
↓.だけで、test2がaaaaに書き換わる

.コマンドは、直前の編集操作をまるごと記憶しているのがポイントです。単語の書き換えだけでなく、ddでの行削除のような他の編集も繰り返せます。
検索と組み合わせると、さらに強力になります。/で修正したい文字列を検索し、nで次の一致へ飛び、.で同じ書き換えを適用するという流れを覚えると、修正作業がリズミカルに進みますよ。
5.2つのファイルを同時に表示する:spコマンド¶
ファイルを2つ並べて表示させたいときってありますよね。そんな時は:spコマンドを使えば2つのファイルをviエディター上に表示させることができます。
使い方は下記の通りです。
:sp [ファイル名]
では、実際に試してみましょう。同じディレクトリにtestとaaaaというファイルを作り、viコマンドでtestファイルを表示します。
次に:sp aaaaとコマンドを入力すると、viエディターに2つの画面が表示されました。

画面の切り替えは、[ctrl]+wを2回押すだけです。設定ファイルの変更前後を見比べたいときや、別のファイルの記述を参考にしながら編集したいときに重宝します。
縦に分割したい場合は:vs [ファイル名]を使いましょう。片方の画面を閉じるときは、閉じたい側の画面で:qを入力すればOKです。
分割したそれぞれの画面は、別々にスクロールや編集ができます。片方に手順書を表示し、もう片方で設定ファイルを編集するといった使い方もできて便利ですよ。
編集がさらに速くなる基本操作のおさらい¶
ここまで5つの便利コマンドを紹介しましたが、土台となる基本操作が身についているとさらに効率が上がります。あわせて使いたい基本操作も、ここでおさらいしておきましょう。
viの2つのモードを意識しよう¶
viには、コマンドモードと入力モードという2つのモードがあります。今回紹介した5つのコマンドは、すべてコマンドモードで入力するものです。
入力モードに入るキーはiだけではありません。カーソルの後ろから入力を始めるaや、カーソルの下に新しい行を作って入力するoも使えると、編集の初動が速くなります。
どのキーで入力モードに入っても、[esc]でコマンドモードに戻る点は共通です。自分が今どちらのモードにいるかを意識することが、vi上達の第一歩ですよ。
移動・削除・コピー・検索の早見表¶
コマンドモードで使う主な基本操作を表にまとめました。
| 操作 | コマンド |
|---|---|
| カーソル移動 | h(左)・j(下)・k(上)・l(右) |
| 行頭・行末へ移動 | 0・$ |
| ファイルの先頭・末尾へ移動 | gg・G |
| 1文字削除・1行削除 | x・dd |
| 行のコピーと貼り付け | yyとp |
| 文字列の検索 | /文字列(nで次へ、Nで前へ) |
これらのコマンドは、頭に数字を付けると回数を指定できます。たとえば3ddなら3行まとめて削除、5yyなら5行まとめてコピーという意味になります。
数字と組み合わせる発想は、cwのような編集コマンドでも同じように使えます。少ないキー入力で大きな範囲を操作できるのが、viの面白いところですね。
また、数字にGを続けると、指定した行へ一気にジャンプできます。後述するsetオプションで行番号を表示しておくと、この移動がさらに使いやすくなります。
そもそもLinuxのコマンド操作にまだ不安がある方は、Linuxを始めたときに覚えておきたいコマンドのまとめから固めるのがおすすめです。
保存・終了と失敗したときのリカバリー¶
viでの編集は、保存と終了までがワンセットです。ここが曖昧なままだと、せっかくの変更が消えたり、逆に間違った内容を保存してしまったりします。
保存と終了のコマンドも表で整理しておきましょう。
| コマンド | 動作 |
|---|---|
:w |
上書き保存する(編集は続行) |
:wq |
保存して終了する |
ZZ |
保存して終了する(:wqとほぼ同じ動き) |
:q! |
保存せずに強制終了する |
注目してほしいのは:q!です。編集内容がぐちゃぐちゃになってしまったときは、uで1つずつ戻るより、:q!で保存せずに閉じて最初からやり直す方が早い場面もあります。
保存さえしなければ、ファイルの中身は元のまま残っています。 サーバーの設定ファイルを編集していて自信がなくなったら、:q!でいったん退避するのも立派なリカバリーです。
スワップファイルの警告が出たときは¶
編集中にSSH接続が切れたり、同じファイルを二重に開いたりすると、次に開くときに警告画面が出ることがあります。これは、編集内容を一時的に記録するスワップファイル(.swp)が残っているためです。
他に同じファイルを編集している人やプロセスがいないことを確認したら、画面の案内に従って操作すれば大丈夫です。不要になった.swpファイルを削除すれば、次からは警告が出なくなります。
表示を見やすくするsetオプション¶
長いファイルを編集していると、今何行目にいるのか分からなくなりませんか。そんなときは、viの表示設定を変えるsetオプションを使ってみましょう。
代表的なのが、行番号を表示する次のコマンドです。
:set number
行番号が見えると、エラーメッセージに表示された行番号から該当行をすぐに探せます。表示を元に戻したいときは:set nonumberと入力しましょう。
ほかにも、検索で大文字と小文字を区別しなくなる:set ignorecaseなどがあります。これらの設定はviを終了すると元に戻るので、いつも使いたい設定はホームディレクトリの.vimrcというファイルに書いておくと便利です。
viの中からLinuxコマンドを実行する方法¶
ファイルの編集中に、別のLinuxコマンドを実行したくなることはありませんか。たとえば設定ファイルを書きながら、ディレクトリの中身やファイル名を確認したい場面です。
そんなとき、わざわざviを終了する必要はありません。コマンドモードで次のように入力すると、viの中からLinuxコマンドを実行できます。
:!ls
:!に続けて入力したコマンドが実行され、画面に結果が表示されます。エンターキーを押せば、すぐに元の編集画面へ戻れます。
さらに、:r !コマンドという形で入力すると、コマンドの実行結果を編集中のファイルへそのまま取り込めます。コマンドの出力を作業メモに残したいときなどに役立つテクニックです。
viとシェルを行ったり来たりする手間が減ると、編集のテンポが途切れません。地味ながら、覚えておくと確実に効いてくる操作ですよ。
viとVimの違いも知っておこう¶
ここまでviとして解説してきましたが、多くのLinuxディストリビューションでは、viと入力すると実際にはVimというエディタが起動します。
VimはVi IMprovedの略で、viを改良した後継のエディタです。今回紹介した複数回のundoや画面分割は、Vimで強化された機能になります。
それぞれの関係を表にまとめました。
| エディタ | 特徴 |
|---|---|
| vi | UNIX由来の伝統的なエディタ。POSIXで標準エディタとして定義されている |
| Vim | viの拡張版で、多くのLinuxではviの実体。2024年にVim 9.1が公開されるなど開発が続いている |
| Neovim | Vimから派生したエディタ。モダンな開発環境を中心に人気がある |
注意したいのは、サーバーによっては機能を絞った最小構成のVim(vim-minimalなど)だけが入っている場合があることです。環境によって細かな挙動が変わることがあるため、まずは今回のような基本のコマンドを確実に覚えておくのが実務では安全ですよ。
自分の環境で何が起動しているのか気になる方は、viの起動画面を見てみましょう。VIM - Vi IMprovedという表示が出れば、実体はVimです。
viコマンドを使いこなすには¶
viコマンドを使いこなすには、コマンドを覚え、何回も練習する必要があります。私自身Linuxを始めた3か月くらいは、ろくにファイル編集もできませんでした。
しかし、何回も繰り返し行うことで徐々に慣れていきます。慣れたら、他に使えそうなコマンドを探し、自分の作業に取り入れていくことが大切です。
練習用のLinux環境がまだ無い方は、VirtualBoxでLinuxをインストールする手順を参考に、自分専用の環境を用意してみてください。壊しても作り直せる環境があると、思い切って練習できます。
また、viの操作はLPICなどのLinux系資格でも頻出の分野です。資格学習と並行して手を動かしたい方には、LPICのコマンドを実機で勉強する方法が参考になりますよ。
viをマスターすれば、作業時間がかなり短縮するので、ぜひマスターしましょう!
viコマンドのよくある疑問¶
最後に、viの効率化でつまずきやすいポイントをQ&A形式で解説します。同じ疑問を持っている方は、ぜひ参考にしてください。
一括置換で意図しない箇所まで変わってしまうのを防ぐには?¶
:%sでの一括置換は強力な分、短い文字列を指定すると思わぬ箇所まで一致します。たとえばtestを置換すると、test2という文字列の一部まで置換対象になってしまいます。
対策としては、確認付きのgcフラグを使うのが確実です。万が一失敗しても、uで置換前の状態に戻せることをあわせて覚えておきましょう。
cwとdwは何が違うの?¶
どちらも単語を対象にしたコマンドですが、実行後の状態が違います。dwは単語を削除してコマンドモードのままですが、cwは削除した後そのまま入力モードに切り替わります。
書き換えたいならcw、消すだけならdwと使い分けると、キー入力を最小限にできますよ。
矢印キーやマウスで操作してはだめ?¶
だめではありませんが、キーボードだけで操作を完結できる方が圧倒的に速いです。viのコマンドは、手をホームポジションから動かさない前提で設計されています。
また、接続先の環境によっては、矢印キーが期待通りに動かないこともあります。h・j・k・lベースの操作に慣れておけば、どの環境でも同じ速度で作業できます。
viの操作は資格試験でも出題される?¶
はい、viの基本操作はLPIC Level1の出題範囲に含まれています。今回紹介した置換やundoのようなコマンドも、学習しておいて損はありません。
資格学習を通じてLinuxの基礎を固めたい方は、LPICのおすすめ学習サイト5選もあわせてご覧ください。
まとめ¶
今回は、viで効率良くファイルを編集する5つの便利コマンドを解説しました。
単語を書き換えるcw、一括置換の:%s、取り消しのu、繰り返しの.、画面分割の:spの5つでしたね。どれも小さなコマンドですが、積み重なると作業時間に大きな差が生まれます。
まずは1つでも良いので、次のファイル編集から実際に使ってみてください。手が覚えてしまえば、viでの編集がむしろ楽しくなってきますよ。
Linuxをこれから体系的に学びたい方は、Linuxが基礎から学べる学習サイトInfraAcademyもぜひ活用してください。