このチュートリアルでは、強力なビジュアル・エディターである vi の使い方を説明します。このチュートリアルで目指しているのは、習得を早めるチート・シート手法を使うことで、長い時間をかけずに vi を使いこなせるようになることです。ファイル内での移動、テキストの編集、挿入モード、テキストのコピー・アンド・ペーストなどの操作方法、そしてビジュアル・モードやマルチウィンドウ編集などの重要な Vim 拡張機能を使用する方法を短時間で学んでください。

Daniel Robbins, President/CEO, Gentoo Technologies, Inc.

Daniel Robbins は、ニュー・メキシコ州アルバカーキ在住の、Gentoo Technologies, Inc. の代表取締役/CEO です。Gentoo Project の主任アーキテクトであり、MacMillan 社から出版されている『Caldera OpenLinux Unleashed』、『SuSE Linux Unleashed』、『Samba Unleashed』など数冊の本の寄稿者でもあります。彼がコンピューターに関わりを持ち始めたのは、小学 2 年生のときに Logo プログラミング言語およびパックマンの秘められた魅力に出会ってからのことです。これがおそらく、彼が SONY Electronic Publishing/Psygnosis でグラフィック・アーティストのリーダーとして働き始めた理由でしょう。余暇は妻の Mary と生まれたばかりの娘 Hadassah との時間を楽しんでいます。



2012年 12月 13日

始める前に

このチュートリアルについて

vi エディターは、UNIX および Linux で事実上の標準となっているテキスト・エディターです。vi エディターはほぼすべてのシステムに備わっていて、Windows、DOS、Macintosh、OS/2、SGI をはじめとする多くのプラットフォームで使用することができます。皆さんが vi を知らなかったり、使い慣れていなかったりする場合は、このチュートリアルに従うことで、最もよく使われている強力な Linux/UNIX ビジュアル・エディター・プログラムを十分に理解してください。

目的

このチュートリアルの主な目的は、vi を短時間で習得できるようにすることです。vi の習得を難しくしている原因の 1 つは、vi のコマンドの数が多いことです。vi を有効に活用するには、相当な数のコマンドを覚えなければなりませんが、それには時間がかかります。このチュートリアルでは、皆さんに時間を取らせることなく vi を習得してもらうことも目標としていることから、第一に課題となるのは、短時間で多数のコマンドを覚えるための手段です。

この課題に対処するべく、このチュートリアルでは説明と並行して vi の「チート・シート」を少しずつ作成していき、最終的にはすべての重要な vi コマンドを記載したチート・シートを完成させます。チュートリアルを終えた後に、特定のコマンドを忘れてしまったときには、このチート・シートを参照できるようにします。やがてコマンドを覚えていくにつれ、このチート・シートに頼らなくなってくるはずです。

前提条件

このチュートリアルを進めるにあたっての前提条件はありません。チュートリアルでは学習に役立ついくつかの手法を使用します。まず、当然のことながら、ある特定のコマンドがどのように機能するのかを説明します。説明の後で、(練習のために) そのコマンドを vi で使ってみます。そして最後に、(後で参照できるように) コマンドをチート・シートに書き写します。vi を短時間で習得するには、このすべてのステップを実行することが重要です。vi で実際にコマンドを使ってみたら、そのコマンドをチート・シートに書き写すことが、コマンドを覚える上で役立ちます。

システム要件

vi には多くの互換エディターがありますが、このチュートリアルでは「Vim」と呼ばれる互換エディターを使用する方法を説明します。Vim は非常によく使われているエディターで、vi をさらに優れたものにする多数の拡張機能を備えています (このチュートリアルでは、Vim に固有のコマンドについて説明するときには、その旨を注記します)。Vim をインストールするには、チュートリアルの最後の「参考文献」に記載されている Vim のホーム・ページへのリンクにアクセスしてください。Vim は、ターミナル・ウィンドウまたはターミナル・セッションで動作するテキスト・エディターです。図 1 に、このチュートリアルの XML ソースをターミナル・ウィンドウで開いた状態の Vim のスクリーン・ショットを示します。

