本連載ではこれまで、Vimの起動/終了方法に始まり、文字列の入力方法や削除方法、カーソルの移動方法、文字列の選択方法、選択した文字列に対する削除/置換/コマンド実行の方法などを取り上げてきた。Vimで行う操作のなかで最も基本的な部分は説明できたのではないかと思う。連載の流れに合わせて操作を練習していれば、すでにかなりスムーズにVimを利用できるようになっているはずだ。
それを踏まえて今回、「モード」という概念を説明したい。Vimまたはベースとなっているviには、モードという概念がある。これまでの操作をモードという概念を使って整理することで、より理解が深まるはずだ。
Vimはviよりも多くのモードを提供しているため、最初からVimのモードを全て把握しようというのはやや無理がある。今回は、Vimの最も基本的なモードについて説明しよう。
ノーマルモード
Vimを起動した段階で、特に何の設定も行っていないのであれば、Vimは「ノーマルモード」と呼ばれるモードになっている※。ノーマルモードはVimの最も基本的な状態を表しており、何をするにしてもまずはノーマルモードからスタートする。
ノーマルモードはほかのモードに移動する前の基本状態だ。ノーマルモードでは、カーソルやページの移動、文字列の削除/コピー/貼り付けといった操作ができる。カーソルの移動や、文字列の削除/貼り付けを行ったり、別のモードに移行、または別のモードから戻ってきたりする際の”ホーム”となる状態、これがノーマルモードの在り方だ。
Vimでは「ESC」キーを押すことでほかのモードからノーマルモードに戻ってくることができる。いろいろやりすぎて操作がよくわからなくなってきたら、とりあえず「ESC」キーを連打してノーマルモードに戻る。これがVimの最も基本的な操作だ。
ということは、「ESC」キーが存在しないキーボードや、ノートPCではVimの操作が困難を極めるのではないかと思うかもしれない。確かにそのとおりだ。MacBook Proはタッチバーが搭載されたモデルから物理的な「ESC」キーを廃止して、タッチバー上のソフトウエアESCキーに切り替えている。こうしたキーボードだと「ESC」キーを押したかどうかがわかりにくく、Vimの操作が実に面倒なことになる。
ただ、その場合も問題はない。「ESC」キーと同じ機能は「Ctrl-[」にも割り当てられている。物理ESCキーが存在しない場合には「Ctrl-[」を押すほうに慣れてしまえばよい。
※ ちょっとややこしいが、Vimで「ノーマルモード」と呼ばれている状態を、viでは「コマンドモード」と呼んでいる。以降で説明する「コマンドラインモード」とviのコマンドモードは別物なので注意されたい。
挿入モード
文字が入力できるモードは「挿入モード」と呼ばれている(viでは「入力モード」という言葉が使われている)。挿入モードになっているときは文字を入力/削除したり、カーソルを移動させたりすることができる。
Vim以外の広く普及しているエディタやワープロアプリケーションでは、このようにノーマルモードと挿入モードが別れているというケースはほとんど見られない。通常、ノーマルモードと挿入モードは単一のモードとして提供されていることが多い。
コマンドラインモード
Vimを操作している際、急にカーソルがVimの下部に飛んでしまった……といったことがあったのではないだろうか。その場合、下部には「:」が表示されていたはずだ。この「:」に飛んで命令を入力するモードのことを「コマンドラインモード」と呼んでいる。「/」や「?」、「!」でもカーソルは下部に飛んだと思うが、これらも全てコマンドラインモードである。
コマンドラインモードでは、行で範囲を指定して削除や置換などの操作を行うことができる。ノーマルモードでカーソルを移動、挿入モードで文字列を入力、コマンドラインモードで削除や置換、というのがVimの基本的な使い方ということになる。
モード間移動
今回はVim(vi)の最も基本的なモードである「ノーマルモード」「挿入モード」「コマンドラインモード」を取り上げた。これらモードは例えば次のように行き交いすることができる。
ノーマルモードには「ESC」キー(またはCtrl-[)で移行することができる。表現としては移行するというよりも「戻ってくる」と表現したほうがよいだろう。「ESC」キーを連打してノーマルモードに戻り、そこから次の操作を行う、これがモード間を行き交いするVimの基本的な使い方ということになる。
Vimはモードが細かく別れているので呪文じみたショートカットキー操作が可能になっているのだが、このような仕組みになっているのは歴史的な経緯によるところが大きい。Vimのベースとなっているviは、もともと1行ずつしか入力できないラインエディタ「ex」をベースとしている。exにはviほどの明確なモードはないのだが、状態としては挿入モードとノーマルモード+コマンドラインモードという2つのモードが存在している。exを拡張していった先に生まれたVimにとって、ノーマルモード、挿入モード、コマンドラインモードというモードを設けることは自然な流れだったわけだ。こうした流れから、モードが存在するエディタとしてVimは発展し、現在ではさらに多くのモードを備えている。
モードを理解することで動作を理解
今回取り上げた「ノーマルモード」「挿入モード」「コマンドラインモード」は、Vimの動作を理解する上で重要だ。モードを理解することで、そのとき何をしているのかの整理がつきやすくなる。
モード間を移動する方法は、いくつも用意されている。まずは今回取り上げた3つのモードを体に叩き込んでいただきたい。