Vimモード入門

こんにちは。 ゴリラ.vimを運営しているゴリラです。

vimを初めて半年過ぎましたが、いまだにvimの底が見えていないのでvimは沼ではなくブラックホールであることに気付きました。 道のりは遠いですが、楽しみながら旅していこうと思います。

さて、vimを初めて触る方は最初にモードがあることに戸惑う方が多くいるかと思います。 本記事は次のことについて触れていきます。

  • モードによる恩恵は何か
  • モード一覧
  • モードごとにできること

この記事を読み終わるころにはきっとvimはなぜモードがあるのかを理解できると思います。 理解できなかったら、ぼくが面と向かって3時間語りますのでご連絡ください。

モードによる恩恵は何か

テキストエディタはモードレスが一般的かと思います。 ではvimはなぜモードがあるのでしょうか?

それは「操作性・機能性」の幅が広がるからとぼくは考えています。

Windowsのメモ帳ではA~Z0~9/@といった記号や文字はそのまま入力でき、Ctrl+Cで文字列コピー、Ctrl+Sでファイル保存を行います。

対してvimでは入力モードでは文字列の入力、ノーマルモードではh,j,k,lでカーソル移動、yで文字列ヤンク1dwで単語の削除を行います。 モードがあることより同じキーがまったく異なる動きをします。

そう、これがモードがもたらす恩恵です。

モード一覧

vimでは以下のモードがあり、それぞれのモードできることは大まか次の表になります。

モード機能
ノーマルモードカーソル移動、ヤンク、プット2、削除、など
入力モード文字入力、プットなど
ビジュアルモード範囲選択、選択範囲のヤンク、削除など
コマンドラインモード変更の保存、vim終了、文字列置換など

他にオペレーター待機モード、端末ジョブモード、選択モードがありますが、 こちらに関しては別の機会に紹介します。

モードの切り替え方

vimでは基本的にモードを切り替えながら編集します。 次がモードの移行方法です。

現在のモード移行先モードキー
ノーマル入力iIaAsS
ノーマルコマンドライン:
ノーマルビジュアルvVctr-v
入力ノーマルescctrl-c
コマンドラインノーマルescctrl-c
ビジュアルノーマルescctrl-c

モード移行キーがいくつかありますが、違いについてはノーマルモードで説明します。

モードごとにできること

それぞれのモードできることを一部ピックアップして紹介します。

ノーマルモード

コマンド操作
hカーソルを左に移動
jカーソルを下に移動
kカーソルを上に移動
lカーソルを右に移動
yy行ヤンク
Y行ヤンク
dd行削除
D現在のカーソルから行末まで削除
pカーソルの後にプット
Pカーソルの前にプット
c削除して入力モードに移行
C現在のカーソルから後ろをすべて削除して入力モードに移行
w次の単語の先頭に移動
W空白と改行で区切られた次の単語の先頭に移動
e単語の末尾に移動
E空白と改行で区切られた単語の最後尾に移動
b前の単語移動
B空白と改行で区切られた前の単語に移動
ZZ保存してvimを終了する

モード移行のコマンドは次になります。

コマンド操作
sカーソル上の文字削除して入力モードに移行
S行を削除して入力モードに移行
i入力モードに移行
Iカーソルを行先頭に移動して入力モードに移行
aカーソルの後ろに移動して入力モードに移行
Aカーソルを行末尾に移動して入力モードに移行
v文字単位ビジュアルモードに移行
V行単位ビジュアルモードに移行
Ctrl-v矩形ビジュアルモードに移行

ノーマルモードでは表通りの操作が可能ですが、その中でydcはオペレーターコマンド、hjklwWbBはモーションコマンドと呼ばれています。

モーションコマンドは範囲を指すため、オペレーターコマンドの後にモーションコマンドを続けて入力することでオペレーターの操作がその範囲に適用されます。

つまり、dwで単語を削除、cwで単語を削除して入力モードに移行ることができます。

範囲を示すコマンドはモーション以外にテキストオブジェクトがあります。 一般的によく使うと思われるテキストオブジェクトは次の表になります。

テキストオブジェクト範囲
iw単語
aw前後の空白を含む単語
is
as後の空白を含む文
ip段落
ap改行を含む段落
ib()の内部
ab()と内部を含む

表以外のテキストオブジェクトはこちらを参照してください。

この通り、vimではテキストオブジェクト・モーション・オペレーターを駆使することでテキストの高速編集を実現しています。 ここから楽しくなるので、初学者の方はまずこれらに慣れることをお勧めします。

入力モード

一部を紹介します。 ほかに何ができるか気になる方はVimのインサートモードでできることをぜひ読んでみてください。 gif付きでわかりやすく説明しています。

キー操作
escノーマルモードに移行
Ctrl-cノーマルモードに移行3
Ctrl-y上の行のカーソルの位置の文字を挿入
Ctrl-e下の行のカーソルの位置の文字を挿入
Ctrl-t1タブ入力
Ctrl-d1タブ削除
Ctrl-g j下の行に移動
Ctrl-g k上の行に移動
Ctrl-h一文字削除
Ctrl-r {0-9a-z"%#*:=}指定したレジスタ4をプット
Ctrl-x Ctrl-n開いているファイルないにある単語補完

ビジュアルモード

キー操作
y選択した範囲をヤンク
d選択した範囲を削除
c選択した範囲を削除して入力モードに移行
=選択した範囲を整形する
>選択した範囲を1タブ右に移動
<選択した範囲を1タグ右に移動
I矩形選択のとき、選択範囲のすべての行先頭にテキストを入力
J選択した範囲をすべて連結する
o選択した範囲の先頭または末尾にカーソルを移動

もっと詳しく知りたい方はマニュアルを参照してみてください。

コマンドラインモード

こちらのVimのコマンドラインモードでできることにまとめてありますので、ぜひ読んでみてください。

最後に

みなさん、なぜvimにはモードがあるのか理解できましたか?

本記事で紹介した内容はほんの一部をでしかなくて、ほかにもできることがたくさんあります。 ぜひ日本語マニュアルや他の方の記事を読んでみてください。

また、ぼくが運営しているゴリラ。vimではvimmerがたくさん集まっています。 一人ではなかなか知ることのできない知見がゴリラ。vimにあります。

では、よいvimライフを〜


  1. コピーすることを指す ↩︎

  2. 貼り付けのことを指す ↩︎

  3. escと同等ではないとh_eastさんより指摘をいただきました。詳細はこちらのコメントを参照してください。 ↩︎

  4. ヤンクしたデータが保存されている領域のこと ↩︎


Vim

2019/04/27 00:00