Perl開発者のためのLinux入門

vi - コマンドライン用のテキストエディタ

viは、コマンドラインから実行できるLinuxにデフォルトで付属するテキストエディタです。

Linuxを使ったときに困るのは、文書の編集を直接行うには、どうしたらよいのだろうということですね。

Linuxでは、Webサーバーの設定やデータベースサーバーの設定を、コマンドラインから設定ファイルを編集して行うということをよくやります。

viというコマンドライン用のテキストエディタは、初めて使う人にとっては、使うのが少し難しいエディタです。

グラフィカルなGUIのエディタに慣れた人にとっては、Linuxを使いこなすための最初の難関となると思います。

マウスが使えないので、すべての操作をキーボードで行う必要がありますし、編集モードという概念もあります。

viを実行してみよう

まず最初に空のファイルでviを実行してみましょう。

テキストファイルの作成

テキストファイルを作成するには次のようにします。

vi テキストファイル名

viの引数にファイル名を渡すと、テキストが存在しない場合は新規に作成してくれます。foo.txtというファイルを作ってみましょう。

vi foo.txt

viが立ち上がると思います。

viエディタを終了する

ここで初心者が困るのは、viエディタを終了する方法をわからないということだと思うので、これだけは覚えてしまいましょう。以下の手順になります。

Escを押す

Escを押すことでviはコマンドモードというモードに変わります。viには、文字を編集するためのモードと、コマンドを実行するための二つのモードがあり、viエディタを終了するためには、まず最初にEscを押して、コマンドモードにする必要があります。

次に「:q」と入力しましょう。

:q

「:q」と入力してEnterを押してください。viエディタを終了します。qというエディタを終了させるコマンドを実行しています。コロン「:」はコマンドの前に必要になります。

保存しないで強制終了する

編集内容を保存しないで強制終了するためのコマンドも覚えておきましょう。viエディタでは、エディタの内容に変更がある場合は、qコマンドでは終了することができません。

保存しないで強制終了するにはq!コマンドを使います。Escを押してコマンドモードに変更してから以下のように入力してEnterを押します。

:q!

編集内容の保存

編集内容を保存するには「w」コマンドを使用します。Escを押して、コマンドモードにしてから「:w」と打ってEnterを押すと保存できます。

:w

編集内容を保存して終了

もうひとつ保存して終了も覚えておきましょう。wqコマンドを使用します。Escを押して、コマンドモードにしてから「:wq」と打って、Enterを押すと保存して終了できます。

:wq

三つの終了方法を覚えておけば、間違ってviを起動してしまっても、何とか大丈夫でしょう。

  • q - 終了
  • q! - 保存しないで終了
  • wq - 保存して終了

viエディタでテキストを編集しよう

viエディタを使ってテキストを編集してみましょう。必要最低限必要なことを書きます。

前回と同じようにまず最初にviエディタを起動してみましょう。

vi foo.txt

起動しましたね。

編集モード

viエディタは最初は、コマンドモードで起動します。viではコマンドモードと編集モードという二つのモードがあります。最初はコマンドモードになっているので、編集モードにする必要があります。

編集モードにするためには、iを押します。

i

編集モードになると、文字を入力できます。abcなど、自由に文字を入力してみてください。iを押した後は、自由に編集できることがわかると思います。

編集した内容を保存したいときは、コマンドモードになってからwコマンドを使います。コマンドモードになるにはまずEscキーを押すのでした。

:w

上記のように入力してEnterを押すとテキストが保存できます。編集するときはまたiを押して、編集モードに切り替えます。

保存して終了したいときは、以下のようにします。

:wq

これでなんとか設定ファイルを編集できるようになりましたね。

viの基本コマンド

viで最低限必要なことを覚えておけば、設定ファイルのの編集ができるようになるから、次の章に進むのもよいと思う。ここでは、もう少し便利にviを使う方法を紹介したいと思います。

行番号の表示

viを起動すると行番号がないのに気づきますね。行番号がないと何かと不便ですね。そのような場合は以下のようにします。

