viは、ビル・ジョイによってexというラインエディタの改良版として作られました。ラインエディタのexに対して、viはスクリーン全体を使って編集が可能であり、様々な機能を持っていました。
現在では、純粋なviはほとんど使われておらず、代わりにviと同じ機能を持ち、さらに拡張されたviクローンが主流となっています。viクローンには、nvi、vim、elvis、どがあり、各種Unix、Unix互換OS上の多くに標準搭載されています。
かつては、Xが動いていないUnixで用いられるエディタは、viかEmacsでした。これらは動作が異なっており、どちらが優れているかが論争の的となっていました。少なくとも初期のviと比較すれば、Emacsの機能は非常に豊富であり、起動の速度、移植性などの問題を除けば、Emacsの方が高機能でした。しかしながら、現在のviクローンは初期のviと比べてかなり機能が拡張されており、実用上では機能上の差異は感じられなくなっています。
その後、X Window System の普及でgeditやkeditといったX上のエディタを利用することが一般的となっており、viやEmacsの重要性は薄れつつあります。
現在、Visual Studio Codeなど、viやEmacsの機能を凌駕する新しいエディタが登場しています。
さらに、多くのプラットフォームで利用でき、さまざまな言語をサポートしているため、多くの開発者が愛用するエディタとなっています。
しかし、viやviクローンは、OSS開発ツールとしては、特にUnixやUnixクローンでの開発作業に欠かせないツールとして、今でも多くのユーザーに親しまれています。
viは通常のエディタと異なり、複数のモードを切り替えて編集を行います。
まず、コマンドモードでは、キー操作によってテキストの移動、コピー、ペースト、削除などができます。一方、入力モードでは、打鍵したキーがそのままテキストに入力されます。
通常、viを起動するとコマンドモードになるため、文字列を入力する場合は入力モードに移行する必要があります。
これらのモード間の切り替えは、いくつかのキー操作で行うことができます。また、入力モードに移行する最も基本的なコマンドは「i」です。
一方、入力モードからコマンドモードに移行するには、EscキーまたはCtrl + cを使います。
viにおいて、文字入力以外の操作はすべてコマンドモードで行います。次の章では、Viにおけるコマンドモードの動作について詳しく説明します。
ここでは、Viのモードと最もよく使われるコマンドを紹介します。
コマンドモード：Viを開いたときのデフォルトのモードです。このモードを使用して、ナビゲート、検索、コマンドを実行します。他のモードからコマンドモードに戻るには、Escキーを押します。
挿入モード：文書にテキストを挿入するためのモードです。iキーを押すと、挿入モードになります。
ビジュアルモード：このモードでは、テキストを選択することができます。vを押してビジュアルモードに移行します。
ナビゲーション
h: カーソルを1文字分左に移動します。
j: カーソルを1行下に移動します。
k: カーソルを1行上に移動します。
l: カーソルを1文字分右に移動します。
0: カーソルを行頭に移動します。
$: カーソルを行末に移動します。
G：カーソルを文書の末尾に移動する。
gg: カーソルをドキュメントの先頭に移動します。
Ctrl-f：カーソルを1ページ前に移動します。
Ctrl-b：カーソルを1ページ後ろに移動します。
w: カーソルを1語前に移動します。
b: カーソルを1語後ろに移動します。
/text}：文書中の{text}を検索します。
n: 検索語の次の語句に移動する。
N: 検索語の前の語句に移動する。
編集
i：現在のカーソル位置でインサートモードに入る。
a: 現在のカーソル位置の後に挿入モードを開始する。
O: 現在の行の下にある新しい行に挿入モードを開始する。
O: 現在の行の上にある新しい行に挿入モードを開始する。
x: カーソルの下の文字を削除する。
dd: 現在の行を削除する。
yy: 現在の行をコピーする。
p: 最近コピーまたは削除されたテキストを現在のカーソル位置の後に貼り付ける。
u: 直前のコマンドを取り消す。
Ctrl-r: 最後に取り消したコマンドをやり直します。
w: ドキュメントを保存します。
q：Viを終了します。
q！：変更を保存せずにViを終了します。
高度な編集
r：カーソル下の文字を入力された次の文字に置き換えます。
S：カーソル下の文字を入力された次の文字に置き換え、挿入モードに入ります。
J：現在の行と次の行を結合します。
Ctrl-v: ビジュアルブロックモードに入り、長方形のテキストブロックを選択します。
y: 選択されたテキストをコピーします。
d: 選択されたテキストを削除します。
c: 選択されたテキストを削除し、挿入モードに入ります。
その他
.: 直前のコマンドを繰り返す。
~:カーソルの下にある文字の大文字と小文字を変更する。
%:カーソルを一致する括弧または括弧に移動します。
:set nu: ドキュメントに行番号を表示します。
:set nonu：文書中の行番号を非表示にします。
Learning the vi Editor
Vi
Vi
Vim