【図解:初心者向け】Linux vim/viの基本操作(起動・編集・保存)

vim は特殊なエディタで、苦手意識を持っている方も多いと思います。覚えることが多く、慣れるまでに時間がかかります。ただ、一度慣れると、マウスを使わずにキーボードだけで素早くテキストを編集できます。

この記事では、vim 初心者がよく使う操作を、画面の変化がわかるように図解します。vim にはほかにも多くの操作がありますが、この記事の操作を覚えれば、最低限のテキスト編集はできます。

この記事でわかること
  1. vim の3つのモード(ノーマル・インサート・コマンドライン)と、モードを切り替えるキー
  2. ファイルを開いて、テキストを入力し、保存して終了するまでの基本の流れ
  3. ノーマルモードでのカーソル移動・削除・コピー&ペースト・取り消しと、インサートモードへの入り方
確認環境

この記事の操作は、vim 9.1 で動作を確認しました。vi は vim の元になったエディタで、環境によっては、vi と入力しても vim が起動します。この記事では vim として説明します。

画面イメージについて

この記事の画面は、実際の画面ではなく、実行時の画面から見るポイントを抜き出して描いたイメージです。長い出力は途中を省略しています。

基本的な使い方

vim には、キーを押したときの動作が変わる「モード」があります。最初に押すキーを覚えるより、「今どのモードか」を意識するほうが、迷いません。この記事では、次の3つのモードを使います。

インサートモード— INSERT — と表示ノーマルモード起動直後のモードコマンドラインモード画面の下にコマンドを入力i a A o OEsc:Enter / Escキーを押すと、モードが切り替わる
図1 vim の3つのモードと、切り替えるキー
モード何ができるか入るキー
ノーマルモードカーソルの移動、削除、コピー&ペーストなど。テキストの入力はできない。vim を起動した直後のモードEsc(ほかのモードから戻る)
インサートモードテキストを入力する。画面の下に -- INSERT -- と表示されるi、a、A、o、O(ノーマルモードから)
コマンドラインモード保存や終了などのコマンドを入力する:(ノーマルモードから)

新しいファイルを作って、テキストを編集し、保存して終了するまでの流れを、順に確認します。

ファイルを開く

ファイル名 file.txt を新規作成して開くには、次のように入力します。すでにあるファイル名を指定した場合は、そのファイルを開いて編集できます。

$ vim file.txt

ファイルが新規作成されて、次のような画面が表示されます。~ は、その行にテキストがない空行を意味します。

vim:起動直後画面イメージ
 ~~~~~~~
図2 新規ファイルを開いた直後。ノーマルモードです(実際の画面ではなく、表示内容のポイントを示したイメージです)

この状態が、ノーマルモードです。vim を起動すると、最初にノーマルモードになります。ノーマルモードでは、テキストを入力できません。

インサートモードでテキストを入力する

テキストを入力するには、ノーマルモードで i を押して、インサートモードに入ります。画面の下に -- INSERT -- と表示されたら、通常のキー操作でテキストを入力できます。

