うたカモ技術ブログ

エディタ Linux

   Vimの使い方

post:     update: 

今回は、vim(vi)エディタの使い方について紹介します。

vimエディタは、昔から多くの人に使われ続けているエディタツールの1つです。
組み込み機器向けを含む、大半のLinuxディストリビューションに初めからインストールされており、 個人的にはプログラマーに良く好まれている印象のエディタです。

そんなvimエディタですが、nanoなどの他エディタと比べると、使い方に若干の癖(場合によっては、初心者の方が忌避するくらいの癖)があります。

そこで、今回はvimエディタの癖も含め、その使い方を簡単に紹介します。
効率良く使い方を押さえられるように書きますので、よろしくお願いします。

#実行環境OS
ubuntu 22.04 LTS 64bit
#vim
version 8.2.4919

目次

  1. これがクセ! vimエディタの3モード(コマンド・編集・ラストライン)
  2. 起動方法と簡単な使い方
  3. 最初に覚える4操作(最短操作)
  4. コマンドモード
  5. 編集モード
  6. ラストラインモード
  7. おわりに
  8. 参考文献

これがクセ! vimエディタの3モード(コマンド・編集・ラストライン)

操作方法の紹介に入る前に、vim(vi)エディタの癖であるモードについて説明します。

viエディタにはコマンド・編集・ラストラインと呼ばれる3つのモードがあり、ユーザーは各モード に移行した上で、適切なファイル操作をする必要があります。

各モードの説明は以下の通りです。

vim(vi) 3モード遷移図(コマンドモード・編集モード・ラストラインモード)
コマンドモード
viエディタを開いたときの初期モードです。
主にカーソル移動やテキストの削除やコピー&ペースト(Yank/Delete & Put)を受け付けます。
このモードは他モードに移行する際の分岐点となります。 そのため、編集モードやラストラインモードから別モードに移行したいときは一度コマンドモードに戻る必要があります。 通常、コマンドモードに戻るにはESCを押します。 ※詳しくは「コマンドモード」の節を参照。
編集モード
文字入力を受け付けるモードです。カーソル位置を文字編集の開始地点とするiやカーソル位置の1つ先を開始地点とする aなどを押してコマンドモードから編集モードに移行します。※詳しくは「編集モード」の節を参照。
ラストラインモード
viエディタの終了やファイルの保存を指示するためのモードです。 ユーザーが入力した指示オプションが行末に表示されるためラストラインモードと呼ばれます。 ファイルを保存する:wなどを入力してコマンドモードからラストラインモードに移行します。 ※詳しくは「ラストラインモード」の節を参照。

ポイント

全体の遷移イメージは「初期状態(コマンドモード) → i/a/oで編集モード → ESCでコマンドモードへ戻る → :でラストラインモード」です。

それでは、まずは起動方法を確認し、その後に最初に覚える4操作を押さえてからモード別の詳細操作に進みます。

起動方法と簡単な使い方

本記事では名称をvimで統一して説明します。
ただしコマンド例では入力を短くするためviを使う箇所があります。Ubuntuなどではviがvim互換として起動する環境も多いため、基本的には同じ操作として読み替えてください。

その1:ファイル指定なしで起動する(無名新規ファイルのオープン)

コンソール上でviorvimと入力して、Enterを押すことで起動できます。 user:~$ vi これによって無名の新規ファイルが開きます。この時のviエディタはコマンドモードなので挿入(insert)iキーなど を押して編集モードに移行する必要があります。これでテキスト入力を受け付けます。

新規ファイルに名前を付けて保存する際は、ESCを押してコマンドモードに戻った上で:w <file>と入力してください。 指定したファイル名<file>で保存されます。※合わせてファイルを閉じたい場合は:wq <file>と入力してください。

その2:ファイル指定ありで起動する(既存ファイルの編集 or 名前付き新規ファイルのオープン)

コンソール上でvi <file>orvim <file>と入力して、Enterを押すことで起動できます。 user:~$ vi hello.txt これによって既存ファイルのhello.txtまたは新規ファイルのhello.txtが開きます。

