【vim】基本操作の使い方|終了方法(:wqと:q!)・モードの違い・dd/yy/pの罠

【vim】基本操作の使い方|終了方法(:wqと:q!)・モードの違い・dd/yy/pの罠 Linux

サーバーの設定ファイルを直したいとき、多くのLinux環境で最初から使えるエディタがvimです。しかし初めて開くと、文字を打とうとしても入力できない「まるで壊れているような画面」に戸惑い、そのまま抜け出せなくなる——これはほぼ全員が通る通過儀礼です。実はvimには「見るためのモード」と「入力するためのモード」がはっきり分かれているだけで、その仕組みさえ分かれば怖くありません。

この記事では、実機のLinux(WSLのDebian、Vim 8.2)で実際にファイルを編集しながら、抜け出す方法モードの切り替え削除やコピー貼り付け検索置換といった、最低限これだけ覚えれば困らない操作を整理します。SSHでサーバーに入ったときの設定ファイル編集に、そのまま役立ちます。

先に結論

  • vimにはノーマルモード(操作用)挿入モード(入力用)があります。
  • 入力するにはiを押す。ノーマルモードに戻るにはEscです。
  • 保存して終了は:wq変更を破棄して終了は:q!です。
  • 1行削除はdd、1行コピーはyy、貼り付けはpです。
  • 元に戻すのはu(アンドゥ)。何度でも遡れます。
  • 検索置換は:%s/元/新/gという書式です。

SSHでサーバーに入る方法はssh-keygenで公開鍵認証を設定する方法、設定ファイルの権限はchmodとパーミッション、置換をコマンド一発で行うならsedコマンドもあわせて参考になります。

スポンサーリンク

【最重要】抜け出せない問題と終了方法

vimで一番困るのが「終了できない」ことです。まず、保存して終了する方法保存せず終了する方法の2つを押さえます。どちらもノーマルモードで:(コロン)から始めるコマンドです。

vimを開いて終了する
# ファイルを開く
vim ファイル名.txt

# 保存して終了(変更を確定する)
:wq

# 保存せずに終了(変更を捨てる)
:q!

# 変更していなければ :q だけでも終了できる
:q
:wqと:q!の違いを実証

実機で、4行のテキストファイルに対して1行削除してから:wqすると、ファイルには削除後の3行が保存されました。一方、同じ1行削除をしてから:q!すると、ファイルの中身は削除前の4行のままで変わりませんでした。つまり:wqは「write(書き込み)してquit(終了)」、:q!は「変更を無視してquit」という意味です。よくある事故は、間違って変更してしまったのに:wqで保存してしまうことなので、「編集を間違えたかも」と思ったら:q!で抜けて、開き直すのが一番安全です。なお、文字が打てないのは、後述する「ノーマルモード」のままキーボードショートカットとして解釈されているためで、壊れているわけではありません。

2つのモード(ノーマルと挿入)

vimを理解する鍵は、「今どちらのモードにいるか」を常に意識することです。開いた直後はノーマルモード(文字は入力されず、各キーが「移動」や「削除」などの命令として働く)です。文字を入力するには挿入モードに切り替えます。

モードの切り替え
# ノーマルモード → 挿入モード(文字が打てるようになる)
i          # カーソルの位置から挿入
a          # カーソルの1つ後ろから挿入
A          # 行の末尾から挿入
o          # 下に新しい行を作って挿入

# 挿入モード → ノーマルモードに戻る
Esc        # これだけ覚えれば十分

# 保存や削除などの「コマンド」はノーマルモードでのみ効く

実機で確認したところ、ノーマルモードでo(下に新しい行を作って挿入モードに入る)を押してから文字を打つと、カーソル行の下に新しい行として文字が挿入されました。同様にA(行末から挿入)で行末に文字を追記できることも確認しています。「今どっちのモードか分からなくなったら、とにかくEscを押してノーマルモードに戻る」——これだけ覚えておけば、パニックになる場面はほぼ無くなります。ノーマルモードに戻ってから、:wq:q!で終了する、という流れです。

削除・コピー・貼り付け(dd / yy / p)

ノーマルモードでの基本操作です。ddで1行削除yyで1行コピーpで貼り付けします。数字を前に付けると、その行数分をまとめて操作できます。

dd / yy / p の基本
# 1行削除(delete line)
dd

# 3行削除(数字を前に付ける)
3dd

# 1行コピー(yank line)
yy

# 貼り付け(カーソルの下に)
p

# 単語だけ削除する場合
dw    # カーソル位置から単語の終わりまで削除
x     # カーソル位置の1文字だけ削除
ddで削除・yy+pでコピー(実証)

実機で、4行のファイルの1行目にカーソルを合わせてddを実行すると、1行目が消えて3行になりました。逆にyy(コピー)してからp(貼り付け)すると、同じ行が複製されて5行になることも確認しています。数字を前置きする2ddでは2行まとめて削除され、dw(単語削除)ではカーソルのある単語だけが消え、xでは1文字だけが消えました。「行ごと」ならdd、「単語だけ」ならdw、「1文字だけ」ならxと使い分けます。ddで消した行は自動的にyyと同じ「レジスタ」に入るため、削除した行をすぐ別の場所にpで貼り付ける、つまり「切り取り&移動」としても使えます。

元に戻す(u)と検索・置換

