6つの基本モードといくつかの派生モード

前回はVimの最も基本的なモードとして「ノーマルモード」「挿入モード」「コマンドラインモード」を紹介した。モードとその移行方法を示すものとして次の図を示した。

最も基本的なモードとその移動方法

Vimには「ノーマルモード」「挿入モード」「コマンドラインモード」以外に「Exモード」「ビジュアルモード」「セレクトモード」という3つのモードが存在している。どのように捉えるかにもよるが、この6つのモードがVimの基本的なモードとして扱われることが多い。各モードの内容をまとめると次のようになる。

モード 内容
ノーマルモード デフォルトで使われるモード(ノーマルエディタコマンドの入力が可能なモード)。カーソルの移動、ページの移動、文字列の削除、文字列のコピー、文字列の貼り付けなどを行う
挿入モード 一般的なエディタで編集している状態に近いモード
コマンドラインモード Vimウインドウの下部に「:」「/」「?」などからはじまるプロンプトを表示し、命令の実行を行う。命令を実行するとノーマルモードへ戻る
Exモード Vimウインドウの下部に「:」から始まるプロンプトを表示し、命令の実行を行う。命令を実行してもノーマルモードへは戻らない
ビジュアルモード テキストを選択するモード。選択された領域はハイライトで表示される
セレクトモード テキストを選択するモード。ただし、印刷可能文字や改行などが入力されると入力された文字を挿入するとともに、挿入モードへ移行する。WindowsやmacOSのエディタにおけるテキスト選択の動作に近い

Vimにはこの基本モードをさらに派生させたようなモードも存在している。それらのモードも捉え方によって数が変わってくるのだが、次のモードが派生モードとして扱われることが多い。

派生モード 内容
挿入ノーマルモード 挿入モードからノーマルモードへ移行したモード。ノーマルモードと異なり、コマンドを実行すると挿入モードへ戻る
挿入ビジュアルモード 挿入モードからビジュアルモードへ移行したモード。ビジュルモードと異なり、選択が完了すると挿入モードへ戻る
挿入セレクトモード 挿入モードからセレクトモードへ移行したモード。セレクトモードと異なり、選択が完了すると挿入モードへ戻る
置換モード 入力した文字で既存の文字を置き換えるモード
仮想置換モード 入力した文字で既存の文字を置き換えるモード。ディスプレイ上の実際の表示幅をベースに置き換えを実施するため、置換によって表示が崩れないという特徴がある
オペレータペンディングモード ノーマルモードにおいてオペレータコマンドが実行され、終了の入力を待っている状態

これら全てのモードを把握するのは、実際問題として面倒すぎる。基本的には「ノーマルモード」「挿入モード」「コマンドラインモード」「ビジュアルモード」を意識しておけばよい。また、上記の表にはオペレータペンディングモードも掲載しているが、このモードを意識するユーザーはあまりいないだろう。なお、置換モードは、挿入モード、ノーマルモード、コマンドラインモード、ビジュアルモードの組み合わせで同じことができるので、最初は覚える必要はないと思う。

ビジュアルモードとセレクトモード

ビジュアルモードはこれまで本連載でも何度か扱ってきた。文字ベース、行ベース、矩形ベースでテキスト選択を行う機能だ。選択したテキストに対しては、削除や置換といった処理を行うことができる。

セレクトモードというのは、ビジュアルモードとよく似たテキスト選択のためのモードだ。こちらはWindowsやmacOSにおけるエディタのテキスト選択機能に似たモードで、選択中に印刷可能な文字または改行キーが押されると、押された文字を入力するとともに挿入モードへ移行する。この動作はWindowsやmacOSのテキスト選択機能とよく似ている。

Exモード

Exモードはコマンドラインモードとよく似たモードなのだが、コマンドラインモードが1回実行するとノーマルモードに戻るのに対し、Exモードでは1回実行しても終わらないという特徴がある。明示的に「visual」と入力しない限り、命令を実行し続けるモードだ。

Vimの使い方として、Exモードで複数の命令を入力し続けるような操作はあまり行わない。かなり使い方が難しくなるからだ。exやedに慣れている方ならそうした使い方もよいかもしれないが、今ではこのモードを積極的に使う理由はあまり見当たらないと思う。

挿入ノーマルモード、挿入ビジュアルモード、挿入セレクトモード

挿入ノーマルモード、挿入ビジュアルモード、挿入セレクトモードは挿入モードをベースにしつつ、ノーマルモード、ビジュアルモード、セレクトモードへ移行したモードのことを言う。1回実行する、または選択が完了すると挿入モードに戻ってくるという特徴がある。

いったんノーマルモードに移ってからビジュアルモードやセレクトモードに入れば、同じことができる。どちらのやり方を使うかは、好みと慣れの問題だ。操作量はそれほど変わらないので、慣れてきたら挿入モードを使ってみてもいいだろう。

置換モードと仮想置換モード

置換モードはワープロアプリケーションで言うと「上書きモード」のようなものだ。1文字だけだと置換なのだが、複数文字操作するモードの場合は置換モードと言うよりも「上書きモード」と言ったほうがわかりやすいだろう。

仮想置換モードは文字ベースで上書きするのではなく、ディスプレイで表示されている文字幅ベースで上書きを行っていく。例えばテキストベースで整形された文章(空白を多用してテーブルを整形しているケースなど)を編集する場合、このモードが便利なはずだ。それほど使用頻度の高いモードではないが、状況によっては”使える”モードとして活躍してくれる。

オペレータペンディングモード

オペレータペンディングモードはノーマルモードで命令を入力した後で、その命令入力が完了するまでのモードのことを指している。例えば、ノーマルモードで「d10d」と入力すると「10行削除する」という命令になるのだが、最初の「d」を入力するとノーマルモードからオペレータペンディングモードに入る。続いて「10」と入力している間もオペレータペンディングモードのままで、次に「d」を入力するとオペレータペンディングモードが終了してノーマルモードに戻る。自動的に推移するので、通常、ユーザーがこのモードを意識して使うことはないと思う。

モード間の移行ダイアグラム

モードが増えてくると混乱するかもしれないが、まずは「ノーマルモード」「挿入モード」「コマンドラインモード」「ビジュアルモード」という4つのモードとその遷移を意識しておけばよい。どのモードにあっても「ESC」キーを押せばノーマルモードに戻る。

重要なモードとその遷移

ここにセレクトモードとExモードも加えた基本6モードの遷移をまとめると次のようになる。Exモードからノーマルモードに戻ってくるときだけは「ESC」キーではなく「visual」と明示的に入力を行う必要があることには留意しておきたい。

基本6モードとその遷移

さらに派生モードも含めてまとめると、次のようになる。

基本モード/派生モードとその遷移

派生モードも含めた全てのモードの遷移を頭に入れながら操作を行う……というのはやや難しすぎると思う。基本的には最初に取り上げた4つのモードとその遷移を意識できるようになればよいだろう。

モードを意識して1つ上の操作を

Vimでは、モードごとにキーに別の意味やショートカットキーを割り当てることができる。これがVimを”沼エディタ”にしている要因の1つなのだが、逆に言えば、使いこなせるようになればキーボード入力だけで多種多様な操作ができるようになるわけだ。学習と練習に投資しただけ見返りが期待できるエディタであるというのは、こういったところに理由がある。

先述の通り、最初から全てのモードを意識して操作を行うというのは難しい。しかし、繰り返し使用するなかで徐々に意識できるモードの数を増やしていくことで、いつか使いこなせる日が来るはずだ。