🌵

Vimチートシートを元にVimの全体像を理解したい

はじめに

この記事はVoicyアドベントカレンダー13日目の記事です。
https://qiita.com/advent-calendar/2023/voicy

VIM Modes Transition Diagram

こちらのVIM Modes Transition Diagramを参考に、Vimの全体像を理解するための記事です!
https://rawgit.com/darcyparker/1886716/raw/vimModeStateDiagram.svg

基本知識

Vimの基本的な前提をおさらいします。

Vimとは

Vimはプログラミングや文書編集のためのツールです。キーボード操作に特化していて、マウスをほとんど使わずに効率的に作業を行えます。習得の難易度は高いですが、Vimを極めることができれば高速で開発を進められます。

僕の好きなプログラミルクボーイのVimを載せておきます。
https://www.youtube.com/watch?v=P7LNU9HYr7M

4つのモード

Vimにはおもに4つのモードがあります。

1. Normal Mode

これがVimのデフォルトのモードです。テキストの移動、コピー、貼り付け、削除などの基本操作を行います。ノーマルモードではテキストの編集は行わず、主に操作やナビゲーションを行います。

2. Insert Mode

このモードではテキストの挿入や編集ができます。ノーマルモードから「i」キーを押すことでインサートモードに入ります。ここでは通常のテキストエディタのようにキーボード入力が直接テキストに反映されます。

3. Visual Mode

テキストの選択と操作を行うモードです。ノーマルモードから「v」キーを押すことでビジュアルモードに入ります。このモードでは、テキストの範囲選択や、選択範囲のコピー、カットなどが行えます。

4. Command Mode

このモードではVim自体の設定や、ファイルの保存、終了などのコマンドを実行します。ノーマルモードから「:」キーを押すことでコマンドモードに入ります。ここでコマンドを入力し、Enterキーを押すことでコマンドが実行されます。

図の解説

Normal Mode -> Insert Mode

Normal ModeからInsert Modeに移るときの一番有名なコマンドは"i"ですが、この図では全部で12個のコマンドが載っています。適切なコマンドを使い分けることで効率を挙げられるので、しっかりマスターしていきたいです。

i: カーソル位置から挿入モードに入ります。
I: 行の始めに移動して挿入モードに入ります。
a: カーソルの次の位置から挿入モードに入ります。
A: 行の終わりに移動して挿入モードに入ります。
o: 現在の行の下に新しい行を作成し、そこで挿入モードに入ります。
O: 現在の行の上に新しい行を作成し、そこで挿入モードに入ります。
gI: ドキュメントの最初の非空白文字の位置で挿入モードに入ります。
gi: 最後に挿入モードを終了した場所で挿入モードに入ります。
s: カーソル位置の文字を削除し、その位置で挿入モードに入ります。
S: 現在の行をクリアし、その行で挿入モードに入ります。
C: カーソル位置から行末までを削除し、その位置で挿入モードに入ります。
cc: 現在の行をクリアし、その行で挿入モードに入ります(Sと同じ)。

Normal Mode -> Visual Mode

v: 文字単位の選択(Visual Mode)を開始します。
V: 行単位の選択(Visual Line Mode)を開始します。
Ctrl+V: ブロック選択モード(Visual Block Mode)に入ります。
gv: 直前に選択していたテキストの同じ範囲を再選択します。

一度Visual Modeを開いた後でもVを押せばVisual Line Modeになったり、逆にvを押してVisual Modeにまた戻ったり、Ctrl+VでVisual Block Modeに行ったりと、モードはいつでも変更可能。

Visual Mode -> Insert Mode

C: 選択範囲の内容を削除し、その位置で挿入モードに入ります。
c: 選択範囲を削除し、その位置で挿入モードに入ります。
S: 選択範囲の行をクリアし、その行で挿入モードに入ります。
s: 選択範囲の内容を削除し、その位置で挿入モードに入ります。
R: 選択範囲を削除し、その位置で置換モード(Replace Mode)に入ります。
I: 選択範囲の最初に挿入モードに入ります。
A: 選択範囲の終わりに挿入モードに入ります。

Visual Mode -> Normal Mode

Esc or Ctrl+C: Visual Modeを終了し、Normal Modeに戻ります。
J: 選択範囲の行を結合します。
gJ: 選択範囲の行をスペースを入れずに結合します。
u: 選択範囲のテキストを小文字に変換します。
U: 選択範囲のテキストを大文字に変換します。
g?: 選択範囲のテキストをROT13暗号化します。

Normal Mode -> Command Mode

:: コマンドラインに移ります。
?: ヘルプや検索に使用するコマンドラインに移ります。
/: フォワードサーチ(前方検索)のためのコマンドラインに移ります。
:! : 外部コマンドを実行するためのコマンドラインに移ります。

Command Mode -> Normal Mode

Esc or Ctrl+C: Command Modeを終了し、Normal Modeに戻ります。
CR: コマンドを入力した後、改行キー(Enter)を押してコマンドを実行し、Normal Modeに戻ります。

発展編

メインの4つのモードに加えて、以下の4つも軽く解説します。

1. Replace Mode

Replace Modeでは、テキストを上書きする形で編集できます。

R: Normal Mode -> Replace Mode
gR: Normal Mode -> Virtual Replace Mode
:startgreplace: Command Mode -> Replace Mode
:startreplace: Command Mode -> Virtual Replace Mode

Virtual Replace Modeは既存のテキストの長さに影響を与えずに文字を置き換えるができ、Replace Modeでは既存のテキストを新しいテキストで上書きし、元のテキストの長さを変更するができます。

2. Select Mode

Select ModeはVimのより高度なユーザー向けの機能で、Visual Mode と似ていますが、選択範囲に対する操作が異なります。Visual Mode は範囲選択とその範囲に対する様々な操作を主に行うのに対し、Select Mode は選択範囲のテキストを直接置き換えるために使用します。

Ctrl+G: Visual Mode -> Select Mode
gh: Normal Mode -> Select Mode
gH: Normal Mode -> Select Line Mode
g Ctrl+H: Normal Mode -> Select Block Mode

3. Insert Visual Mode

Insert Visual Modeは、Insert ModeとVisual Modeの機能を組み合わせたモードです。テキストの挿入や編集を行いつつ、同時にテキストの範囲選択も可能になります。

4. Insert Select Mode

Insert Select Modeは、Insert ModeとSelect Modeの機能を組み合わせたモードです。テキストを挿入・編集しつつ、マウス操作で選択範囲を指定し、コピー・カット・ペーストを行うことができます。

まとめ

Vimはコマンドが多くて理解が大変ですが、VIM Modes Transition DiagramはVimの世界全体を見渡しやすくて良いと思いました。この記事と合わせて早見表として使ってもらえればと思います!

この記事はVoicyアドベントカレンダー13日目の記事です。まだまだ続くので是非ご覧ください!
https://qiita.com/advent-calendar/2023/voicy

Voicyテックブログ

Discussion