モードを持つ理由(哲学)

普通のテキストエディタは「常に入力モード」です。キーボードを押すと文字が入力され、 特殊な操作(コピーや移動)は CtrlAlt との組み合わせで行います。 しかし Vi は全く異なるアプローチを取りました。

Vi の設計者 Bill Joy が直面した問題は、カーソルキーのないテキスト端末 でした。 1976年当時、多くの端末は文字を受け付けるだけの単純なデバイスです。 そこで生まれたのが「モード」という概念—— 文字を入力するための状態と、コマンドを実行するための状態を明確に分けることです。

この設計は現代においても有効です。テキスト編集には2種類の操作があります。

普通のエディタでは「テキストを操作する」ために修飾キーが必要ですが、 Vi では専用のモードに切り替えることで、修飾キーなしにホームポジションのまま高速な操作が可能になります。 これが「Vim のキーバインドは最初難しいが、習得後は最速」と言われる理由です。

💡
モードは「ギア」と考えよう 車のギアと同じです。街中を走るときと高速道路を走るときでギアを変えるように、 テキストを書くときと操作するときでモードを切り替えます。 最初は面倒に感じますが、慣れると自然にモードを切り替えられるようになります。

Normal モード

NORMAL

Neovim を起動したときのデフォルトのモードです。 「Normal」という名前が示す通り、これが「普通」の状態です。 多くの初心者は「テキストを入力する状態が普通」と思いがちですが、 Vim では操作・移動のための Normal モードが「基本」です。

Normal モードでは、キーボードのほぼすべてのキーがコマンドとして機能します。 hjkl でカーソル移動、d で削除、 y でコピー(yank)、p でペーストといった具合です。

Normal モードの主要キー

キー 動作
h j k l 左・下・上・右 に移動
w / b 次の単語の先頭 / 前の単語の先頭 へ移動
0 / $ 行頭 / 行末 へ移動
gg / G ファイルの先頭 / 末尾 へ移動
dd 現在行を削除(カット)
yy 現在行をコピー(yank)
p / P カーソルの後ろ / 前 にペースト
u アンドゥ(元に戻す)
Ctrl+r リドゥ(やり直し)
/ 検索を開始(前方検索)
n / N 次の検索結果 / 前の検索結果 へ移動

Insert モード

NVIMのInsertモードでMarkdownを編集している様子

INSERT

テキストを入力するためのモードです。他のエディタと同様の感覚で文字を入力できます。 画面下部に -- INSERT -- と表示されます。

Insert モードへの入り方(Normal モードから)

キー 動作
i カーソルのから Insert モードを開始
a カーソルの後ろから Insert モードを開始(append)
I 行頭(最初の非空白文字)から Insert モードを開始
A 行末から Insert モードを開始
o 現在行のに新しい行を開いて Insert モードを開始
O 現在行のに新しい行を開いて Insert モードを開始
s カーソル下の文字を削除して Insert モードを開始
S 現在行を削除して Insert モードを開始
c + 動作 指定範囲を削除して Insert モードを開始(change)
🎯
i だけ覚えれば最初は OK 最初は i で Insert モードに入り、Esc で Normal モードに戻る—— この往復だけで十分です。oAI は慣れてから少しずつ使い始めましょう。

Visual モード

VISUAL

テキストを選択するためのモードです。他のエディタでマウスドラッグで選択するのと同じことを、 キーボードだけで行えます。選択後は削除・コピー・置換などのコマンドを適用できます。

Visual モードの種類

キー モード 動作
v Visual(文字単位) 文字単位で選択。hjkl で範囲を広げる
V Visual Line(行単位) 行全体を選択。上下移動で複数行を選択
Ctrl+v Visual Block(矩形) 矩形(長方形)範囲で選択。複数行の同じ列を一括編集できる

Visual モードで使える主要コマンド

キー 動作
d / x 選択範囲を削除
y 選択範囲をコピー(yank)
c 選択範囲を削除して Insert モードへ
> / < 選択範囲をインデント / アンインデント
~ 大文字・小文字を切り替え
u / U 小文字に変換 / 大文字に変換

Command-line モード

COMMAND

画面下部にコマンドラインが表示されるモードです。保存・終了・検索・置換・設定変更 など、 強力なコマンドをテキストで入力して実行します。

Command-line モードへの入り方