図 1. 実行中の Vim
Vim のスクリーン・ショット

Vim では、vi のコマンドラインを機能強化したのに加え、gvim という名前の優れた GUI エディターも実装しています。図 2 に、上記と同じ XML ソースを表示する gvim のスクリーン・ショットを示します。

図 2. 実行中の gvim
gvim のスクリーン・ショット

vi の初心者の方には、お使いのシステムで gvim を実行することをお勧めします。GUI から vi を使用するほうが、初心者にとっては操作が少し簡単です。


vi でのナビゲーション

ファイルの選択

vi を使ってファイルを編集するには、その前に、vi でファイル内を移動する方法を知っておく必要があります。vi には多数の移動コマンドがあるので、これからさまざまな移動コマンドを取り上げていきます。このセクションで使用できるように、重要でない何らかのテキスト・ファイルを見つけて、以下のコマンドを入力して vi にロードしてください。

$ vi myfile.txt

Vim をインストール済みの場合は、「vim myfile.txt」と入力します。gvim を使用する場合は、「gvim myfile.txt」と入力します。myfile.txt の部分は、お使いのシステム上にあるテキスト・ファイルの名前に置き換えてください。

vi のロードが完了すると、ロードしたテキスト・ファイルの一部が画面に表示されます。おめでとうございます! vi が立ち上がりました。他の多くのエディターとは異なり、vi の起動時には、「コマンド・モード」という特殊なモードがアクティブになっています。この状態でキーボードの l (エル) を押すと、ファイルで現在カーソルが置かれている位置に「l」(エル) という文字が挿入される代わりに、カーソルが 1 文字分、右に移動します。コマンド・モードでは、キーボードの文字キーを使って vi にコマンドを送信します。文字キーを押しても、テキストにその文字は挿入されません。数あるコマンドのうち、最も重要なコマンドの 1 つが移動コマンドです。これから、そのいくつかについて説明します。

vi 内での移動

コマンド・モードでは、h、j、k、l (エル) の各キーを使って、カーソルをそれぞれ左、下、上、右に移動することができます。vi の最近の互換エディターを使用しているとしたら、矢印キーを使って移動することもできます。h、j、k、l (エル) キーを使い慣れてくると、キーボードのホーム・ポジションから指を離すことなくファイル内を移動できるので便利です。ここで、h、j、k、l (エル) キー (および矢印キー) を使ってテキスト・ファイル内を移動してみてください。また、h キーを使って行の先頭までカーソルを移動させ、行の先頭文字のところにカーソルがある状態でさらに h キーを押しても、vi では前の行にカーソルが移動しないことに注意してください。同様に、行の末尾で l (エル) キーを押してもカーソルは次の行に移動しません。

vi では、現在の行の先頭または末尾にジャンプするための特殊なショートカットとして、0 (ゼロ) を押すと行の先頭文字にジャンプし、$ を押すと行の最後の文字にジャンプします。この 2 つのショートカットを試して、その動作を確認してください。vi は、その有り余るほどの便利な移動コマンドにより、(more コマンドや less コマンドのような) 素晴らしい「ページャー」になります。vi をページャーとして使用すると、すべての移動コマンドを素早く学ぶのにも役立ちます。

^F (Ctrl+f) と ^B (Ctrl+b) を使用して、ページ単位で前後に移動することもできます。vi の最近の互換エディター (Vim など) では、ページ単位での移動に PgUp (ページ・アップ) キーと PgDn (ページ・ダウン) キーも使用できるようになっています。

単語単位での移動

vi では、単語単位で左または右に移動することもできます。次の単語の先頭文字に移動するには w を押し、次の単語の最後の文字に移動するには e を押します。また、前の単語の先頭文字に移動するには b を押します。これらの操作を試してください。

単語単位での移動コマンドを試してみて、例えば foo-bar-oni という単語は、vi では 5 つの単語とみなされることにお気付きの方もいるのではないでしょうか。vi は単語の区切り文字のデフォルトとして、スペースの他にピリオドやコンマなどの記号を用いるため、foo-bar-oni は、「foo」、「-」、「bar」、「-」、および「oni」という 5 つの単語として認識されます。