vim:インサートモード画面イメージ
1 ~~~~~~2-- INSERT --
図3 i を押した直後。入力はまだありません(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1カーソルここから文字が入る
2-- INSERT --インサートモードであることを示す表示

次の5行を入力しました。

vim:テキストを入力画面イメージ
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5. ~~-- INSERT --
図4 5行を入力した状態(実際の画面ではなく、表示内容のポイントを示したイメージです)

Esc でノーマルモードに戻る

入力が終わったら、Esc キーを押して、ノーマルモードに戻ります。画面の下の -- INSERT -- の表示が消えます。

vim:ノーマルモードに戻った画面イメージ
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5.~~~1
図5 Esc を押した後。-- INSERT -- が消えている(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1画面の下の行-- INSERT -- が消えている。ノーマルモードに戻った
補足:Esc でカーソルが1文字左に動く

Esc を押すと、カーソルが1文字左へ動いて、行の最後の文字に重なります。インサートモードのカーソルは文字と文字の間にあり、ノーマルモードのカーソルは文字に重なるためです。

コマンドラインモードで保存する

ファイルを保存したり、vim を終了したりするには、ノーマルモードから :(コロン)を押して、コマンドラインモードに入ります。画面の一番下にコロンが表示されるので、続けてコマンドを入力して、Enter キーを押します。

編集したテキストを保存するには、: に続けて w(write)と入力します。

vim:コマンドラインモード画面イメージ
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5.~~~1:w 
図6 :w を入力した状態(Enter を押す前)(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1:w画面の下の行に入力したコマンド。Enter で実行する

Enter を押すと、ファイルを書き込んだことを示すメッセージ("file.txt" [New] … written のような表示)が出て、ノーマルモードに戻ります。メッセージには、書き込んだ行数と文字数(バイト数)が表示されます。

vim を終了する

vim を終了するには、コマンドラインモードで :q(quit)と入力します。

ターミナル画面イメージ
1$ vim file.txt$
図7 vim を終了して、シェルに戻った状態(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
12行目の $vim が終了して、シェルのプロンプトに戻った
補足:保存していないと :q は終了できない

テキストを変更したあと、保存していない状態で :q を実行すると、警告が出て終了できません。保存してから終了するか、後で説明する :q! で変更を捨てて終了します。

以上が、ファイルを新規作成して、保存・終了するまでの基本の流れです。以降は、各モードでよく使う操作を確認します。

ノーマルモード

ノーマルモードでは、カーソルの移動、テキストの削除、コピー&ペーストなどができます。以降の図には、カーソルの位置を示しています。キーを押したあとに、カーソルがどこへ動くかも、あわせて確認してください。

図の中の、背景が紺色になっている文字が、カーソルの位置です。

カーソルの移動

カーソルの上下左右への移動は、矢印キーでもできますが、h j k l のキーでもできます。この4つのキーは、キーボード上で横に並んでいます。ホームポジションから手を動かさずに使えます。

h←左j↓下k↑上l→右キーボードの配置どおりに、h j k l が並んでいる
図8 h j k l のキーと、カーソルが動く方向
キーカーソルの動き
k上へ移動(上矢印キーでも可)
j下へ移動(下矢印キーでも可)
l右へ移動(右矢印キーでも可)。小文字のエルです
h左へ移動(左矢印キーでも可)。h を左と覚えると、残りも覚えやすくなります

このほかにも、カーソルの移動に便利なキーがあります。

行の先頭へ移動(0)

0(ゼロ)を押すと、カーソルが、今ある行の先頭へ移動します。

vim:0 を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
This is line 1.This is line 2.
図9 0 で行の先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)

行の末尾へ移動($)

$ を押すと、カーソルが、今ある行の末尾へ移動します。

vim:$ を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
This is line 1.This is line 2.
図10 $ で行の末尾へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)

次の単語へ移動(w)

w を押すと、カーソルが、次の単語の先頭へ移動します。w は、英数字のまとまりと、記号のまとまりを、別々の単語として扱います。そのため、1. は 1 と . の2つの単語になり、w を押すたびにその両方に止まります。

vim:w を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
This is line 1.This is line 2.
図11 w で次の単語の先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)

行の末尾の単語にカーソルがある場合は、次の行の先頭の単語へ移動します。

vim:w を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
This is line 1.This is line 2.
図12 行の最後の単語から w を押すと、次の行の先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)

次の単語へ移動(W)

W(大文字)を押すと、空白で区切られたまとまりを1つの単語として、次の単語の先頭へ移動します。1. は、ピリオドを含めて1つの単語です。

vim:W を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
This is line 1.This is line 2.
図13 W では、1. を1つの単語として扱い、次の行の先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)
This is line 1.wW. も1つの単語1. が1つの単語丸は、キーを押したときにカーソルが止まる位置
図14 w と W でカーソルが止まる位置の違い

前の単語へ移動(b)

b を押すと、カーソルが、前の単語の先頭へ移動します。単語の途中にカーソルがある場合は、その単語の先頭へ移動します。

vim:b を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
This is line 1.This is line 2.
図15 単語の途中で b を押すと、その単語の先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)

行の先頭の単語にカーソルがある場合は、前の行の最後の単語へ移動します。b は記号を別の単語として扱うので、行末のピリオドに止まります。

vim:b を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
This is line 1.This is line 2.
図16 行の先頭で b を押すと、前の行の最後の単語へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)

前の単語へ移動(B)

B(大文字)を押すと、空白で区切られたまとまりを1つの単語として、前の単語の先頭へ移動します。次の例では、前の行の末尾のピリオドを無視して、その前の 1. の先頭までカーソルが移動します。

vim:B を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
This is line 1.This is line 2.
図17 B で、前の行の 1. の先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)

ファイルの先頭へ移動(gg)

gg を押すと、カーソルが、ファイルの先頭の行(1行目)へ移動します。

vim:gg を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5.
後(ノーマルモード)
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5.
図18 gg でファイルの先頭へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)

ファイルの末尾へ移動(G)

G(大文字)を押すと、カーソルが、ファイルの最終行へ移動します。移動先は、最終行の先頭の文字です。行番号を付けて 5G のように入力すると、その行番号の行へ移動できます。

