vim は特殊なエディタで、苦手意識を持っている方も多いと思います。覚えることが多く、慣れるまでに時間がかかります。ただ、一度慣れると、マウスを使わずにキーボードだけで素早くテキストを編集できます。
この記事では、vim 初心者がよく使う操作を、画面の変化がわかるように図解します。vim にはほかにも多くの操作がありますが、この記事の操作を覚えれば、最低限のテキスト編集はできます。
- vim の3つのモード(ノーマル・インサート・コマンドライン)と、モードを切り替えるキー
- ファイルを開いて、テキストを入力し、保存して終了するまでの基本の流れ
- ノーマルモードでのカーソル移動・削除・コピー&ペースト・取り消しと、インサートモードへの入り方
この記事の操作は、vim 9.1 で動作を確認しました。vi は vim の元になったエディタで、環境によっては、vi と入力しても vim が起動します。この記事では vim として説明します。
この記事の画面は、実際の画面ではなく、実行時の画面から見るポイントを抜き出して描いたイメージです。長い出力は途中を省略しています。
基本的な使い方
vim には、キーを押したときの動作が変わる「モード」があります。最初に押すキーを覚えるより、「今どのモードか」を意識するほうが、迷いません。この記事では、次の3つのモードを使います。
| モード | 何ができるか | 入るキー |
|---|---|---|
| ノーマルモード | カーソルの移動、削除、コピー&ペーストなど。テキストの入力はできない。vim を起動した直後のモード | Esc(ほかのモードから戻る) |
| インサートモード | テキストを入力する。画面の下に -- INSERT -- と表示される | i、a、A、o、O(ノーマルモードから) |
| コマンドラインモード | 保存や終了などのコマンドを入力する | :(ノーマルモードから) |
新しいファイルを作って、テキストを編集し、保存して終了するまでの流れを、順に確認します。
ファイルを開く
ファイル名 file.txt を新規作成して開くには、次のように入力します。すでにあるファイル名を指定した場合は、そのファイルを開いて編集できます。
$ vim file.txt
ファイルが新規作成されて、次のような画面が表示されます。~ は、その行にテキストがない空行を意味します。
~~~~~~~
この状態が、ノーマルモードです。vim を起動すると、最初にノーマルモードになります。ノーマルモードでは、テキストを入力できません。
インサートモードでテキストを入力する
テキストを入力するには、ノーマルモードで i を押して、インサートモードに入ります。画面の下に -- INSERT -- と表示されたら、通常のキー操作でテキストを入力できます。
1 ~~~~~~2-- INSERT --
| No. | 表示 | 意味 |
|---|---|---|
| 1 | カーソル | ここから文字が入る |
| 2 | -- INSERT -- | インサートモードであることを示す表示 |
次の5行を入力しました。
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5. ~~-- INSERT --
Esc でノーマルモードに戻る
入力が終わったら、Esc キーを押して、ノーマルモードに戻ります。画面の下の -- INSERT -- の表示が消えます。
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5.~~~1
-- INSERT -- が消えている(実際の画面ではなく、表示内容のポイントを示したイメージです)| No. | 表示 | 意味 |
|---|---|---|
| 1 | 画面の下の行 | -- INSERT -- が消えている。ノーマルモードに戻った |
Esc を押すと、カーソルが1文字左へ動いて、行の最後の文字に重なります。インサートモードのカーソルは文字と文字の間にあり、ノーマルモードのカーソルは文字に重なるためです。
コマンドラインモードで保存する
ファイルを保存したり、vim を終了したりするには、ノーマルモードから :(コロン)を押して、コマンドラインモードに入ります。画面の一番下にコロンが表示されるので、続けてコマンドを入力して、Enter キーを押します。
編集したテキストを保存するには、: に続けて w(write)と入力します。
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5.~~~1:w
| No. | 表示 | 意味 |
|---|---|---|
| 1 | :w | 画面の下の行に入力したコマンド。Enter で実行する |
Enter を押すと、ファイルを書き込んだことを示すメッセージ("file.txt" [New] … written のような表示)が出て、ノーマルモードに戻ります。メッセージには、書き込んだ行数と文字数(バイト数)が表示されます。
vim を終了する
vim を終了するには、コマンドラインモードで :q(quit)と入力します。
1$ vim file.txt$
| No. | 表示 | 意味 |
|---|---|---|
| 1 | 2行目の $ | vim が終了して、シェルのプロンプトに戻った |
テキストを変更したあと、保存していない状態で :q を実行すると、警告が出て終了できません。保存してから終了するか、後で説明する :q! で変更を捨てて終了します。
以上が、ファイルを新規作成して、保存・終了するまでの基本の流れです。以降は、各モードでよく使う操作を確認します。
ノーマルモード
ノーマルモードでは、カーソルの移動、テキストの削除、コピー&ペーストなどができます。以降の図には、カーソルの位置を示しています。キーを押したあとに、カーソルがどこへ動くかも、あわせて確認してください。
図の中の、背景が紺色になっている文字が、カーソルの位置です。
カーソルの移動
カーソルの上下左右への移動は、矢印キーでもできますが、h j k l のキーでもできます。この4つのキーは、キーボード上で横に並んでいます。ホームポジションから手を動かさずに使えます。
| キー | カーソルの動き |
|---|---|
k | 上へ移動(上矢印キーでも可) |
j | 下へ移動(下矢印キーでも可) |
l | 右へ移動(右矢印キーでも可)。小文字のエルです |
h | 左へ移動(左矢印キーでも可)。h を左と覚えると、残りも覚えやすくなります |
このほかにも、カーソルの移動に便利なキーがあります。
行の先頭へ移動(0)
0(ゼロ)を押すと、カーソルが、今ある行の先頭へ移動します。
0 で行の先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)行の末尾へ移動($)
$ を押すと、カーソルが、今ある行の末尾へ移動します。
$ で行の末尾へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)次の単語へ移動(w)
w を押すと、カーソルが、次の単語の先頭へ移動します。w は、英数字のまとまりと、記号のまとまりを、別々の単語として扱います。そのため、1. は 1 と . の2つの単語になり、w を押すたびにその両方に止まります。
w で次の単語の先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)行の末尾の単語にカーソルがある場合は、次の行の先頭の単語へ移動します。
w を押すと、次の行の先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)次の単語へ移動(W)
W(大文字)を押すと、空白で区切られたまとまりを1つの単語として、次の単語の先頭へ移動します。1. は、ピリオドを含めて1つの単語です。
W では、1. を1つの単語として扱い、次の行の先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)前の単語へ移動(b)
b を押すと、カーソルが、前の単語の先頭へ移動します。単語の途中にカーソルがある場合は、その単語の先頭へ移動します。
b を押すと、その単語の先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)行の先頭の単語にカーソルがある場合は、前の行の最後の単語へ移動します。b は記号を別の単語として扱うので、行末のピリオドに止まります。
b を押すと、前の行の最後の単語へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)前の単語へ移動(B)
B(大文字)を押すと、空白で区切られたまとまりを1つの単語として、前の単語の先頭へ移動します。次の例では、前の行の末尾のピリオドを無視して、その前の 1. の先頭までカーソルが移動します。
B で、前の行の 1. の先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)ファイルの先頭へ移動(gg)
gg を押すと、カーソルが、ファイルの先頭の行(1行目)へ移動します。
gg でファイルの先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)ファイルの末尾へ移動(G)
G(大文字)を押すと、カーソルが、ファイルの最終行へ移動します。移動先は、最終行の先頭の文字です。行番号を付けて 5G のように入力すると、その行番号の行へ移動できます。
G でファイルの最終行へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)テキスト・行の削除
ノーマルモードのまま、テキストを削除できます。削除したテキストは、あとで説明する p で貼り付けることもできます。
カーソルの文字を削除(x)
x を押すと、カーソルがある文字が削除されます。
x でカーソルの文字を削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)複数の文字を削除(nx)
カーソルの文字を含めて、削除したい文字数を前に付けて、x を押します。3文字を削除したいときは、3x と入力します。
3x で、カーソルの文字を含めた3文字(lin)を削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)カーソルの行を削除(dd)
dd を押すと、カーソルがある行全体が削除されます。
dd でカーソルの行を削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)複数の行を削除(ndd)
カーソルの行を含めて、削除したい行数を前に付けて、dd を押します。3行を削除したいときは、3dd と入力します。
3dd で、カーソルの行を含めた3行を削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)カーソルの位置から単語の終わりまで削除(dw)
dw を入力すると、カーソルの位置から、次の単語の手前までが削除されます。単語の先頭にカーソルがあれば、その単語と後ろの空白が削除されます。
dw で、line と後ろの空白を削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)カーソルの手前から行の先頭まで削除(d0)
d0 を入力すると、カーソルの文字は削除せずに、カーソルの手前から行の先頭までが削除されます。
d0 で、カーソルの文字(i)より前を削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)カーソルの文字から行末まで削除(d$)
d$ を入力すると、カーソルの文字から行末までが削除されます。
d$ で、カーソルの文字から行末までを削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)テキスト・行のコピー&ペースト
vim では、コピーを yank(ヤンク)、貼り付けを put(プット)と呼びます。コピーしたあとに p を押すと、貼り付けられます。
カーソルの行をコピー(yy)
コピーしたい行にカーソルを合わせて、yy を押します。そのあと p を押すと、カーソルの行の次の行に、コピーした行が挿入されます。
yy のあとに p を押すと、コピーした行が次の行に入る(実際の画面ではなく、表示内容のポイントを示したイメージです)単語をコピー(yw)
カーソルの文字から、次の単語の手前までコピーするには、yw を押します。そのあと p を押すと、カーソルの文字の後ろに、コピーした文字列が貼り付けられます。
後ろの空白も含めて、コピー・貼り付けされることに注意してください。通常は、単語の先頭の文字にカーソルを合わせてから実行します。
yw のあとに p を押すと、カーソルの後ろにコピーした This (空白を含む)が入る(実際の画面ではなく、表示内容のポイントを示したイメージです)操作の取り消し(u)
テキストを編集したあと、その操作を取り消したいときは、u(undo)を押します。次の例では、ひとつ上の単語の貼り付けを取り消しています。
u で、直前の操作(貼り付け)を取り消す(実際の画面ではなく、表示内容のポイントを示したイメージです)u で取り消した操作は、Ctrl + r(redo)で、やり直せます。大文字の U は、u とは別のコマンドで、直前に変更した1行の変更をまとめて取り消します。
インサートモード
テキストを入力するには、インサートモードに入る必要があります。ここまでは i を使いましたが、カーソルの位置や、入力を始める場所に応じて、ほかにもいくつかのキーがあります。どのキーでも、Esc でノーマルモードに戻ります。
| キー | インサートモードに入ったときの動き |
|---|---|
i | カーソルの位置は変わらない。入力したテキストは、カーソルの前に入る |
a | カーソルが1文字右へ動く。入力したテキストは、元のカーソルの文字の後ろに入る |
A | カーソルが行の末尾へ動く。行の末尾にテキストを追加するときに便利 |
o | 現在の行の下に新しい行ができて、その行の先頭にカーソルが動く |
O | 現在の行の上に新しい行ができて、その行の先頭にカーソルが動く |
次の図は、それぞれのキーを押したあとで、abc を入力した結果です。
カーソルの位置からテキスト入力(i)
ノーマルモードで i を押すと、カーソルの位置は変わらずに、インサートモードに入ります。この状態で abc を入力すると、カーソルの前に挿入されます。
i のあとに abc を入力すると、カーソルの文字の前に入る(実際の画面ではなく、表示内容のポイントを示したイメージです)カーソルの後ろからテキスト入力(a)
ノーマルモードで a(append)を押すと、カーソルが1文字右へ動いて、インサートモードに入ります。この状態で abc を入力すると、元のカーソルの文字の後ろに挿入されます。
a のあとに abc を入力すると、元のカーソルの文字の後ろに入る(実際の画面ではなく、表示内容のポイントを示したイメージです)行の末尾からテキスト入力(A)
ノーマルモードで A(大文字)を押すと、カーソルが行の末尾へ動いて、インサートモードに入ります。文章の末尾に追加するときに便利です。この状態で abc を入力すると、行の末尾に追加されます。
A のあとに abc を入力すると、行の末尾に追加される(実際の画面ではなく、表示内容のポイントを示したイメージです)次の行にテキスト入力(o)
ノーマルモードで o を押すと、現在の行の下に新しい行ができて、その行の先頭にカーソルが動き、インサートモードに入ります。テキストを次の行に追加するときに便利です。この状態で abc を入力すると、新しい行に入力されます。
o のあとに abc を入力すると、下にできた新しい行に入る(実際の画面ではなく、表示内容のポイントを示したイメージです)前の行にテキスト入力(O)
ノーマルモードで O(大文字)を押すと、現在の行の上に新しい行ができて、その行の先頭にカーソルが動き、インサートモードに入ります。この状態で abc を入力すると、新しい行に入力されます。
O のあとに abc を入力すると、上にできた新しい行に入る(実際の画面ではなく、表示内容のポイントを示したイメージです)コマンドラインモード
コマンドラインモードでは、ファイルの保存や、vim の終了などを実行します。ノーマルモードで : を押すと、画面の一番下にコマンドを入力できます。基本的な使い方は、記事の最初に書いたとおりです。
保存して終了(:wq)
編集したファイルを保存して、vim を終了するには、:wq のように、w と q を続けて入力します。
:wq で、ファイルを保存して vim を終了する(実際の画面ではなく、表示内容のポイントを示したイメージです)| No. | 表示 | 意味 |
|---|---|---|
| 1 | :wq | 保存(w)と終了(q)を続けて実行するコマンド |
| 2 | 2行目の $ | vim が終了して、シェルのプロンプトに戻った |
変更があるときだけ保存して終了する :x も使えます。
ファイル名を指定して保存(:w ファイル名)
編集中のファイルを、file1.txt など別の名前で保存するには、:w の後ろにファイル名を指定します。
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5.~~1:w file1.txt
| No. | 表示 | 意味 |
|---|---|---|
| 1 | :w file1.txt | 内容を file1.txt という名前で保存するコマンド |
実行すると、"file1.txt" [New] … written のようなメッセージが表示されます。別名で保存したあとも、vim で開いているのは、元の file.txt のままです。保存した file1.txt は、別のファイルとして残ります。
コマンドの強制実行(!)
コマンドを強制的に実行するには、コマンドの後ろに ! を付けます。保存せずに vim を強制終了するには、:q! と入力します。変更した内容は、保存されません。
:q! で、保存せずに vim を強制終了する(実際の画面ではなく、表示内容のポイントを示したイメージです)| No. | 表示 | 意味 |
|---|---|---|
| 1 | :q! | 変更を保存せずに終了するコマンド |
| 2 | 2行目の $ | vim が終了して、シェルのプロンプトに戻った |
まとめ
vim は、ノーマルモード、インサートモード、コマンドラインモードを切り替えながら使います。起動直後はノーマルモードです。i などでテキストを入力し、Esc でノーマルモードに戻り、: に続けてコマンドを入力して、保存と終了をします。最後に、この記事で紹介した操作をまとめます。
ノーマルモード
| キー | 動作 |
|---|---|
h j k l | カーソルを左・下・上・右へ移動 |
0 / $ | 行の先頭 / 末尾へ移動 |
w / W | 次の単語の先頭へ移動(W は空白区切り) |
b / B | 前の単語の先頭へ移動(B は空白区切り) |
gg / G | ファイルの先頭 / 最終行へ移動 |
x / 3x | カーソルの文字を削除 / 3文字を削除 |
dd / 3dd | カーソルの行を削除 / 3行を削除 |
dw | カーソルの位置から次の単語の手前まで削除 |
d0 / d$ | カーソルの手前から行の先頭まで削除 / カーソルの文字から行末まで削除 |
yy / yw | 行をコピー / カーソルの文字から次の単語の手前までコピー |
p | コピーしたテキストを貼り付け |
u | 直前の操作を取り消す |
インサートモードに入るキー
| キー | 入力を始める位置 |
|---|---|
i | カーソルの前 |
a | カーソルの後ろ |
A | 行の末尾 |
o | 下に新しくできた行 |
O | 上に新しくできた行 |
コマンドラインモード
| コマンド | 動作 |
|---|---|
:w | 保存 |
:q | 終了(変更を保存していないと終了できない) |
:wq | 保存して終了 |
:w ファイル名 | 別の名前で保存 |
:q! | 保存せずに強制終了 |
コメント