どのLinuxサーバーにもほぼ必ずある vi。未経験でも「開く・保存・抜ける」の往復と最小の移動・編集ができれば、緊急のサーバー作業で困りません。最重要のモード概念から、置換や貼り付け崩れ対策などの実務のコツ、最後に1画面チートシートまでを、コピペで動く形でまとめました。

01なぜviを覚えるのか — どのサーバーにもある「保険」

サーバーの中でちょっとした設定ファイルを直す。ログを確認する。そんな作業のたびに、あなたは何かしらのテキストエディタを開くことになります。そして Linux サーバーでほぼ確実に入っているエディタが vi です。使い慣れた nano が入っていない最小構成のサーバーやコンテナは珍しくありません。そういう場面で「viしか無い」となったとき、最低限が使えるかどうかで作業効率と安心感がまるで変わります。

踏み台経由での本番作業をどう安全に設計するかは、踏み台・特権アクセスの設計の記事で解説しています。本記事はその「入った先」で困らないための最小サバイバルに絞ります。

現場のコツ:viの全機能を覚える必要はまったくありません。「開く・書く・保存して抜ける」の往復と、少しの移動・編集ができれば、緊急作業の9割は回せます。この記事はその最小セットだけを扱います。

02モードの概念こそ最重要 — ここが「抜けられない」の正体

viが「難しい」「抜けられない」と言われる原因の9割は、このモードという考え方にあります。逆に言えば、ここさえ腹落ちすれば、あとのコマンドは丸暗記でなんとかなります。viには大きく3つのモードがあり、キー操作の意味がモードごとに変わります。

viの3モードと行き来(迷ったら Esc でノーマルへ) ノーマルモード 移動・削除・コピー・貼り付け 起動直後・迷ったらここ 挿入モード 文字を入力できる 画面下に -- INSERT -- コマンドラインモード :w 保存 / :q 終了 / 検索 実行するとノーマルに戻る i / a / o Esc : または / Enter / Esc
図:viには3つのモードがある。文字入力は挿入モード、保存や終了はコマンドラインモード。どこで迷っても Esc を押せばノーマルモードに戻れる。
初見の混乱の正体はこれです。起動直後はノーマルモードなので、いきなり文章を打っても入力されず、各キーがコマンドとして解釈されて画面がおかしくなります。「まず i を押してから入力する」と覚えてください。
現場のコツ:どのモードで迷子になっても、まず Esc を2〜3回。これで必ずノーマルモードに戻れます。ノーマルが全ての起点で、そこから挿入(i)にもコマンドライン(:)にも行けます。この一本道だけ体に入れておけば事故りません。

03開く・保存・抜ける — “抜けられない”をここで卒業

まずは最頻出の往復、「開いて・少し書いて・保存して抜ける」を通しで覚えます。ここだけで緊急作業の大半は足ります。

# ファイルを開く(無ければ新規作成される)
vi memo.txt

# 特定の行番号から開く(例:40行目付近を直したい)
vi +40 /etc/nginx/nginx.conf

開いたらノーマルモードです。文字を入力するには挿入モードへ入ります。目的で使い分けます。

入力が終わったら Esc でノーマルモードに戻り、コマンドラインモードで保存・終了します。

:w        保存する(write。まだ開いたまま)
:q        終了する(quit。変更が無い時だけ抜けられる)
:wq       保存して終了(実務で一番使う)
ZZ        保存して終了(コロン不要のショートカット。Zを2回)
:q!       変更を破棄して強制終了(保存せず逃げる)
:x        変更があれば保存して終了(:wq とほぼ同じ)
現場のコツ:この記事で1つだけ暗記するなら :wq(保存して終了)と :q!(保存せず逃げる)の2つです。「うっかり開いて抜けられない」は、Esc:q! → Enter で100%解決します。

04ユースケース:移動 — 目的の場所へ最短でたどり着く

設定ファイルの「あの行」だけ直したい、という場面がほとんどです。矢印キーでも動けますが、ノーマルモードの移動コマンドを少し覚えると、長いファイルでも一瞬で目的地に着けます。

