vi エディタについて

UNIX システムにおいて、双璧とも言える代表的なエディタとして、以下の 2種類があります。

  • Emacs (イーマックス)
  • vi (ヴィーアイ)

Solaris とか Linux とか少しでもさわったことがある人なら必ず耳にすると思います。

私の経験からすれば、Emacs よりは vi 派が圧倒的に多い気がします。

一旦ターミナル上で vi コマンドを実行すると新しいファイルが開かれ、以下のようにカーソルがチカチカするだけの本当にシンプルな画面が表示されます。

vi 新規ファイル作成

$ vi test.txt

初めて vi 画面を見た人は恐らく これで何ができるの? と思うかもしれませんね。

Windows なら サクラエディタ秀丸 が一般的にも業務用としてもよく使われていて、マウスも普通に使えるので便利ですが、vi は基本的にマウス使えないという認識でいた方が良いです。

vi では基本的にキーボードしか使えないので、不便ではないかと思われるかもしれませんが、一旦慣れてしまえば Windows のエディタより全然便利ですし、編集スピードも Windows エディタに負けないくらい全然速い、機能だって豊富なんです。

逆にマウスを使わず、全ての操作をキーボードだけでやっちまうところが vi の強みではないかと思っています。

vi ってなんでマウス使えないの?

ちなみに、vi が開発された当時には、マウスがまだ発明されてない時代だったので、マウスを使うという発想がそもそもありませんでした。 そのため、マウスがなくても機能するように作られています。

文字列置換、検索のような基本的な機能は普通に使えるので、その辺は心配しなくても良いです。

vi は、最初の一歩が大事 : 矢印は封印しよう

一旦サーバにログインすると何かしらコマンドを実行するなり、コンフィグを確認したり、編集したり、シェルスクリプト・コードを書いたり、コンパイルしたりするわけですが、場合によっては長時間作業することもあるでしょう。

矢印を使わないでほしい理由については、ファイル編集中にカーソルを移動する度に矢印キーを使うと、その動きの積み重ねによって段々手首に負担がかかります。

IT 業界に勤めている人 (特に現役エンジニア) の場合には、一日中パソコンと向き合わなければならないのが現実ですから、ただでさえ視力も段々落ちきて悲しいのに、手首まで行っちゃうとさすがに落ち込みますね。

矢印を使わないことによって得られるメリットと言えば、

  • 矢印を使うより手首に負荷がかからない
  • 矢印を使わない分、余計な動作が減るので、編集スピードアップにつながる

そんなわけで、vi を使うときだけでも矢印は封印しましょう。

矢印キーを使わない代わりに、以下のキー h、j、k、l を使いましょう。

まとめると以下になります。

h (←)j (↓)k (↑)l (→)

逆に、矢印キーを使ったほうが分かりやすくてよくない? と思う方もいるかもしれませんが、慣れてしまえばこれだけ便利なものはないと。 きっと思えるようになるはずです。

とりあえず、指先の感覚でカーソルを動かすだけで良いです。 それをやり続けると体が覚えるので、特に、j は、↓k は、↑ というふうに頭の中に暗記する必要はありません。

どっちかと言うと好みの問題でもありますが、使わないほうが良いのではないかと思います。

とりあえずファイル編集が出来るようになることを目指す

vi で最低限のファイル編集が出来るようになることを目標にします。

最初は以下を覚えるだけで十分です。

  • 文字入力
  • 文字削除
  • 行追加
  • 行削除
  • 行コピー
  • 貼り付け
  • ファイル保存

ここでは、以下の順番通りにファイルを編集し、保存・終了するまでの流れについてご紹介します。

  • 文字入力
  • 行コピー
  • 貼り付け
  • 貼り付け
  • 行を追加し、文字入力
  • 行削除
  • 行削除
  • 文字削除
  • 編集内容を保存して終了

おかしいなと思ったら「Esc」

最初は、何か文字を入れてみようとキーボードを打つんですけど、文字が入力されなかったり、変な動きするんですよね?

そのときには、迷わず Esc を押してください。

Esc キーは、現在、活性化されているモードから抜ける。 キャンセルする時に使います。

基本的に 1回押すだけで良いですが、1回だけじゃ不安だからと言って何回か連打する人もいます。 それでも別に問題ありません。

vi のモードについて

ちらっと モード の話が出てきましたが、vi には 3つのモードが存在します。

・vi モード (vi mode)

・入力モード (input mode)

・コマンドモード (command mode)

実際にこの後一通り経験することになりますが、簡単に説明しますと、矢印で移動できる普通の状態 (Esc キーを押した状態) が vi モード です。

また、文字列を入力できる状態になったらこれを 入力モード と言い、vi に何か命令を送れる状態を コマンドモード と言います。

とりあえず、軽く覚えておいて実際の使い方はこの後説明します。

Step 1. 文字列入力 : 文字を入力する前に「i」、入力し終わったら「Esc」

