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぀なのだが、逆に蚀えば、䜿いこなせるようになればキヌボヌド入力だけで倚皮倚様な操䜜ができるようになるわけだ。孊習ず緎習に投資しただけ芋返りが期埅できる゚ディタであるずいうのは、こういったずころに理由がある。

先述の通り、最初から党おのモヌドを意識しお操䜜を行うずいうのは難しい。しかし、繰り返し䜿甚するなかで埐々に意識できるモヌドの数を増やしおいくこずで、い぀か䜿いこなせる日が来るはずだ。