まずEscキーを押してコマンドモードにしてください。その後に以下のように入力してEnterを押してください。

:set number

行番号が左にでてきます。

viの設定ファイル

行番号の設定は永続的に続くものではなく、viを立ち上げている間だけ効力があります。設定を維持したい場合は、設定ファイルを使います。設定ファイルに記述しておけば、viを立ち上げたときにそのコマンドを実行してくれます。

viの設定ファイルはユーザーのホームディレクトリにある.vimrcです。そんなファイルはないって? デフォルトでは存在しないので作成する必要がありますね。

vi ~/.vimrc

このファイルの中にコマンドを書き込みましょう。

set number
<pre>

先頭のコロンは、必要ないです。

<b>cd ~</b>とすることで、ホームディレクトリに移動することができます。チルダはユーザーのホームディレクトリを意味する特殊文字です。

viを使って<b>.vimrc</b>を作成しましょう。そして<b>i</b>を押して、編集モードになったら次のように入力しましょう。

<pre>
set number

viの設定ファイルに書く場合は、コロンは先頭にはいりません。コロンなしで書きます。そしたらEscを押してコマンドモードになって、:wqと入力して保存して終了しましょう。するとファイルができています。

Linuxでは.で始まるファイルは隠しファイルになります。設定ファイルは隠しファイルであることが多いです。通常のlsコマンドでは、ファイルに一覧されませんがaオプションを使うと隠しファイルを含めて見ることができます。

ls -a

これで.vimrcというファイルができていることが確認できましたね。viでテキストファイルを開いてみましょう。行番号が最初から表示されるのがわかると思います。

タブで空白入力したい

プログラマであれば、タブではなくって、タブキーで空白入力したい人も多いでしょう。

:set expandtab

タブ幅を設定したい

プログラマであればタブ幅も設定したいですね。

:set tabstop=2

改行したときに字下げをしたい

プログラマであれば改行したときに、先頭に戻るのではなくって、字下げをしたいですね。

:set autoindent

設定ファイルが大きいので、ファイルの末尾に移動したいぞ

末尾に移動したい場合はコマンドモードでGと打ちます。

:G

好きな行番号に移動したい

好きな行番号に移動したい場合は数値Gとします。

:1G
:25G

1Gだと1行目、25Gだと25行目に移動できます。

Escキーでコマンドモードにして、行番号を打つだけでも移動できます。

:3

文字列を検索したい

検索したい場合はまずコマンドモードで、/と打ちます。スラッシュを打ちます。すると以下のようになります。

/

そうしたらここに検索したい文字を打ち込みます。

/foo

そうしたらEnterと押してください。これで検索ができます。次のマッチした位置に進みたいときはnを押します。戻りたい時はNを押します。これで検索ができます。

  • n - 進む
  • N - 進む
  • コピーしたい

    左クリックで、範囲選択をするとコピーできます。

    ペーストしたい

    右クリリックでペーストできます。これは、環境によって、設定が違うこともあるかもしれません。

    たくさんの範囲を削除したい

    deleteやback spaceでも削除できますが、いっぺんにたくさんの範囲を消したい場合がありますね。1行削除はコマンドモードで次のように打ちます。

    dd
    

    複数行を削除したい場合はこの直前に、削除したい行数を記述します。

    5dd
    

    上下左右への移動

    矢印キーでも左右上下できますが、Escキーで、コマンドモードにしてから次のキーでも、上下左右へ移動できます。

    • k - 上
    • h - 左
    • j - 下
    • k - 上

    文字を一つ進めて編集モードにする

    「i」で編集モードにできましたが「a」を使うと文字を一つ進めて編集モードにできます。

    末尾に移動

    コマンドモードで「$」で、行末に移動できます。

    元に戻す

    コマンドモードで「u」を実行すると、作業を元に戻せます。

    Perlを実行したいぞ

    コマンドモードでは、先頭に「!」をつけることで、Linuxの任意のコマンドを実行できます。Perlを実行する場合は、以下のようにします。

    !perl スクリプト名
    

    これだけ覚えれば、設定ファイルの編集がだいぶ楽になると思います。