h j k l   左・下・上・右(矢印キーの代わり。h=左, l=右)
w  /  b   単語ごとに前へ / 後ろへ
0  /  $   行の先頭 / 行の末尾へ
gg /  G   ファイルの先頭 / 末尾へジャンプ
:120      120行目へジャンプ(コロン+行番号)
/error    「error」を前方検索(Enterで実行)
n  /  N   次の検索ヒットへ / 前の検索ヒットへ
現場のコツ:h j k l がどうしても慣れなければ、最初は矢印キーで問題ありません。ただ :行番号/検索 の2つだけは早めに手に馴染ませると、長い設定ファイルの編集が段違いに速くなります。

05ユースケース:編集 — 削除・コピー・やり直し

移動できたら、次は削除・コピー・貼り付け・やり直しです。すべてノーマルモードで行います。

x         カーソル上の1文字を削除
dd        1行まるごと削除(切り取りも兼ねる)
yy        1行コピー(yank)
p         カーソルの後(下の行)に貼り付け
u         直前の操作を取り消す(undo)
Ctrl-r    取り消しをやり直す(redo)
cw        単語を消してそのまま挿入モードへ(change word)
o  /  O   下 / 上に新しい行を作って挿入モードへ
.         直前の編集操作をもう一度繰り返す

viの効率は「数値プレフィックス」で跳ね上がります。コマンドの前に回数を打つと、その回数だけ実行されます。

3dd       3行まとめて削除
5j        5行下へ移動
2yy       2行コピー
d$        カーソルから行末まで削除
現場のコツ:.(ドット)は「直前の編集の繰り返し」です。例えば dd で1行消したあと、別の行で . を押せばそこも1行消えます。同じ修正を何箇所もするとき、これを知っているだけで作業時間が数分の一になります。

06ユースケース:置換と実務のハマりどころ

ここからは実務で本当に効く操作です。とくに一括置換貼り付け崩れ権限不足で保存できないの3つは、知らないと確実に一度は詰まります。

コマンドラインモードでの一括置換は、設定ファイルの値をまとめて書き換えるときの主力です。

:%s/old/new/g      ファイル全体で old を new に置換(g=行内すべて)
:%s/old/new/gc     置換のたびに y/n で確認しながら実行
:10,20s/old/new/g  10〜20行目だけを対象に置換
:set number        行番号を表示する
:set nonumber      行番号を消す

次は「ターミナルにコピペしたら、インデントが階段状にズレて崩れる」問題です。これはviの自動インデントが、貼り付けた各行にもインデントを足してしまうために起きます。

# 貼り付ける「前」にノーマルモードで実行しておく
:set paste
# → 挿入モード(i)に入って貼り付ける。崩れなくなる
# 貼り付けが終わったら元に戻す
:set nopaste
現場のコツ:コピペで整形が崩れたら、まず :set paste を疑ってください。貼り付け前にこれを打ってから i で挿入モードに入り、貼り付け、終わったら :set nopaste に戻す。この一手間で「なぜか階段状にズレる」から解放されます。

最後は「権限のないファイルを直そうとしたら保存できなかった」パターンです。sudo を付けずに vi /etc/hosts を開いてしまい、:wE212read-only と怒られる、あの場面です。

# 開き直さずに、その場で sudo 権限で保存する裏技
:w !sudo tee %
# → パスワードを聞かれたら入力。保存後 :q! で抜ける
:w !sudo tee % は「今のバッファの内容を sudo tee に流し込み、%(=今開いているファイル名)へ書き込む」という意味です。開き直す手間が省けます。ただし本来は最初から sudo vi で開くのが素直です。編集対象や権限設計そのものの考え方は踏み台・特権アクセスの設計もあわせてどうぞ。

07詰まったら — 諦め方・vi と vim の違い・最小の .vimrc

どうにもならなくなったら、潔く諦めるのも正解です。Esc を数回 → :q! で、変更を捨てて安全に抜けられます。ファイルは編集前のまま残るので、落ち着いてやり直せます。焦って変な操作を重ねるより、一度抜けるほうが安全です。

vi と vim の違い:vim は「Vi IMproved(viの改良版)」で、vi の上位互換です。多くの Linux では vi と打つと実体は vim が起動します。本記事のコマンドはどちらでもそのまま使えます。色付き表示(シンタックスハイライト)や無制限のundoなどは vim の機能です。