vim:G を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5.
後(ノーマルモード)
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5.
図19 G でファイルの最終行へ移動する(実際の画面ではなく、表示内容のポイントを示したイメージです)

テキスト・行の削除

ノーマルモードのまま、テキストを削除できます。削除したテキストは、あとで説明する p で貼り付けることもできます。

カーソルの文字を削除(x)

x を押すと、カーソルがある文字が削除されます。

vim:x を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
This s line 1.This is line 2.
図20 x でカーソルの文字を削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)

複数の文字を削除(nx)

カーソルの文字を含めて、削除したい文字数を前に付けて、x を押します。3文字を削除したいときは、3x と入力します。

vim:3x を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
This is e 1.This is line 2.
図21 3x で、カーソルの文字を含めた3文字(lin)を削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)

カーソルの行を削除(dd)

dd を押すと、カーソルがある行全体が削除されます。

vim:dd を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.This is line 3.
後(ノーマルモード)
This is line 2.This is line 3.
図22 dd でカーソルの行を削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)

複数の行を削除(ndd)

カーソルの行を含めて、削除したい行数を前に付けて、dd を押します。3行を削除したいときは、3dd と入力します。

vim:3dd を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5.
後(ノーマルモード)
This is line 4.This is line 5.
図23 3dd で、カーソルの行を含めた3行を削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)

カーソルの位置から単語の終わりまで削除(dw)

dw を入力すると、カーソルの位置から、次の単語の手前までが削除されます。単語の先頭にカーソルがあれば、その単語と後ろの空白が削除されます。

vim:dw を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
This is 1.This is line 2.
図24 dw で、line と後ろの空白を削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)

カーソルの手前から行の先頭まで削除(d0)

d0 を入力すると、カーソルの文字は削除せずに、カーソルの手前から行の先頭までが削除されます。

vim:d0 を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
ine 1.This is line 2.
図25 d0 で、カーソルの文字(i)より前を削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)

カーソルの文字から行末まで削除(d$)

d$ を入力すると、カーソルの文字から行末までが削除されます。

vim:d$ を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
This is lThis is line 2.
図26 d$ で、カーソルの文字から行末までを削除する(実際の画面ではなく、表示内容のポイントを示したイメージです)

テキスト・行のコピー&ペースト

vim では、コピーを yank(ヤンク)、貼り付けを put(プット)と呼びます。コピーしたあとに p を押すと、貼り付けられます。

カーソルの行をコピー(yy)

コピーしたい行にカーソルを合わせて、yy を押します。そのあと p を押すと、カーソルの行の次の行に、コピーした行が挿入されます。

vim:yy → p を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
This is line 1.This is line 1.This is line 2.
図27 yy のあとに p を押すと、コピーした行が次の行に入る(実際の画面ではなく、表示内容のポイントを示したイメージです)

単語をコピー(yw)

カーソルの文字から、次の単語の手前までコピーするには、yw を押します。そのあと p を押すと、カーソルの文字の後ろに、コピーした文字列が貼り付けられます。

後ろの空白も含めて、コピー・貼り付けされることに注意してください。通常は、単語の先頭の文字にカーソルを合わせてから実行します。

vim:yw → p を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(ノーマルモード)
TThis his is line 1.This is line 2.
図28 yw のあとに p を押すと、カーソルの後ろにコピーした This (空白を含む)が入る(実際の画面ではなく、表示内容のポイントを示したイメージです)

操作の取り消し(u)

テキストを編集したあと、その操作を取り消したいときは、u(undo)を押します。次の例では、ひとつ上の単語の貼り付けを取り消しています。

vim:u を入力画面イメージ
前(ノーマルモード)
TThis his is line 1.This is line 2.
後(ノーマルモード)
This is line 1.This is line 2.
図29 u で、直前の操作(貼り付け)を取り消す(実際の画面ではなく、表示内容のポイントを示したイメージです)
補足:取り消しをやり直す、行ごと取り消す

u で取り消した操作は、Ctrl + r(redo)で、やり直せます。大文字の U は、u とは別のコマンドで、直前に変更した1行の変更をまとめて取り消します。

インサートモード

テキストを入力するには、インサートモードに入る必要があります。ここまでは i を使いましたが、カーソルの位置や、入力を始める場所に応じて、ほかにもいくつかのキーがあります。どのキーでも、Esc でノーマルモードに戻ります。

キーインサートモードに入ったときの動き
iカーソルの位置は変わらない。入力したテキストは、カーソルの前に入る
aカーソルが1文字右へ動く。入力したテキストは、元のカーソルの文字の後ろに入る
Aカーソルが行の末尾へ動く。行の末尾にテキストを追加するときに便利
o現在の行の下に新しい行ができて、その行の先頭にカーソルが動く
O現在の行の上に新しい行ができて、その行の先頭にカーソルが動く

