目 次
viとはLinuxはもちろん、多分すべてのUNIX系OS上で必ず使えるテキストエディタです。テキストエディタとは、ASCIIコードや日本語文字コード(EUC, JIS, SJIS) で書かれた文書ファイルの作成や編集をするためのソフトウェアです。 emacs/xemacs、Windowsのメモ帳(notepad)や秀丸エディタ等と機能的には同じものです。
Windowsユーザーでメモ帳(notepad)を使ったことがない人は珍しくないと思います。ところが、Linuxを始めとするUNIX系のOSでは、ユーザーの文書やプログラムソースだけでなく、各種ドキュメントや非常に重要なシステム設定ファイルに至るまで、多くのファイルがテキスト形式になっており、これらに変更を加えたり、新たに作成したりするためには、テキストエディタは必要不可欠なものなのです。
viはこれまで、UNIX上の標準的エディタとして管理者用途から一般ユーザーの文書作成まで、広く利用されてきました。ところが諸々の経緯により通常のエディタとはちょっと変わった操作方法になっているがゆえに、これまで多くのLinux(UNIX)入門者を苦しめ、追い払って(?)きました。
emacsがあればユーザーレベルのファイル編集のお仕事は事が足りますが、 Linuxを管理する上で不可欠な、 rootでの各種設定ファイルの編集操作はviで行うのが一般的です。 Linuxは個人で使われることが多いでしょうから、ユーザーがrootでもあることがほとんどだと思います。ですから、これからLinuxを始めようという貴方がviを知ることに全く損はないと断言します。
一般的なエディタではカーソルの移動や文字の削除の操作は、指をホームポシションから離さなくてはならないことが多いですが、 viはホームポジションに手をおいたままあらゆる編集操作が可能な点が特徴の一つです。
emacsでもそうした設定になっているようですが、 [Ctrl]キーや[ESC]キー ([Alt]キー) とアルファベットキーを組み合わせたコマンド体系に私の指がついていかず、私の手にはいまだに馴染んでいません。ということで、私はプログラムコーディング・文書作成・編集作業・メール作成等の作業をすべて viで行なっています。
万が一、ハードディスクトラブルなどでLinuxがシステムダウンした際には、レスキューフロッピーやシングルユーザーモードでシステムを立ち上げて、設定ファイルの内容を書き換えたりしてシステム復旧を試みるわけですが、このような場合emacsよりもviが動く可能性が高いです。
それは、emacsはviよりもかなり大きなプログラムでディスク占有率も大きいため、ディスククラッシュの際、emacsに関わるデータが破壊されている可能性が確率的に高くなり、結果的にコンパクトなviが生き残る可能性があるためです。
レスキューフロッピーで立ち上げた場合などでも、 /binディレクトリが生きていてこれがmountできればviは使えます。一方emacsは、/usr以下の諸々のファイルが生きていないと動作に不都合を来たすと考えられます。
また、viはコンパクトですから、レスキューフロッピーの中にviを仕込んで置くことも可能です。 emacsは当然フロッピー1枚に収まるサイズではありません。
Linuxの入門書等では、「ユーザーがrootでもあることがほとんどなので、 tcshよりbashを覚えた方が、起動スクリプト等の見通しが良くなるし、一つのシェルを覚えるだけでよいので、お勧めです!!」という紹介がよくあります(私自身もtcshよりbashが便利な部分が多いとは思います)。ならば、エディタだってrootが必ず使う必要のあるviを勧めるのが筋では? と少し思ったりしますが”emacsは環境である”という言葉もあるので、環境にはなり得ないviの肩身は狭いのかも知れません。それでも私はこれからもviを使い続けるでしょう (emacsも使えたらかっこいいだろうな、と思いつつ)。
モード
文字を入力する “インサートモード”
文字列の編集作業をする “コマンドモード”
ターミナルの左下に:(コロン)あるいは/(スラッシュ)を出して作業をする “exモード”
vi上の作業はこれらのモードを行ったり来たりしながら行ないますが、この切替を行なうのが[ESC]キーと文字列挿入系コマンドです。また、exモードにはコマンドモードで:あるいは/を入力すると切り替わります。切り替わると、ターミナルの左下に:あるいは/が表示され、コマンド待ち状態になります。
特に[ESC]キーは文字列入力を抜ける場合に使うだけでなく、今自分がviをどちらのモードで使っているのかわからなくなってしまった場合や、打ち込んだコマンドをキャンセルする場合に押すという重要な機能があります。 [ESC]キーを入力した場合のアクションは次のようになります。
コマンドモードだったら…
ビープ音がなってコマンドモードがリセット状態に戻ります。
インサートモードだったら…
音は鳴らずにコマンドモードに切り替わります。
exモードだったなら
ターミナルの下に表示されていた:が消えてコマンドモードに切り替わります。
ですから、何か作業をする前に必ず[ESC]キーを押す癖をつけることで、意図しない妙な入力ミスや編集処理を回避できます。
ということで、viを使う際の座右の銘(?)として、困ったとき、何かする前にはまず[ESC]キー をあげておきます。これ以降コマンドの解説が出てきますが、実際に使ってみる場合には、事前に[ESC]キーを忘れずに入力して下さい。
xtermなどで-vb(visual bell)オプションを設定している場合は、ビープ音の代わりに画面がフラッシュします。
文字列挿入系の操作
カーソルの前に文字列を挿入 : i押し、文字列[ESC]
カーソルの後に文字列を挿入 : a押し、文字列[ESC]
カーソルの下に文字列を挿入 : o押し、文字列[ESC]
カーソルの上に文字列を挿入 : O押し、文字列[ESC]
なお、文字列の中には、改行とかスペース、タブも含まれます。また、文字列入力中の修正・削除は[BS]キーで可能です。文字列の入力が終り、別の編集作業に移る場合には、必ず[ESC]を押して下さい。文字列挿入系以外の編集操作が可能となります。
最近のviは、デフォルトで文字列挿入状態になると画面(viのスクリーン)の左下に [INS] とか — INSERT — といった 表示がされるようですので、文字列挿入可能になったかどうかの判断は、これを目安にするとよいでしょう。 [ESC]を押すとこの表示は消えます。
カーソル移動系の操作
カーソルを一つ左(←)に移動 : h
カーソルを一つ下(↓)に移動 : j
カーソルを一つ上(↑)に移動 : k
カーソルを一つ右(→)に移動 : l
最近のviはいわゆるカーソルキーでもカーソル移動ができますが、これではviを使う意義も半減してしまいます。もしviを使い込んでみようと思い立ったら、このカーソル移動方法を身体に覚え込ませましょう。
また、”less”というテキストファイル表示コマンドがありますが、このカーソル操作もほぼviと同じです(上下移動のみです)
削除系の操作
カーソル位置の1文字を削除 : x
カーソルのある行を削除 : dd
保存終了
ZZ
カーソルのある行の先頭/末尾にカーソルを移動したい
カーソルを行の先頭に移動 : 0
カーソルを行の末尾に移動 : $
現在ページの先頭行/末尾行にカーソルを移動したい
先頭行 : H
末尾行 : L
カーソルのある行と次の行を連結したい:J
Nのカーソル移動をしたい
右方向にN文字移動 : 数字Nを押し、l
左方向にN文字移動 : 数字Nを押し、h
上方向にN行移動 : 数字Nを押し、k
下方向にN行移動 : 数字Nを押し、j
直前操作の繰返しをしたい
.(ピリオド)を押す。同じ文字列を何回も挿入するような場合に便利で、私は個人的にこのコマンドが最も好きです。
別の名前で保存をしたい
:w NewFilename?[ENTER]
もし、NewFilename?が存在する場合には、 :w! NewFilename?[ENTER]
文字列の検索をしたい
/検索したい文字列[ENTER] でカーソルが所望の文字列に移動。
nを押すとページ下方を検索、Nを押すとページ上方を検索。
“/”(スラッシュ)、”\”(バックスラッシュ、円マーク)、”.”(ピリオド)等の記号を含んだ文字列を検索する場合には、これらの記号の前に、 (バックスラッシュ)をつける必要があります。また、日本語対応のvi(jvim,jelvis)を使っている場合は、文字列に日本語を使えます。
文字列の置換をしたい
:%s/置換前文字列/置換後文字列/[ENTER] でカーソル近辺の文字列を1つだけ置換。
:%s/置換前文字列/置換後文字列/g[ENTER] で文書内の該当文字列をすべて置換。
:B,Es/置換前文字列/置換後文字列/g[ENTER] で行番号B~E内の該当文字列をすべて置換。
日本語対応のvi(jvim,jelvis)を使っている場合は、文字列に日本語を使えます。
初期化ファイル.exrcの書き方(5th Step)
次に、viの起動時に環境設定用として読み込まれる.exrcというファイルを紹介します。これは、次のようなviの動作環境を設定するためのファイルで、通常はユーザーのホームディレクトリに置かれます。
タブ幅をカーソル何個分にするか(tabstop)
行番号を表示するか(number)
先頭にタブをつけた行で改行した場合、次行のカーソル位置をタブをつけた位置にするかどうか(autoindent)
文字列挿入モードの表示を行なうか(showmode)
括弧を閉じた時に、これと対になる頭の括弧にカーソルを飛ばすか(showmatch)
showmatchは、ネストが深いルーチンで括弧が確実に閉じられているかどうかを確認することができるので、通常の文書作成時よりもC言語等でプログラムを作成する際に便利です。
次に私の使っている.exrcの例を示します。
set tabstop=2
set showmode
set autoindent
set nonumber
set showmatch
例えば、showmode、autoindentをOFFにしたい場合は次のようにします。要はnoをつければいいだけです。ただ、defaultでOFFの設定の場合は、そのエントリを外せば良いです。
set tabstop=2
set noshowmode
set noautoindent
set nonumber
set showmatch
/ 検索文字などをいれると検索できる
n
nを押すことで文末に向かって検索が行われ、最初に見つかった文字列にカーソルが移動します。
N
Nを押すことで文頭に向かって検索が行われ、最初に見つかった文字列にカーソルが移動します。
dd
カーソルのある行を削除
*dd
n行削除 (例:5ddと入力すると5行削除)
$
カーソルを行末へ移動
0
カーソルを行頭へ移動
gg
文頭に移動します。
G
文末に移動します。
*G
指定行に移動します。
:set number
行番号を表示します。
全ユーザに適用する場合は、/etc/vim/vimrcに以下を追加する。
set number色をつけたい場合は
set nocompatible↑
置換 † Edit
:%s/置換前文字列/置換後文字列/gc[例] – 63行目から79行目まででbeautyをhairnailに一括置換
:63,79s /beauty/hairnail/g↑
文字コードを指定して開く † Edit
S-JIS指定
:e ++enc=sjisutf-8指定
:e ++enc=utf-8↑
複数行の削除 † Edit
複数行の削除の手順は以下の3ステップです。
1.削除範囲の開始行で「ms」と入力します。
2.削除範囲の終了行で「me」と入力します。
3.「:’s,’ed」と入力し、エンターを押します。