お金をかけずにサーバーの勉強をしよう

viエディタを使う

2022年7月21日

メニューへ戻る

サーバー管理者は vi必須!

UNIX/Linuxのサーバーを管理する人が最初に躓くのが viエディタの使い辛さです。

古来より UNIXのサーバーにはシリアルコンソールという字しか出ない TVがくっついていました。
(もっと前はそれもなかった)

その頃に開発されたテキストエディタが viで、Macや Windowsの綺麗な GUIのウィンドウシステム上のエディタとは一線を画すものとなっています。

viの他にも Emacsなど高機能テキストエディタもありはしますが、サーバー管理者として働くにあたり、管理対象のサーバーに常に vi以外のエディタがインストールされているか分からないので、どのUNIX/Linuxでも必ず入っている viを使えるようになっていることは必須です。

Linuxにインストールされている viの実体は機能拡張版の vimですが、ここでは viの範囲に留めて書きますので、以降も viと表記しますが vimのことと思って下さい。

viは見た目こそシンプルですが、実なかなりの高機能エディタで、viだけの本が何冊も出ているくらいです。

ただその操作方法が結構難しいというか、操作の 1つ 1つを覚えているかどうかの勝負になるので、ここではホンの触りだけに留めます。

環境は Ubuntu Desktop 22.04を使いますが、UNIX/Linuxならどこでも viのバージョンが変わっても同じでしょう。

テキスト編集の例を以下にします。
自宅に Linuxのクライアントやサーバー環境を作った場合に、それぞれのマシンの名前解決(マシン名と IPアドレスに紐付けること)のは [/etc/hosts]ファイルでやることになると思うので、このファイルを viで編集します。

それでは viを起動してみましょう。

まずはターミナル(黒い画面)を起動して、以下のコマンドを実行します。
[/etc/hosts]ファイルは [root]ユーザーがオーナーなので、sudoコマンドを使って管理者権限で viを実行します。

subro@ubuntu2204:~$ sudo vi /etc/hosts
[sudo] password for subro: パスワードを入れる

私の環境の [/etc/hosts]ファイルはこんな感じになっています。

# Host addresses
127.0.0.1 localhost
127.0.1.1 ubuntu2204

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

UbuntuServer2204 というマシン名でアクセスしたいので 1行足します。

# Host addresses
127.0.0.1 localhost
127.0.1.1 ubuntu2204
192.168.1.150 UbuntuServer2204

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

viはEscを押すことで「移動/コマンド実行モード」と「入力モード」が切り替わります。

最初は「移動/コマンド実行モード」になっているので、以下のキーでカーソルを移動させます。

 k 上に移動
 h  l 左に移動   右に移動
 j 下に移動

いきなりカーソルの移動からして「何でこんな仕様なの?!」と思われるかも知れませんが、右手をホームポジション( j が右手人差し指)から動かさなくてもカーソルの移動ができます。

実はカーソルキーでも動きますが、そこまで手を動かすのが面倒臭いと思う人達が作ったものなのでしょう。
実際慣れてくるとカーソルキーのところまで手を移動させるのは結構面倒くさいと感じようになりましたよ。

[127.0.1.1 ubuntu2204] の行にカーソルが来たら空行を追加します。

 o 一つ下に空行を追加して「入力モード」になる

空行が追加された上で、かつ「入力モード」になっているので、
「192.168.1.150 UbuntuServer2204」と入力し、

Esc「移動/コマンド実行」のモードになる

で「移動/コマンド実行モード」にして、

 : コマンド実行

とやりますと画面の一番下に:が出てきてその右にカーソルが移ります。

# Host addresses
127.0.0.1 localhost
127.0.1.1 ubuntu2204
192.168.1.150 UbuntuServer2204

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
:■

これがコマンド実行OK状態ですので、以下のコマンドを連続入力してEnterを押します。

[w] 書き込み
[q] vi終了(書き換えないときはこちらだけ)
→ :wq Enterとなるようにする。

これでファイルが書き換えられ、viが終了したはずです。

他に「移動/コマンド実行」モード中に使いそうなのはこのあたり。

 u 1つ前の状態に戻る(Undo)
 x 1文字消す
 r 1文字書き換える
 d  d 1行消す
 y  y  p 1行コピー

他に : からのコマンド実行では、
[:q!] 書き換え部分をセーブせずに強制終了
あたりでしょうか。

コマンドは他にも覚えきれない程一杯あります。

このように非常に取っつき難いエディタなんですが、「慣れ」が全てを解決します
そして慣れてしまうと viはとにかく速いのです。

キーボードからほとんど手を動かさず、カーソルキーさえ使わずに操作ができるので、vi巧者はプログラミングさえ viの機能拡張版である vimを使う程なのです。

この顔をしかめるような h  j  k  l での移動とEscでの切り替えですが、きっとあなたもいつか息をするようにやれるようになるはずです。

黒い画面で暮らすには、これを使わざるを得ませんよ!


マスタリングVim [ Ruslan Osipov 著、大倉 雅史 訳 ]

価格:3,608円
(2022/7/21 15:11時点)
感想(1件)

Vimテクニックバイブル 作業効率をカイゼンする150の技 [ Vimサポーターズ ]

価格:3,278円
(2022/5/14 12:12時点)
感想(1件)