先ほど言ったように、文字を入力しようとキーボードを打ったんだけど、文字が入力されないんですよね?

それもそのはず、vi では、文字を入力するためには、これから文字を入力するんだよー と先に vi に伝えなければなりません。

すなわち、入力モードに切り替える必要があります。

入力モードに入るためには、先に input を意味する i を押す必要があります。

そうすると以下のようにターミナルの左下に -- 挿入 -- と表示されるようになるので、この状態で文字を入力してください。 慣れてきたら一々確認しなくても良くなりますが、この状態を 入力モード と言います。

vi 入力モード

Input Mode

ここでは、テストです! と入力します。

vi 文字入力

Input Mode

Step 2. コピー & ペースト

文字入力が終わったら Esc を押して、入力モードから抜けてください。

そうすると以下のように普通の状態に戻ります。 この状態が先ほど説明した vi モード です。

この状態で現在のカーソル行をコピーしたい場合には、yy または、Y を押すと、カーソル行の内容がバッファーに保存されるようになります。 (vi ではこれを ヤンク と言います)

vi 行コピー

Vi Mode で行コピー (ヤンク) : 小文字「y」を 2回押すか、大文字「Y」を 1回押すと現在の行がコピーされる。

貼り付けは、pastep を押すだけです。

そうすると以下のように、バッファーに保存されている内容が貼り付けられます。

vi 行貼り付けその1

Vi Mode : 貼り付けるためには「p」を押す

バッファーに保存されている内容は、何回も貼り付けられるので、も一回 p を押してみます。

そうすると以下のように、同じ行がもう一行増えます。

vi 行貼り付けその2

Vi Mode : もう一回「p」を押して貼り付け

Step 3. 新しい行を追加し、文字入力

新しい行を追加するためには、open lineoを押します。 そうすると現在カーソルの下に新しい行が追加されると同時に、入力モードに入ります。

vi 新しい行追加

Input Mode : VI Mode で「o」を押すと新しい行が追加されると同時に入力モードに入る

後は、先ほどと同じやり方で 新しい行を追加すると同時に文字入力 を入力し、入力し終わったらEscを押して、入力モードから抜けてください。

vi 新しい行追加後の文字入力

入力が終わったら「Esc」

Step 4. 一行削除

上記の状態で、ddを押すと先ほど入力した行が削除され、以下のようになります。

vi 一行削除その1

前の画面で「d」を 2回押すと 1行削除され、こうなる

上記の状態で、もう一回ddを押すと以下のようになります。

vi 一行削除その2

前の画面で「d」を 2回押すと 1行削除され、こうなる

Step 5. 一文字削除

行単位ではなく、一文字ずつ削除したい場合には、x を押してください。

以下の例では、上記画面の状態で 2行目の テストです! (6文字) を削除するために、xを 6回押しています。 そうすると以下のようになります。

vi 一文字削除

Vi Mode で「x」を 1回押すと 1文字削除される

Step 6. 保存して終了

最後は、ファイルを保存して終了します。

ファイルを保存する際にも、これからファイルを保存するんだよー と特定のキー コロン : を押す必要があります。

そうすると以下のように、一番下に入力プロンプトが表示されるようになります。 この状態が先ほど言った コマンドモード です。

・ コマンドモード上でファイルを保存するためには、writew を入力し、Enter

・ ファイルを保存してから終了したい場合には、write quitwq を入力し、Enter

vi 編集内容保存・終了

Command Mode : ファイルを保存するだけなら「w」、ファイルを保存して終了するなら「wq」

これで、無事にファイル編集が完了しました。

vi 編集完了

終わりに

vi モード、入力モード、コマンドモードで使える機能、ショットカットキーはこれ以外にもっとありますが、vi を初めて触る人ならこれくらい分かってれば十分ではないかと思います。

元に戻す u

やり直し Ctrl + r

単語単位で削除する delete worddw

単語単位で置換える change wordcw

ページ送り Ctrl + f

ページ戻り Ctrl + b

等、色々ありますが、よく分からなければ、無鉄砲ですけど、普通に x キーで削除できますし、分量が少ない時はページ送りを使わなくてもカーソルを動かして移動することもできるので、最初のうちはまず、基本的な使い方を確実に覚えた方が良いのではないかと思います。

UNIX、Linux システム内での開発が求められる現場では、コーディングだってほとんど vi 使うので、サーバー屋さん、プログラマー関係なく、IT 業界に携わっているエンジニアであれば、vi 覚えて損はないかなと思います。

もう一歩踏み入った使い方については、今度また紹介したいと思います。

最初は思うように操作できなかったりするかもしれませんが、あきらめずに一つ一つ試して見てください。

vi は、いじってるうちに あれもできるんじゃないの?これもできるんじゃないの? ってどんどん興味が沸いてくるエディタなので、気付けば立派に vi の虜になっている自分に気付くかもしれません。

以上、vi を始めようとする人が最初に覚えるべきこと でした。