viはLinux標準のテキストエディタです。高機能ではあるのですが、メモ帳とは全く違う操作感のため非常につまづきやすいです。
viは便利な機能がたくさんあるのでCUIで操作する上で必須です!
まずは最低限度のviの使い方を紹介します。
viはメモ帳と何が違う?
初心者はviエディタを開いても「文字が打てない」のでつまずくと思います。
viは「コマンドモード」で立ち上がり、文字を入力するには「入力モード」に切り替える必要があります。
- コマンドモード
- 「i」を押す→入力モードへ
- 入力モード 文字が打てる
- 「Esc」押す→コマンドモードにもどる
- コマンドモード
コマンドモードでは複数行を消したり貼り付けたりを簡単に素早くできます。
初心者のうちは閲覧モードで立ち上がり、入力モードに切り替えるというように考えるとわかりやすいかもしれません。
次に書いた内容を保存できずにつまづくと思います。
viの内容を保存するにはコマンドモードでコマンドを打つ必要があるからです。
コマンドは「Esc」キーを押して「:wq」と入力すると保存できます。
初心者で使いこなすのに覚えるべきことをまとめます
- Escキー コマンドモードに入る
- 「i」キー 入力モードに入る (iはinsertのi)
- Escで「:wq」で保存終了
- EScで「!q」で保存せずに終了
この4つを覚えればメモ程度には使えるはずです。
詳しい使い方は下で説明します。
よく使うコマンド一覧
コマンドモードでは複数のコマンドが使えます。
最初のうちは便利さがわかりにくいですが、使いこなせるようになると作業効率がぐっと上がります。
最低限のよく使うコマンドを集めました。
- 「i」:カーソルの左側に文字入力モードに
- 「x」カーソル上の1文字消去
- 「dd」カーソル行を削除
- 「yy」カーソル行をコピー
- 「p」カーソル上にペースト
- 「u」取り消し
- 「:wq」保存して終了
- 「:q!」保存しないで終了
- 「:q」上書き保存
- 「Esc」コマンドモードに戻る
わけわからなくなったら「Esc」押して「:q!」で何とかなります。
慣れてきたら覚えておくと便利なコマンド
- 「I」コマンドモード時に行頭から入力開始
- 「A」コマンドモード時に行末から入力開始
- 「0」コマンドモード時に行頭に移動
- 「$」コマンドモード時に行末に移動
- 「H」コマンドモード時に文頭行に移動
- 「G」コマンドモード時に最終行に移動
特に文の一番最後にカーソルを持っていく「G」と行末にカーソルを移動する「$」を覚えておくと役立つと思います。
十字キーを使わずとも移動ができるのでホームポジションを崩さずに編集できます。
- ↑ k
- ↓ j
- → l
- ← h
viテキストエディタの使い方
viはコンソール上でテキストファイルと開くと使えます。
例えば
「sudo vi /etc/example/example.conf」
と打ち込むとviエディタでexample.confが開かれます。
viのコマンドモードと入力モード
viの特徴は2つのモードが存在するところです。
viを開いたときはコマンドモードです。
一方で、入力モードとは文字を打ち込んだり、改行したりするモードです。普通のテキストエディタと同じですね。
viが直感的に異なる点・ややこしい点は
- コマンドモードに使うコマンドを覚えるのが大変
- 入力モードでは文字削除が思い通りにできない
- 入力モードではコピーペーストがうまくできない
などがあります。
コマンドモードから入力モードへの移行「i」と「Esc」
viは初期状態がコマンドモードです。文字を入力するには、入力したい位置にカーソルを移動して「i」を押します。カーソルの左側に文字が入力されます。
逆にコマンドモードに戻るときは「Esc」を押します。
これが「vi」の基本です。
大・小文字を区別するのでCaps Lockをチェックしましょう。
入力モードに入る他のコマンド
大文字「A」:カーソル行の末尾に文字を入力する状態に
大文字の「I」:カーソル行の頭に文字を入力する状態に
コマンドモードの操作
削除
最も戸惑うのがテキストの削除だと思います。
最もよく使うであろう「Back Space」は使えません。またDeleteキーはカーソルの後ろの文字を削除できますが、改行を消去できません。
いろいろと問題があるのでviではコマンドモードで削除を行いましょう。入力中にミスしたら「Esc」キーを押してコマンドモードに戻って削除して、入力モードに戻るという感じです。
- 「x」カーソル上の1文字消去
- 「dd」カーソル行を削除
- 「数字dd」数字分行を削除:2ddは2行削除
が基本です。
一応viの上位互換版的「vim」やもっと直感的で扱いやすい「nano」などがありますが
コピペ
コピペもコマンドモードで行います。
削除操作は自動的に「切り取り」になっているのでそのままペースト操作をすれば貼り付けられます。(dd→p)
- 「yy」カーソル行をコピー
- 「p」カーソル上にペースト
元に戻す
コマンドモード中に「u」を入力すると直前の操作を取り消せます。
文字検索
コマンドモード中に「/検索したい文字列」を入力すると検索されます。次の候補は「n」を押すと移動します。前の候補は「N」で表示できます。
保存・終了操作
コマンドラインなので上書き保存ボタンや閉じるボタンはないのでコマンドを打ちます。コマンドモードで操作します。
- 保存して終了「:wq」
- 保存しないで終了「:q!」
- 上書き保存「:q」
行番号の表示
コマンドモード中に「:set number」と入力してエンターを押すと行番号が表示されるようになる。何行目にあるか?ということを見たいときには便利
ビジュアルモードで範囲コピーや削除
マウスがうまく使えないviで困るのは範囲コピーだと思います。複数行のコピーなど当たり前のこともviでやろうとすると戸惑うと思います。
Shift + Vでビジュアルモードというモードに入ります。ビジュアルモードでは複数行の選択が可能になるのでここでコピー「y」貼り付け「p」とすることで複数行のコピーや削除などが可能になります。
ちなみにこのビジュアルモードはvimの機能で、viにはありません。vimはほとんどviと同じものですが、このビジュアルモードの有無が大きな違いのひとつです。最近のディストリビューションにはvimが入っているので使えるとビジュアルモードは使えると思います。
また、vを押すと一文字単位の選択モードに入ります。
ctrl + v では矩形選択モードといって行途中で範囲選択できるようになります。
インデントを揃える
コピペした時などインデント(先頭のスペース)が揃わずにバラバラになってしまうことがあります。
設定ファイルやプログラムはインデントを揃えてやるほうが見やすくなりますが、多行のインデントを揃えるのは大変です。
viではインデントを揃えたい行を選択したあとに「=」を入力することでインデントを揃えることができます。
なぜviは不便に感じる?
viは昔のPC、UNIXで利用していたテキストエディタで当時のPCはマウスは普及しておらず、さらにカーソルキーなどの特殊キーがなかった時代であるため、viでは英数字などのキーのみで操作できるようにしてあります。
今の時代はGUIが当たり前でマウスも使えますが、そうでない時代にとってはviが便利だったということですね。今でもコマンドライン中心で動かす場合は使いこなせれば素早くテキスト編集できる利点があります。
今回はviを紹介しましたが、ほかにも「vim」「Emacs」「nano」がおすすめです。