ℹ️
このページの前提 すべてのコマンドは NORMAL モードで実行します。 Insertモードから抜けるには Esc または Ctrl-[ を押してください。

カーソル移動

Vimの移動コマンドは「どこに行くか」を精密に指定できます。 最初は hjkl から始め、慣れたら単語単位・行頭行末の移動へと広げましょう。

基本移動(hjkl)

矢印キーの代わりにホームポジションのまま移動できます。最初はぎこちなく感じますが、1週間もすれば自然になります。

キー動作
h左に1文字
j下に1行
k上に1行
l右に1文字
5j下に5行(数字+方向で複数行移動)

単語単位の移動

キー動作
w次の単語の先頭へ(word)
b前の単語の先頭へ(back)
e現在の単語の末尾へ(end)
W次の単語(空白区切り)の先頭へ
B前の単語(空白区切り)の先頭へ
ge前の単語の末尾へ

行内・ファイル全体の移動

キー動作
0行の先頭(列0)へ
^行の最初の非空白文字へ
$行末へ
ggファイルの先頭(1行目)へ
Gファイルの末尾へ
50G50行目へジャンプ
Ctrl-d半ページ下にスクロール
Ctrl-u半ページ上にスクロール
zz現在行を画面中央に表示
%対応する括弧・タグへジャンプ
💡
移動の黄金則 「数字+コマンド」で繰り返せます。3w で3単語先へ、10j で10行下へ。 行番号を使うなら :42 でコマンドラインから飛ぶのも便利です。

テキスト編集

Insertモードへの入り方は複数あります。どこから入力を始めるかによって使い分けることで、 余計なカーソル移動を省けます。

Insertモードへの切り替え

キー動作
iカーソルの前から入力(insert)
aカーソルの後から入力(append)
I行頭から入力
A行末から入力
o下に新しい行を作って入力
O上に新しい行を作って入力
s現在の文字を削除してInsertモードへ
S現在行全体を削除してInsertモードへ
cc行の内容を削除してInsertモードへ(Sと同じ)

削除・コピー・貼り付け

キー動作
xカーソル下の文字を1つ削除
Xカーソルの前の文字を削除(BackSpace相当)
dd現在行を削除(カットと同義)
3dd3行削除
yy現在行をヤンク(コピー)
3yy3行コピー
pカーソルの後に貼り付け
Pカーソルの前に貼り付け
dw1単語を削除
d$カーソルから行末まで削除
Dカーソルから行末まで削除(d$と同じ)

Undo・Redo

キー動作
u1つ元に戻す(Undo)
Ctrl-rやり直す(Redo)
U現在行に加えた変更をすべて元に戻す
.直前の操作を繰り返す(ドットコマンド)
💡
ドットコマンド . は魔法 dd で行を削除した後、別の行に移動して . を押すと再び削除できます。 繰り返し操作には必ず . を使いましょう。

検索

Vimの検索は正規表現に対応しており、コードや文章を素早く探せます。

キー動作
/pattern前方向で pattern を検索(Enterで実行)
?pattern後方向で検索
n次のマッチへ移動
N前のマッチへ移動
*カーソル下の単語を前方検索
#カーソル下の単語を後方検索
:noh検索ハイライトを消す
検索の例
-- NORMAL --
/function ← function という単語を前方検索
n ← 次のマッチへ
N ← 前のマッチへ戻る
* ← カーソル下の単語を即座に検索

置換(substitute)

Vimの置換は :s コマンドを使います。sed と同様の構文で、正規表現も使えます。

:%s コマンドによる一括置換の確認プロンプト
コマンド動作
:s/old/new/現在行の最初の oldnew に置換
:s/old/new/g現在行のすべての old を置換(g=global)
:%s/old/new/gファイル全体のすべてを置換
:%s/old/new/gc1つずつ確認しながら置換(c=confirm)
:5,10s/old/new/g5〜10行目の範囲で置換
:'<,'>s/old/new/gビジュアル選択範囲で置換
💡
確認オプション c が便利 :%s/foo/bar/gc で実行すると、1マッチごとに y/n/a/q と聞かれます。 a で残り全部置換、q で中断できます。

保存と終了

Vimの終了方法を知らずにパニックになるのは初心者あるあるです。落ち着いてコマンドモードで操作しましょう。

コマンド動作
:w保存(write)。終了しない
:w filename別名で保存
:q終了(変更がなければOK)
:q!変更を破棄して強制終了
:wq保存して終了
:wq!強制保存して終了
ZZ保存して終了(:wqと同じ、Normalモードで)
ZQ保存せずに終了(:q!と同じ)
:e!ファイルを最後に保存した状態に戻す
⚠️
終了できないときは :q! を打てば必ず終了できます。変更が失われますが、パニックになったときの脱出手段として覚えておきましょう。

ビジュアルモードでの選択・操作

ビジュアルモードでは範囲を目で確認しながら選択し、まとめて操作できます。

ビジュアルモードの種類

キーモード説明
v文字単位通常のビジュアル選択
V行単位行丸ごと選択(行単位で操作する場合に便利)
Ctrl-v矩形選択ブロック(長方形)で選択。複数行へのインデント等に便利

選択後の操作

キー動作
d選択範囲を削除
y選択範囲をコピー
c選択範囲を削除してInsertモードへ
>インデントを追加
<インデントを削除
~大文字・小文字を切り替え
u / U小文字 / 大文字に変換
:選択範囲にコマンドを実行(例: :'<,'>sort

テキストオブジェクト

Vimの最強の機能の一つです。「単語の中」「括弧の中」「タグの中」を一発で選択・編集できます。 動詞(c/d/y)+ a/i + 対象 という構文で使います。

a(around)は対象を囲む文字ごと含み、i(inner)は中身だけを対象にします。

コマンド動作
ciwカーソル下の単語を変更(Change Inner Word)
caw単語+前後の空白を変更
ci"ダブルクォート内を変更
ca"ダブルクォートごと変更
ci'シングルクォート内を変更
ci(丸括弧の中を変更
ca(丸括弧ごと変更
ci{波括弧の中を変更
ci[角括弧の中を変更
citHTMLタグの中を変更(tag)
dis文(センテンス)を削除(Delete Inner Sentence)
dip段落を削除(Delete Inner Paragraph)
yib括弧内をコピー(b = block = 丸括弧)
💡
テキストオブジェクトの覚え方 動詞 + i/a + 対象 の3ピースです。 d(delete)・c(change)・y(yank)と、 w(word)・"({ の組み合わせを まず覚えれば、あとは応用で理解できます。

マクロの基本

マクロはキー操作を記録して繰り返す仕組みです。 同じ編集を何十行にも適用したいときに絶大な威力を発揮します。

マクロの使い方

キー動作
qaレジスタ a にマクロの記録を開始
(操作)記録したい一連の操作を実行
q記録を終了
@aレジスタ a のマクロを実行
@@直前のマクロを再実行
10@aマクロを10回繰り返す

マクロの実例

例:各行末に ; を追加したい場合

マクロの録画と再生
qa ← レジスタ a に記録開始
A; ← 行末に移動して ; を挿入、Escで抜ける
j ← 次の行へ(次のマクロ実行の準備)
q ← 記録終了
---
99@a ← 残りの行にマクロを適用(多めの回数でOK)
ℹ️
レジスタは a〜z まで使える qaqbqc のように複数のマクロを同時に保持できます。 複雑な作業では複数のマクロを組み合わせることもできます。

実用的な操作フロー

コマンドを個別に覚えても、組み合わせ方がわからないと実践で使えません。よくある操作フローをまとめます。

フロー①:ある単語をすべて別の単語に置換する

単語の一括置換
1. 対象の単語にカーソルを置く
* ← その単語をハイライト検索
:%s//新しい単語/gc ← 検索パターン欄を空にすると直前の検索が使われる
y/n/a/q で1つずつ確認しながら置換

フロー②:特定のブロックをコピーして別の場所に挿入する

ブロックのコピー&ペースト
1. コピーしたいブロックの先頭行へ
V ← 行選択ビジュアルモードへ
5j ← 5行選択
y ← ヤンク(コピー)
2. 挿入したい場所へ移動
p ← 貼り付け

フロー③:関数の引数を素早く書き換える

引数の書き換え(テキストオブジェクト)
カーソルが func("old_value") の括弧内にある状態
ci" ← ダブルクォート内を削除してInsertモードへ
new_value ← 新しい値を入力
Esc ← Normalモードへ戻る

フロー④:複数行のインデントを調整する

複数行インデント
V ← 行選択ビジュアルモードへ
3j ← 4行選択
>> ← インデント追加(2回押す)
または
<< ← インデント削除
💡
まとめ:コマンドは「動詞+名詞」で覚える Vimのコマンドは d(削除)c(変更)y(コピー)という動詞と、 w(単語)$(行末)i"(クォート内)という名詞の組み合わせです。 動詞と名詞を個別に覚えれば、組み合わせで無数のコマンドが生まれます。