このような単語の扱いが望ましいこともあれば、そうでない場合もあります。幸い、vi は「ビッグ・ワード」の概念も理解します。ビッグ・ワードの場合、vi が単語を区切るのはスペースまたは改行だけです。つまり、foo-bar-oni は、vi ワードとしては 5 つの単語ですが、vi ビッグ・ワードとしては 1 つの単語として認識されます。

次または前のビッグ・ワードに移動するには、単語単位での移動コマンドを大文字にして使用します。次のビッグ・ワードの先頭文字に移動するには W、次のビッグ・ワードの最後の文字に移動するには E、前のビッグ・ワードの先頭文字に移動するには B を押します。単語単位の移動コマンドとビッグ・ワード単位の移動コマンドの違いを理解できるようになるまで、これらの移動コマンドを試してください。

さらに大きな単位での移動

チート・シートにまとめる前に、取り上げなければならないコマンドがまだいくつか残っています。例えば、「(」記号や、「)」記号を入力すると、前の文の先頭や、次の文の先頭に移動することができます。さらには、「{」記号や、「}」記号を入力すると、現在の段落の先頭や、次の段落の先頭に移動することもできます。これらの操作も試してください。

終了

ここまで基本的な移動コマンドについて説明してきましたが、他にも知っておかなければならないコマンドがいくつかあります。例えば、「:q」と入力すると、vi を終了することができます。このコマンドを入力して終了できない場合は、ファイルに誤って何らかの変更が加えられていることが考えられます。変更を破棄して vi を終了するには、「:q!」と入力します。これによって、コマンド・プロンプトに戻ります。

vi では、「:」(コロン) で始まるコマンドは、すべて「ex モード」のコマンドと呼ばれます。これは、vi には「ex」という非ビジュアル・エディターが組み込まれているためです。ex モードは、行単位の編集操作を行うために、sed と同じように使用することができます。さらに、上記で説明した終了操作に使用することもできます。コマンド・モードから ex モードに切り替えるには Q キーを押します。ex モードに切り替わると、「:」プロンプトが表示されます。この状態で Enter キーを押すと、画面全体が上にスクロールされます。慣れ親しんだ vi モードに戻るには、「vi」と入力して Enter キーを押せばよいのです。

チート・シートの作成を開始します

すでに多くのコマンドを学んだので、早速チート・シートにこれらのコマンドを書き写します。チート・シートには、US レター・サイズまたは A4 サイズの用紙を使用してください (このチート・シートには大量の情報を書き込むことになるからです)。図 3 に示しているのは、これまでに学んだすべてのコマンドを書き写した私のチート・シートです。できるだけこのレイアウトに従って、すべての情報を 1 枚のシートに記載できるようにしてください。

図 3. vi コマンドを書き込んだチート・シート
vi コマンドを書き込んだチート・シートの図

編集と保存

さまざまな移動操作

引き続き、次々とコマンドを説明していきます。コマンド・モードでは、「<行番号>G」と入力すると、指定した行にジャンプすることができます。例えば、ファイルの先頭行にジャンプするには、「1G」と入力します。「G」は大文字であることに注意してください。

特定のテキスト・パターンの次の出現箇所にジャンプする場合は、「/<正規表現>」と入力して Enter キーを押します。<正規表現> の部分には、検索対象としているテキスト・パターンの正規表現を指定します。正規表現の使い方がわからなくても心配する必要はありません。例えば、「/foo」と入力すれば、foo の次の出現箇所に移動します。唯一注意が必要なのは、「^」、「.」、「$」、または「\」の文字を参照する場合です。これらの文字の前にはバックスラッシュ (\) を追加しなければなりません。例えば、「/foo\.gif」とすると、「foo.gif」の次の出現箇所が検索対象となります。

検索を順方向で繰り返すには、n を押します。逆方向で繰り返す場合は N を押します。例によって、これらのコマンドをご自分の vi エディターで試してみてください。