毎回同じ設定を打つのが面倒なら、ホームディレクトリに ~/.vimrc を置くと起動時に読み込まれます。まずは負担の少ない最小構成から始めるのがおすすめです。

" ~/.vimrc の最小例(" で始まる行はコメント)
set number          " 行番号を表示
syntax on           " シンタックスハイライト
set tabstop=4       " タブ幅を4に
set expandtab       " タブをスペースに展開
set hlsearch        " 検索ヒットを強調
set ruler           " 右下に行・桁番号を表示
共有サーバーの共通ユーザーで ~/.vimrc を勝手に書き換えると、他メンバーの操作感が変わってしまいます。個人環境や自分専用のユーザーで試すのが無難です。Linux全般の実務コマンドはLinux実践コマンドリファレンスにまとめています。

vi は、AWS CLI や Linux コマンドと並んで「サーバーに入って手を動かす」ための土台です。EMWは派手なテクニックより、こうした基礎を一つずつ確実に積む姿勢を大切にしています。ネットワークやクラウドの土台から学び直したい方はクラウドエンジニアの基礎(TCP/IP)もどうぞ。未経験からでも歓迎です。採用情報・カジュアル面談はこちらから気軽にご連絡ください。

081画面チートシート — 迷ったらここだけ見る

緊急時にこの1枚だけ見れば往復できる、という早見表です。左からカテゴリ・コマンド・意味の順。まずは太字にしたい気持ちを抑えて、上から「モード」と「保存/終了」だけ体に入れてください。

カテゴリコマンド意味・使いどころ
モードi / a / o挿入モードへ(前 / 後 / 下に新規行)。まず i
モードEscノーマルモードに戻る。迷ったら連打
モード: (コロン)コマンドラインモードへ(保存・終了・置換)
保存/終了:wq / ZZ保存して終了(実務で最頻出)
保存/終了:w保存だけ(開いたまま)
保存/終了:q!変更を捨てて強制終了(抜けられない時の切り札)
移動gg / Gファイル先頭 / 末尾へ
移動:120120行目へジャンプ
移動/語 → n前方検索 → 次のヒットへ
移動0 / $行頭 / 行末へ
編集x / dd1文字削除 / 1行削除(切り取り)
編集yy / p1行コピー / 貼り付け
編集u / Ctrl-r取り消し / やり直し
編集cw / .単語を打ち直す / 直前の編集を繰り返す
編集3dd数値プレフィックス(例:3行削除)
置換:%s/old/new/gファイル全体を一括置換
実務:set paste貼り付け時のインデント崩れを防ぐ
実務:w !sudo tee %権限不足でも sudo でその場保存
もっと幅広いシリーズも参考にどうぞ:Linux実践コマンドリファレンス踏み台・特権アクセスの設計クラウドエンジニアの基礎(TCP/IP)

09よくある質問(FAQ)

保存して終了するには?

ノーマルモード(起動直後の状態。迷ったら Esc を押す)で :wq と入力して Enter です。キー1発なら ZZ(大文字Z 2回)でも同じく「保存して終了」になります。

間違って開いてしまい、抜けられません。どうすれば?

まず Esc を2〜3回押してノーマルモードに戻り、変更を保存せず捨ててよいなら :q! と入力して Enter です。これで必ず抜けられます。:q! は「変更を破棄して強制終了」で、ファイルは元のまま残ります。

入力したはずの文字が反映されず、勝手にコマンドが動きます。

ノーマルモードのままキーを打っているためです。文字を入力するには先に i を押して挿入モードに入ります。画面左下に -- INSERT -- と出れば入力できる状態です。入力が終わったら Esc でノーマルに戻します。

vi と vim はどちらを使えばいいですか?

実務ではどちらでも構いません。多くの環境で vi と打つと中身は vim(vi の上位互換)が起動します。本記事のコマンドは vi 相当の最小セットなので、素の vi でも vim でもそのまま通用します。

viやLinux、AWSの「サーバーに入って手を動かす基礎」を、実務の中で一つずつ積み上げたい方へ。EMW(札幌)は未経験・駆け出しの方の伴走も歓迎しています。カジュアル面談から、あなたの現在地に合わせてお話しします。

相談する
← ブログ一覧へ戻る