次の図は、それぞれのキーを押したあとで、abc を入力した結果です。

カーソルの位置からテキスト入力(i)

ノーマルモードで i を押すと、カーソルの位置は変わらずに、インサートモードに入ります。この状態で abc を入力すると、カーソルの前に挿入されます。

vim:i → abc を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(インサートモード)
This is abcline 1.This is line 2. -- INSERT --
図30 i のあとに abc を入力すると、カーソルの文字の前に入る(実際の画面ではなく、表示内容のポイントを示したイメージです)

カーソルの後ろからテキスト入力(a)

ノーマルモードで a(append)を押すと、カーソルが1文字右へ動いて、インサートモードに入ります。この状態で abc を入力すると、元のカーソルの文字の後ろに挿入されます。

vim:a → abc を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(インサートモード)
This is labcine 1.This is line 2. -- INSERT --
図31 a のあとに abc を入力すると、元のカーソルの文字の後ろに入る(実際の画面ではなく、表示内容のポイントを示したイメージです)

行の末尾からテキスト入力(A)

ノーマルモードで A(大文字)を押すと、カーソルが行の末尾へ動いて、インサートモードに入ります。文章の末尾に追加するときに便利です。この状態で abc を入力すると、行の末尾に追加されます。

vim:A → abc を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.
後(インサートモード)
This is line 1.abc This is line 2. -- INSERT --
図32 A のあとに abc を入力すると、行の末尾に追加される(実際の画面ではなく、表示内容のポイントを示したイメージです)

次の行にテキスト入力(o)

ノーマルモードで o を押すと、現在の行の下に新しい行ができて、その行の先頭にカーソルが動き、インサートモードに入ります。テキストを次の行に追加するときに便利です。この状態で abc を入力すると、新しい行に入力されます。

vim:o → abc を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.This is line 3.
後(インサートモード)
This is line 1.abc This is line 2.This is line 3.-- INSERT --
図33 o のあとに abc を入力すると、下にできた新しい行に入る(実際の画面ではなく、表示内容のポイントを示したイメージです)

前の行にテキスト入力(O)

ノーマルモードで O(大文字)を押すと、現在の行の上に新しい行ができて、その行の先頭にカーソルが動き、インサートモードに入ります。この状態で abc を入力すると、新しい行に入力されます。

vim:O → abc を入力画面イメージ
前(ノーマルモード)
This is line 1.This is line 2.This is line 3.
後(インサートモード)
abc This is line 1.This is line 2.This is line 3.-- INSERT --
図34 O のあとに abc を入力すると、上にできた新しい行に入る(実際の画面ではなく、表示内容のポイントを示したイメージです)

コマンドラインモード

コマンドラインモードでは、ファイルの保存や、vim の終了などを実行します。ノーマルモードで : を押すと、画面の一番下にコマンドを入力できます。基本的な使い方は、記事の最初に書いたとおりです。

保存して終了(:wq)

編集したファイルを保存して、vim を終了するには、:wq のように、w と q を続けて入力します。

vim::wq を入力画面イメージ
前(コマンドラインモード)
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5.~~1:wq 
後(ターミナル)
2$ vim file.txt$
図35 :wq で、ファイルを保存して vim を終了する(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1:wq保存(w)と終了(q)を続けて実行するコマンド
22行目の $vim が終了して、シェルのプロンプトに戻った

変更があるときだけ保存して終了する :x も使えます。

ファイル名を指定して保存(:w ファイル名)

編集中のファイルを、file1.txt など別の名前で保存するには、:w の後ろにファイル名を指定します。

vim::w file1.txt を入力画面イメージ
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5.~~1:w file1.txt 
図36 :w file1.txt を入力した状態(Enter を押す前)(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1:w file1.txt内容を file1.txt という名前で保存するコマンド

実行すると、"file1.txt" [New] … written のようなメッセージが表示されます。別名で保存したあとも、vim で開いているのは、元の file.txt のままです。保存した file1.txt は、別のファイルとして残ります。

コマンドの強制実行(!)

コマンドを強制的に実行するには、コマンドの後ろに ! を付けます。保存せずに vim を強制終了するには、:q! と入力します。変更した内容は、保存されません。

vim::q! を入力画面イメージ
前(コマンドラインモード)
This is line 1.This is line 2.This is line 3.This is line 4.This is line 5.~~1:q! 
後(ターミナル)
2$ vim file.txt$
図37 :q! で、保存せずに vim を強制終了する(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1:q!変更を保存せずに終了するコマンド
22行目の $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!保存せずに強制終了

コメント