操作を間違えてもu(アンドゥ)で元に戻せます。何度も押せば、さらに前の状態まで遡れます。検索は/、ファイル全体の一括置換は:%s/元/新/gという書式です。

undo と検索置換
# 直前の操作を取り消す(何度でも押せる)
u

# 文字列を検索(下方向へ)。n で次の候補へ
/探したい文字列
n            # 次の一致箇所へジャンプ

# ファイル全体を対象に置換(sed の書式に近い)
:%s/旧文字列/新文字列/g

# 確認しながら1件ずつ置換したいときは c を付ける
:%s/旧文字列/新文字列/gc

実機でも、ddで1行削除した直後にuを実行すると、削除した行が復活して元の4行に戻ることを確認しました。間違った操作をしてもuで取り消せるので、迷ったらまず試してみて問題ありません。検索置換の:%s/line/LINE/gを実行すると、ファイル内のすべての「line」が「LINE」に置き換わりました%はファイル全体、gは行内すべてを意味します)。sedと似た書式なので、両方使えると心強いです。また/文字列で検索してカーソルをその行へ移動させ、そこからdddwを使う、という組み合わせも実機で確認できました(該当行にジャンプしてから編集する定番の流れです)。

設定ファイル編集での実践例

SSHでサーバーに入って設定ファイルを直す、というvimが最も活躍する場面の一連の流れです。

実践例(設定ファイルの1行を直す)
# 設定ファイルを開く
vim /etc/example.conf

# 1. / で対象の行を検索
/old_setting

# 2. i で挿入モードに入り、内容を修正
i

# 3. Esc でノーマルモードに戻る
Esc

# 4. 保存して終了
:wq

# もし操作ミスに気づいたら、保存前なら u で戻すか
# :q! で保存せず抜けて、最初からやり直す

この「/で探す → iで直す → Escで戻る → :wqで保存」という一連の流れさえ体で覚えれば、SSH越しの設定ファイル編集はもう怖くありません。大きな変更をするときは、scpcpで事前にバックアップを取っておくと、より安心です。

主なコマンド一覧

vimの最低限のコマンドをまとめます。

キー 働き
i / a / o 挿入モードに入る(位置違い)
Esc ノーマルモードに戻る
:wq / :q! 保存して終了 / 保存せず終了
dd / yy / p 行削除 / 行コピー / 貼り付け
dw / x 単語削除 / 1文字削除
u 元に戻す(アンドゥ)
/文字列 / :%s/旧/新/g 検索 / 全置換

よくある失敗

文字が打てず画面が壊れたと思う

ノーマルモードのままです。iで挿入モードに入ってから入力します。

抜け出せなくなる

Escでノーマルモードに戻り、:q!(保存せず終了)または:wq(保存して終了)を打ちます。

間違えて保存してしまう

変更に自信がないときは:wqではなく:q!で抜け、開き直します。保存前ならuでも戻せます。

ddとxを混同する

ddは行ごと、xは1文字だけです。単語単位はdwです。

:%sのgを付け忘れる

gが無いと各行の最初の一致だけ置換されます。行内すべて置換するならgが必要です。

よくある質問

Qvimから抜け出せません。
AまずEscを押してノーマルモードに戻ります。そのうえで、変更を保存したいなら:wq、変更を保存せずに抜けたいなら:q!と入力してEnterを押してください。変更していなければ:qだけでも終了できます。
Q:wqと:q!の違いは何ですか?
A:wqは変更を保存してから終了し、:q!は変更を保存せずに終了します。実機でも、1行削除したあと:wqで保存すると削除後の内容がファイルに残り、:q!で抜けると元の内容のまま変わらないことを確認しています。編集ミスに気づいたときは:q!で抜けてやり直すのが安全です。
Q文字を入力しようとしても打てません。
Avimを開いた直後は「ノーマルモード」で、キーは移動や削除などの命令として扱われるため、そのままでは文字入力になりません。iキーを押して「挿入モード」に切り替えてから入力してください。入力が終わったらEscでノーマルモードに戻ります。
Q1行削除・1行コピーはどうやりますか?
A削除はdd、コピーはyy、貼り付けはpです(すべてノーマルモードで使います)。数字を前に付けると行数を指定できます(例: 3ddで3行削除)。実機でも、ddで行が消え、yyしてからpすると行が複製されることを確認しています。
Qファイル内の文字列を一括で置換するには?
A:%s/旧文字列/新文字列/gと入力します。%はファイル全体、gは各行のすべての一致を対象にする指定です。実機でも、この書式でファイル内のすべての一致箇所が正しく置換されることを確認しています。1件ずつ確認しながら置換したい場合は末尾にcを付けます。

まとめ

  • vimにはノーマルモード(操作)挿入モード(入力)があります。
  • 入力はi、戻るのはEsc。これだけで迷わなくなります。
  • 終了は:wq(保存):q!(破棄)。不安なら:q!が安全です。
  • 削除はdd、コピーはyy、貼り付けはp、元に戻すはu
  • 置換は:%s/旧/新/gで一括処理できます。

vimは、最初こそ戸惑いますが、「モードの切り替え」と「終了の2択」さえ理解すれば一気に怖くなくなります。SSHでサーバーに入ったときの設定ファイル編集は、この記事の内容だけで十分こなせます。慣れてきたら、sedgrepと組み合わせて、さらに効率よくファイルを扱ってみてください。