この時のviエディタはコマンドモードなので挿入(insert)iキーなど を押して編集モードに移行する必要があります。これでテキスト入力を受け付けます。

新規ファイルに名前を付けて保存する際は、ESCを押してコマンドモードに戻った上で:wを入力します。 ※合わせてファイルを閉じたい場合は:wqと入力します。

最初に覚える4操作(最短操作)

モードと起動方法を押さえたうえで、次は「編集開始→保存終了/破棄終了」を最短で行う4操作を覚えます。

1) 編集を開始するi

ファイルを開いた直後はコマンドモードです。iを押すと編集モードに入り、文字入力ができます。

2) コマンドモードへ戻るESC

保存や終了のコマンドを入力する前に、ESCでコマンドモードへ戻ります。

3) 保存して終了する:wq

編集内容を保存したうえでvimを終了したい場合は:wqを入力します。

4) 変更を破棄して終了する:q!

編集内容を保存せず終了したい場合は:q!を入力します。

user:~$ vi hello.txt
# 1) 編集モードへ
i
# 文字を入力したあと、2) コマンドモードへ戻る
ESC
# 3) 保存して終了
:wq

次節からは、ここで使ったキー操作をモード別に詳しく説明します。

コマンドモード

カーソル移動を受け付け、テキストの削除やコピー&ペーストなどの操作が可能なモードです。他モードの分岐点にもなります。

前提:現在の状態が編集モードやラストラインモードの場合は、一度ESCを押してコマンドモードに 戻ってから、以下で説明するキー操作をしてください。

