このページの前提
すべてのコマンドは 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 | ファイルの末尾へ |
| 50G | 50行目へジャンプ |
| 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 | 現在行を削除(カットと同義) |
| 3dd | 3行削除 |
| yy | 現在行をヤンク(コピー) |
| 3yy | 3行コピー |
| p | カーソルの後に貼り付け |
| P | カーソルの前に貼り付け |
| dw | 1単語を削除 |
| d$ | カーソルから行末まで削除 |
| D | カーソルから行末まで削除(d$と同じ) |
Undo・Redo
| キー | 動作 |
|---|---|
| u | 1つ元に戻す(Undo) |
| Ctrl-r | やり直す(Redo) |
| U | 現在行に加えた変更をすべて元に戻す |
| . | 直前の操作を繰り返す(ドットコマンド) |
ドットコマンド
. は魔法
dd で行を削除した後、別の行に移動して . を押すと再び削除できます。
繰り返し操作には必ず . を使いましょう。
検索
Vimの検索は正規表現に対応しており、コードや文章を素早く探せます。
| キー | 動作 |
|---|---|
| /pattern | 前方向で pattern を検索(Enterで実行) |
| ?pattern | 後方向で検索 |
| n | 次のマッチへ移動 |
| N | 前のマッチへ移動 |
| * | カーソル下の単語を前方検索 |
| # | カーソル下の単語を後方検索 |
| :noh | 検索ハイライトを消す |
-- NORMAL --
/function ← function という単語を前方検索
n ← 次のマッチへ
N ← 前のマッチへ戻る
* ← カーソル下の単語を即座に検索
/function ← function という単語を前方検索
n ← 次のマッチへ
N ← 前のマッチへ戻る
* ← カーソル下の単語を即座に検索
置換(substitute)
Vimの置換は :s コマンドを使います。sed と同様の構文で、正規表現も使えます。
| コマンド | 動作 |
|---|---|
| :s/old/new/ | 現在行の最初の old を new に置換 |
| :s/old/new/g | 現在行のすべての old を置換(g=global) |
| :%s/old/new/g | ファイル全体のすべてを置換 |
| :%s/old/new/gc | 1つずつ確認しながら置換(c=confirm) |
| :5,10s/old/new/g | 5〜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[ | 角括弧の中を変更 |
| cit | HTMLタグの中を変更(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; ← 行末に移動して ; を挿入、Escで抜ける
j ← 次の行へ(次のマクロ実行の準備)
q ← 記録終了
---
99@a ← 残りの行にマクロを適用(多めの回数でOK)
レジスタは a〜z まで使える
qa、qb、qc のように複数のマクロを同時に保持できます。
複雑な作業では複数のマクロを組み合わせることもできます。
実用的な操作フロー
コマンドを個別に覚えても、組み合わせ方がわからないと実践で使えません。よくある操作フローをまとめます。
フロー①:ある単語をすべて別の単語に置換する
1. 対象の単語にカーソルを置く
* ← その単語をハイライト検索
:%s//新しい単語/gc ← 検索パターン欄を空にすると直前の検索が使われる
y/n/a/q で1つずつ確認しながら置換
* ← その単語をハイライト検索
:%s//新しい単語/gc ← 検索パターン欄を空にすると直前の検索が使われる
y/n/a/q で1つずつ確認しながら置換
フロー②:特定のブロックをコピーして別の場所に挿入する
1. コピーしたいブロックの先頭行へ
V ← 行選択ビジュアルモードへ
5j ← 5行選択
y ← ヤンク(コピー)
2. 挿入したい場所へ移動
p ← 貼り付け
V ← 行選択ビジュアルモードへ
5j ← 5行選択
y ← ヤンク(コピー)
2. 挿入したい場所へ移動
p ← 貼り付け
フロー③:関数の引数を素早く書き換える
カーソルが func("old_value") の括弧内にある状態
ci" ← ダブルクォート内を削除してInsertモードへ
new_value ← 新しい値を入力
Esc ← Normalモードへ戻る
ci" ← ダブルクォート内を削除してInsertモードへ
new_value ← 新しい値を入力
Esc ← Normalモードへ戻る
フロー④:複数行のインデントを調整する
V ← 行選択ビジュアルモードへ
3j ← 4行選択
>> ← インデント追加(2回押す)
または
<< ← インデント削除
3j ← 4行選択
>> ← インデント追加(2回押す)
または
<< ← インデント削除
まとめ:コマンドは「動詞+名詞」で覚える
Vimのコマンドは
d(削除)c(変更)y(コピー)という動詞と、
w(単語)$(行末)i"(クォート内)という名詞の組み合わせです。
動詞と名詞を個別に覚えれば、組み合わせで無数のコマンドが生まれます。