保存、名前を付けて保存

先ほど、vi を終了するには ex コマンド「:q」を使用できることを説明しましたが、変更内容を保存する場合は、「:w」と入力します。変更内容を別のファイル filename.txt に保存するには、「:w filename.txt」と入力します。ファイルを保存して終了するには、「:x」または「:wq」と入力します。

Vim (およびその他の vi 互換エディター (Elvis など)) では、一度に複数のバッファーを開くことができます。ファイル filename.txt を新しいウィンドウで開くには、「:sp filename.txt」と入力します。すると、分割された新しいウィンドウに filename.txt が開き、編集できる状態になります。ウィンドウを切り替えるには、「^w^w」と入力 (Ctrl+w を 2 回入力) します。「:q」、「:q!」、「:w」、および「:x」コマンドの入力は、いずれも現在アクティブになっているウィンドウに適用されます。

単純な編集操作

次は、単純な編集コマンドについて説明します。ここで取り上げるコマンドは、コマンド・モードの状態を維持することから、「単純」なコマンドとみなしています。「複雑」な編集コマンドの場合は、自動的に挿入モードに切り替わります。挿入モードとは、キーボードから文字データを入力できるモードのことです。文字データの入力については、この少し後で説明します。

まずは、何らかの文字に移動して、x キーを繰り返し押してください。x を押すと、現在カーソルがある文字が削除されることがわかります。次は、テキスト・ファイルの段落の中央に移動して、J (大文字) を押してください。J コマンドにより、vi は前の行と現在の行の最後までを連結します。今度は任意の文字に移動し、r を押してから新しい文字を入力します。この操作では、元の文字が置き換えられます。最後に、ファイル内の任意の行に移動して、「dd」と入力してください。「dd」は、現在のテキスト行を削除します。

繰り返しと削除

「.」キーを押すと、すべての編集コマンドを繰り返すことができます。試しに、「dd...」と入力してみてください。すると、4 つの行が削除されます。また、「J...」と入力すると 4 つの行が結合されます。例の如く、vi は便利なショートカットも用意しています。

テキストを削除するには、d コマンドと移動コマンドを組み合わせて使うこともできます。例えば、「dw」は、現在の位置から次の単語の先頭までを削除します。「d)」は、現在の位置から次の文の終わりまでを削除します。「d}」は、現在の位置から段落の終わりまでを削除します。d コマンドとその他の編集コマンドを快適に使えるようになるまで、いろいろと試してください。

元に戻す!

削除操作を試している今、変更を元に戻す方法を学ぶにはちょうど良いタイミングです。オリジナルの vi では、u を押して直前の編集だけを元に戻すことができましたが、vi の最近の互換エディター (Vim など) では、繰り返し u を押すことで、ファイルに加えた変更を連続して元に戻すことができます。d コマンドと u コマンドを組み合わせて試してみてください。

チート・シートを更新してください

このあたりでチート・シートを更新しておきましょう!このセクションで説明したすべてのコマンドを追加した後のチート・シートは、図 4 のようになっているはずです。

図 4. vi 編集コマンドを追加したチート・シート
vi 編集コマンドを追加したチート・シートの図

挿入モード

挿入モードの基礎

これまで、vi でのファイル内の移動方法、ファイルを開いたり閉じたりする方法、そして基本的な編集操作を行う方法を説明しましたが、フリー・フォームのテキストを実際に入力する方法についてはまだ説明していません。これは意図的なものであり、vi の挿入モードは最初に説明するには少し複雑であるからです。しかし、いったん慣れてしまえば、その複雑さ (そして柔軟性) が長所になります。

vi の挿入モードでは、他の多くのビジュアル・エディターと同じように、テキストを直接画面に入力することができます。変更の入力作業が完了した後、エスケープ・キーを押すと、コマンド・モードに戻ることができます。挿入モードに切り替えるには、i または a を押します。i を押した場合は、テキストが現在の文字の前に挿入され、a を押した場合はテキストが現在の文字の後に追加されます。テキストを入力した後は、エスケープ・キーを押してコマンド・モードに戻ることを忘れないでください。