カーソル移動(上:k、下:j、左:h、右:l

vimエディタでは、カーソル移動を全てキーボードで操作します。

移動方向とキーの対応は以下の通りです。

移動方向 対応キー
k または
j または
h または
l または

カーソルの行移動ggG<number>G

説明 対応キー
ファイルの先頭行に移動 gg
ファイルの末尾行に移動 G
ファイルの指定行に移動 <number>G

カーソル位置の文字を削除するx

文字を削除する操作です。
xを押すたびに、文字が1文字ずつ削除されていきます。

次は以下のテキストファイルから「このサイトはIT技術に関する技術ブログです。」を消す例です。 まず、3行目の行頭にカーソル位置を移動します。

その後、xを押して文字を消していきます。

今回は「このサイトはIT技術に関する技術ブログです。」の22文字分だけxを押すことでその文面を削除できました。

1行をコピーする(Yank)yy

対象の行にカーソルを合わせてyyを押すことで、その行をコピーすることができます。

次はyyを押して、以下のテキストファイルの3行目をコピーする例です。

通常、yyを押しただけでは、対象行がメモリにコピーされるだけなので見た目は変わりません。 コピーした行をペーストするには続けてpを押します。

複数行をコピーする(Yank)<number>yy

対象の行にカーソルを合わせて、そこから<number>行分をコピーすることもできます。

次は6yyを押して、以下のテキストファイルの3行目から9行目コピーする例です。 3行目にカーソルを移動した上で6yyを押すことでコピーできます。

通常、6yyを押しただけでは、対象行がメモリにコピーされるだけなので見た目は変わりません。 コピーした行をペーストするには続けてpを押します。

1行をカットする(Delete)dd

対象の行にカーソルを合わせてddを押すことで、その行をカットすることができます。

次はddを押して、以下のテキストファイルの3行目をカットする例です。 まず、テキストの3行目にカーソルを移動します。

次にddと入力します。

すると、対象行の3行目がカットされ、その内容がメモリにコピーされます。 通常、コピーした行をペーストするには続けてpを押します。

複数行をカットする(Delete)<number>dd

対象の行にカーソルを合わせて、そこから<number>行分をカットすることもできます。

次は6ddを押して、以下のテキストファイルの3行目から9行目をカットする例です。 まず、3行目にカーソルを移動します。

次に6ddと入力します。

すると、3行目から9行目がカットされ、その内容がメモリにコピーされます。 通常、コピーした行をペーストするには続けてpを押します。

行をペーストする(Put)p

yyddでコピーした行をpを押すことで カーソル行の次の行にペーストすることができます。

次は3行目をyyでコピー(yank)して、その内容を最終行にペーストした例です。

yyでメモリにコピーした3行目がペーストされることが確認できます。

操作を取り消す/やり直す(Undo/Redo)uCtrl+r

編集中に直前の操作を取り消したいときはuを押します。 取り消した操作をやり直したいときはCtrl+rを押します。

例えば、文字を削除した後にuで元に戻し、 さらにCtrl+rで再度削除状態へ戻すことができます。

編集モード

テキスト入力を受け付けるモードです。

前提:現在の状態がラストラインモードの場合は、一度ESCを押してコマンドモードに 戻ってから、以下で説明するキー操作をしてください。また続けて別のキー操作をしたい場合も一度ESCを押してください。

カーソル位置で編集モードに移行する(insert)i

現在のカーソル位置を開始地点として編集モードに移行します。続いてテキスト入力をすれば、カーソル位置に入力テキストが挿入されます。

次は「viエディタの使い方」という文字列の7文字目に「基礎的な」という文字列を挿入してみた例です。 まず、カーソル位置を「viエディタの」の箇所まで移動します。

次にiを入力することでその位置で編集モードに移行します。 (画面下部にINSERT(または'挿入')と表示されます。)

後はキーボードで「基礎的な」と入力するだけです。

この後にテキスト編集以外の操作をしたければ、ESCでコマンドモードに戻ります。 (このとき、画面下部のINSERT(または'挿入')の表示が消えます。)

カーソル位置の1つ後ろを開始地点として編集モードに移行する(append)a

例えば、「viエディタの使い方」の行頭をカーソル位置としてaを入力すると、 「v」と「i」の間から文字の挿入が開始されます。

カーソル行の次の行頭を開始地点として編集モードに移行する(open)o

例えば、テキストの2行目でoを入力します。

すると、改行処理によって3行目が新規で作られ、編集モードに移行します。

ラストラインモード

前提:現在の状態が編集モードの場合は、一度ESCを押してコマンドモードに 戻ってから、以下で説明するキー操作をしてください。

例えば、以下のテキストファイルの中から「OpenWrt」という文字列を探してみます。

まず、/を入力すると、画面下部に「/」と表示されますので 続けて「OpenWrt」と入力します。

Enterを押すと検索が開始され、発見した「OpenWrt」の文字列の先頭まで カーソル位置が移動します。

もし、同じ文字列を再検索したいときは、/だけを入力してEnterを 入力します。今回の場合では「OpenWrt」という文字列を検索対象として、現在のヒット位置から再検索を始めます。

なお、発見した文字列がそのファイルの出現順序の中で最後の場合は「search hit BOTTOM, continuing at TOP」と 表示され、再度検索するときは先頭行から始まります。

既存ファイルの変更を保存する:wor:wq

:wを押すことで既存ファイルに対する変更を保存することができます。 このとき、代わりに:wqを押すと、既存ファイルの変更を保存してviエディタを終了します。

新規ファイルに名前を付けて保存する:w <file>or:wq <file>

:w <file>で、新規ファイルに名前付け<file> をして、変更内容を保存します。 このとき、代わりに:wq <file>を押すと、新規ファイルの名前付けと保存をした後にviエディタを終了します。

vimエディタの終了:q

viエディタを終了する操作です。
このとき、開いたファイルに変更を加えていた場合、No write since last change (add ! to override)と表示され:qを押してもviエディタを終了することが出来なくなります。

この場合、:q!で強制終了することができます。

vimエディタの強制終了:q!

viエディタを強制終了する操作です。
:q!を押したときに開いているファイルに対する変更が存在した場合、その変更を破棄した上でviエディタを終了します。

おわりに

今回はviエディタの使い方について紹介しました。

細かい操作を含めると、ここでは紹介していないもの数多くあります。

興味が沸いたら調べて使ってみることをおすすめします。 ※公式ドキュメントは参考文献のURLから

参考文献