キー 動作
: Ex コマンドを入力(:w, :q, :s など)
/ 前方検索を開始
? 後方検索を開始
! 外部シェルコマンドを実行(例::!ls

よく使う Ex コマンド

コマンド 説明
:w ファイルを保存(write)
:q 終了(変更があれば警告)
:wq / :x 保存して終了
:q! 強制終了(変更を破棄)
:e ファイル名 指定ファイルを開く(edit)
:set number 行番号を表示
:%s/old/new/g ファイル全体で old を new に置換
:split / :vsplit 水平 / 垂直 にウィンドウを分割

Replace モード

REPLACE

既存のテキストを上書きするモードです。他のエディタの Insert キーを押した状態に相当します。 入力した文字が既存の文字を置き換えていきます。

Replace モードへの入り方

キー 動作
R Replace モードに入る(複数文字を連続置換)
r 1文字だけ置換して Normal モードに戻る(Replace モードではない)

モード遷移図

各モード間の遷移関係を確認しましょう。どこからでも Esc で Normal モードに戻れます。

モード遷移図

                         ┌─────────────────────────────────┐
                         │                                 │
              i, a, o, s │                                 │ Esc
              I, A, O, S │    ┌──────────────────┐        │
              c{motion}  │    │                  │        │
                         ▼    │   INSERT MODE    │◄───────┤
                  ┌──────────►│  -- INSERT --    │        │
                  │           └──────────────────┘        │
                  │                                       │
   ┌──────────────┴────────────────────────────────┐      │
   │                                               │      │
   │             NORMAL MODE                       │      │
   │           (default / home)                    │      │
   │                                               │      │
   └────────────┬──────────┬──────────┬────────────┘      │
                │          │          │                    │
             v, V,       :, /, ?    R                   Esc
            Ctrl+v          │        │                    │
                │           │        ▼                    │
                ▼           │  ┌──────────────────┐       │
   ┌──────────────────┐     │  │                  │       │
   │                  │     │  │  REPLACE MODE    │───────┘
   │   VISUAL MODE    │     │  │  -- REPLACE --   │
   │  -- VISUAL --    │     │  └──────────────────┘
   └─────────┬────────┘     │
             │              ▼
           Esc    ┌──────────────────┐
             │    │                  │
             └───►│  COMMAND MODE    │
                  │  : / ? !         │
                  └──────────────────┘

よくある間違い

間違い1: Insert モードに入りっぱなしになる

最もよくある問題です。コマンドを打とうとして文字が入力されてしまう——これは Insert モードのままだからです。 何かおかしいと思ったら、まず Esc を押すのが鉄則です。

⌨️
Esc キーは常に「安全な場所」 Neovim ではどのモードにいても、Esc を押せば Normal モードに戻ります(Command モードも含む)。 迷子になったと感じたら Esc を2〜3回押してください。それが Normal モードへの帰り道です。

間違い2: hjkl の代わりに矢印キーを使ってしまう

矢印キーでも移動はできますが、それでは Vim の恩恵が半減します。 hjkl に慣れるために、 最初の1週間は意識的に矢印キーを封印してみましょう。 苦しいですが、その先に速度があります。

間違い3: モードを確認しないまま操作する

現在のモードは画面左下に表示されています。 -- INSERT ---- VISUAL -- など、常に現在のモードを確認する習慣をつけましょう。 何も表示されていなければ Normal モードです。

間違い4: :q! でパニック終了してしまう

混乱して :q! を実行し、せっかく書いた内容を失ってしまう人がいます。 まず Esc で Normal モードに戻り、:u でアンドゥ、:w で保存という順番を意識しましょう。

⚠️
Esc キーの重要性:これだけ覚えれば最低限生き残れる Neovim で「身動きが取れない」と感じたとき、Esc:q! で強制終了できます。 最悪の場合でもこれでターミナルに戻れます。パニックにならないでください。 保存する場合は Esc:wq です。この2つを体に刻んでください。

間違い5: モードを「切り替えるもの」と捉えすぎる

上級者は無意識にモードを切り替えています。 「今 Normal モードで何かコマンドを実行する」という意識ではなく、 「移動する → (自動的に Normal)」「書く → (自動的に Insert)」という感覚になってきます。 焦らず、繰り返し練習することで自然に身につきます。