挿入モードの利点

早速、a コマンドと i コマンドを使ってみてください。まず、a または i のいずれかを押して、何らかのテキストを入力した後、エスケープ・キーを押してコマンド・モードに戻ります。次に、a または i を押した後、Enter キーを押すとどうなるのかを見てください。さらに、矢印キーと Delete キーを使って、挿入モードがどのような動作をするのか確かめてください。矢印キーと Delete キーを使用することで、挿入モードへ切り替えたり、挿入モードを終了したりを繰り返さなくても、重要な編集作業を行うことができます。

挿入オプション

挿入モードに切り替えるには、他にも便利な方法がいくつかあります。まず、A (大文字) を押すと、現在のカーソル位置が行のどこであるかに関わらず、現在の行の終わりにテキストが追加されます。同様に、I (大文字のアイ) を押すと、現在の行の先頭にテキストが挿入されます。o を押すと、現在の行の下に新しい空白行が追加され、そこにテキストを挿入することができます。O (大文字のオー) を押すと、新しい空白行は現在の行の上に追加されます。現在の行全体を新しい行に置き換えるには、「cc」と入力します。現在の位置から行の最後までを置き換えるには、「c$」と入力します。一方、現在の位置から行の先頭までを置き換えるには、「c0」と入力します。

これらのコマンドはいずれも特殊な操作を行うだけでなく、挿入モードへの切り替えを行うため、テキストを入力した後は、エスケープ・キーを押してコマンド・モードに戻ってください。

テキストの変更

c (変更) コマンドは、今までの説明で「cc」、「c0」、「c$」と入力するときに使用しました。cc は、dd と同じように、特殊な形の変更コマンドです。c0 コマンドと c$ コマンドは、移動コマンドと組み合わせて変更コマンドを使用する例であり、この形式での c コマンドは、d と同じように機能します。ただし、d とは異なり、挿入モードの状態を維持するので、削除した領域に代わりのテキストを入力することができます。c にいくつかの移動コマンドを組み合わせて、ファイルで試してみてください (ヒント: 「cW」、「ce」、「c(」)。

複合コマンド

vi がまさにその実力を発揮するのは、「d{」や「cw」などの複合 (「コンボ」) コマンドを使用する場合です。これらのコマンドに加え、移動コマンドに数字を組み合わせることもできます。例えば「3w」と入力すると、vi は 3 文字分右にジャンプします。移動「コンボ」コマンドの例には、「12b」、「4j」などもあります。

vi では、数字と移動コマンドを組み合わせられるだけでなく、d または c を数字あるいは移動コマンドと組み合わせることもできます。つまり、「d3w」は次の 3 つの単語を削除し、「d2j」は現在の行と次の 2 行を削除するといった具合です。c と d の複合コマンドをいくつか試して、vi での編集がいかに強力かつ簡潔なものであるかを感じ取ってください。これらの複合コマンドを自然に使えるようになると、驚くほどの速さでファイルを編集することができます。

再びチート・シートを更新してください

ここで再びチート・シートを更新します。図 5 に、ここまでの時点でのチート・シートを示します。

図 5. 複合 vi コマンドを追加したチート・シート
複合 vi コマンドを追加したチート・シート

生産性機能

ここまでのところ、順調です・・・

これまで、ファイル内を移動する方法、ファイルを保存する方法、vi を終了する方法、単純な編集や削除をする方法、そして挿入モードを使用する方法について説明しました。このすべてがチート・シートに記載されているので、vi を使ってほぼあらゆるタスクを行うことができます。

その一方で、vi には他にもさらに強力なコマンドが多数あります。このセクションでは、切り取り、コピー・アンド・ペースト、検索と置換、そして自動インデントの機能を説明します。これらのコマンドは、vi での作業をより楽しくて生産的なものにするはずです。

ビジュアル・モード

カット・アンド・ペーストを行うには、ビジュアル・モードを使用するのが最善の方法です。この特殊なモードは、vi の最近の互換エディター (Vim や Elvis など) に追加されています。ビジュアル・モードは、「テキスト強調表示」モードのようなものだと考えてください。強調表示されたテキストは、コピーまたは切り取りをした後で、貼り付けることができます。

ビジュアル・モードに切り替えるには、v を押します。ビジュアル・モードに入ると、エディターの左下に「VISUAL」という文字が表示されます (図 6 を参照)。この状態になったら、移動コマンド (通常は矢印キー) を使用してカーソルを移動し、テキストの領域を強調表示できるようになります。ウィンドウ・マネージャーにマウス・キーの機能がない場合には、マウスの左ボタンを押して特定の領域をドラッグすることで、そのテキスト領域を強調表示することもできます。

図 6. vi のビジュアル・モードを使用する
vi でビジュアル・モードを使用する

強調表示されたテキストは、切り取りやコピーをできる状態になります。テキストをコピーする場合は、y (「y」は「引っ張る」ことを意味する「yank」という単語の頭文字です) キーを押します。テキストを切り取る場合は d キーを押します。いずれの操作でも、キーを押すとコマンド・モードに戻ります。次に、切り取ったテキストまたはコピーしたテキストを挿入する位置までカーソルを移動して、P を押してカーソルの後に挿入するか、p を押してカーソルの前に挿入します。これで、カット・アンド・ペーストまたはコピー・アンド・ペースト操作は完了です!先に進む前に、カット・アンド・ペーストまたはコピー・アンド・ペースト操作を試してみてください。

テキストの置換

テキストのパターンを置換するには、ex モードを使用します。現在の行で出現する最初のパターンを置換する場合は、「:s/<正規表現>/<置換文字列>/」と入力してから Enter キーを押します。ここで、<正規表現> はマッチさせるパターンを表し、<置換文字列> は置き換える (置換後の) 文字列を表します。現在の行でマッチしたすべてを置き換えるには、「:s/<正規表現>/<置換文字列>/g」と入力して Enter キーを押します。さらに、「:%s/<正規表現>/<置換文字列>/g」と入力して、ファイル内で出現するこのパターンをすべて置き換えることもできます (通常はこの方法が使用されます)。一括置換を行う場合、それぞれの変更に対して vi にプロンプトを出させるには、「:%s/<正規表現>/<置換文字列>/gc」(「c」は「確認する」ことを意味する「confirm」という単語の頭文字です) を入力してから、Enter キーを押します。

インデント

ソース・コードを編集する場合に備え、vi ではオートインデントをサポートしています。vi の最近の互換エディター (Vim など) のほとんどでは、ソース・ファイル (例えば、.c ファイルなど) の編集時にオートインデント・モードを自動的に有効にします。オートインデントが有効になっている場合、^d (Ctrl+d) を使用して左に 1 インデント分移動し、^t (Ctrl+t) を使用して右に 1 インデント分移動することができます。オートインデントが自動的に有効になっていなければ、「:set autoindent」という ex コマンドを入力して、手動で有効にすることができます。また、タブ・サイズを任意の文字数に設定することもできます。それには、「:set tabstop」コマンドを使用します。このコマンドによる極めて一般的な設定は「:set tabstop=4」です。

チート・シートを仕上げます

これで、vi のチュートリアルは完了です!高度な編集コマンドのすべてを追加したチート・シートは、図 7 のような内容になります。

図 7. 生産性関連の vi コマンドを追加したチート・シート
生産性関連の vi コマンドを追加したチート・シートの図

まとめ

完成したチート・シートを手元に置いて、vi を使用してファイルの編集や e-メールの作成を開始し、必要に応じてチート・シートを参照してください。1 週間もしない内に、ほぼすべてのコマンドを暗記するようになるはずです。そうなれば、vi の生産性が急激に高まるはずです。

参考文献

学ぶために

製品や技術を入手するために

  • developerWorks から直接ダウンロードできる IBM ソフトウェアの試用版を使用して、Linux で次の開発プロジェクトを構築してください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=851424
ArticleTitle=vi 入門 ― チート・シート手法
publish-date=12132012