■
■ wvi : UNICODE 版 vi クローン for Win32
■ (Ver. 0.3)
■

●概要

    vi クローンの一つである xvi 2.15 英語 NT 版(旧 stevie) の Win32 日
    本語化移植版です。Win32 コンソール・モードのアプリケーションです。

    移植にあたって、UNICODE 化しました。したがって、日本語はもちろん、
    コンソール上で使えるフォントさえあれば、そして左から右への横書き文
    化圏の言語であれば、どんな言語でも編集可能なはずです。

    もちろん、従来からある Shift-JIS のようなマルチバイト文字のファイル
    も編集できます。(ファイルの種類は自動判定します)

●インストール

    wvi.exe と wvi.hlp をパスの通ったディレクトリにコピーしてください。
    基本的に、これだけで OK です。お望みなら、vi.exe と名前を変えてもか
    まいません。その場合は、wvi.hlp も vi.hlp と変更してください。
    (termcap の設定その他は不要です。)

    wvi.hlp はオリジナルの xvi に添付されていた簡易ヘルプ(英文)です。別
    に「そんなものいらない」という人は、インストールしなくてかまいませ
    ん。あるいは、この wvi.hlp は普通のテキスト・ファイルですから、自分
    で使いやすいように適当に内容を編集してしまってもかまいません。

●クイック・スタート

    かな漢字変換のステータス・ラインは、★必ず★「ウィンドウ内表示」の
    設定にしておいてください。

    オリジナルの vi に対する相違点(画面分割による複数ファイルの同時編集
    など)は、xvi.txt を参照してください。これは、xvisrc.zip の中の xvi.
    1 を整形したものです。

    Win32 版では、さらに変更が加えられています。これについては、次の節
    で説明します。

    それから、後ろの方に『vi ド初心者』向けの簡単な使い方の解説を付けて
    おきました。

●Win32 版に特有なこと

    1. 内部処理は UNICODE で行っています。ただしアクセント文字の合成機
    能等はサポートしていません。あくまでも、一つの文字コードが一つの文
    字に対応するものと想定します。

    2. DOS 版と併用した時に名前が衝突しないように、xvi → wvi と名前を
    変えました。

    3. 起動時に環境変数 WVIINIT を見ます。常に設定したい set 変数を指定
    してください。環境変数では '=' が使えないので、代わりに ':' を使え
    るようにしてあります。

    例えば、TAB を 4 桁に設定し、行番号を表示させたい場合は、WVIINIT の
    値を

        set ts:4 sw:4 nu

    とします。(環境変数は、「メイン／コントロール・パネル／システム」で
    設定します。AUTOEXEC.NT は関係ありません。)

    4. UNICODE 化に伴い、次のような set 変数を追加・変更しました。ただ
    し、デフォルト値のままで使っていても、特に不便は無いと思います。

        (1) codetype : ファイルの文字コードの指定

            codetype=multibyte : マルチバイト文字を指定します。Shift-
            JIS コードはもちろん、従来の 1byte 系の ASCII コード、ISO 
            Latin コードなども、この指定になります。

            codetype=unicode : UNICODE を指定します。

            ファイルを読み込む際には、codetype の指定の如何にかかわらず、
            そのファイルで実際に使われている文字コードが自動的に判定さ
            れ、それが変数 codetype の値となります。デフォルトは、
            「codetype=multibyte」です。

        (2) codepage : マルチバイト文字のコード・ページの指定

            マルチバイト文字と UNICODE の間の相互変換の際に、「どの」マ
            ルチバイト文字を仮定するのかを指定します。例えば、次のよう
            な値を設定します。

            codepage=437 : 英語(IBM-PC(OEM)キャラクタ・セット)
            codepage=932 : 日本語(Shift-JIS)

            デフォルトはコンソールの現在のコード・ページの値です。

            codetype=unicode の時は、この指定は無視されます。

        (3) format : 行末の形式などの指定

            設定値           : 行末  : EOF : 説明
            format=cstring   : 00    : 無  : C 言語の文字列形式
            format=macintosh : 0D    : 無  : Macintosh
            format=dos       : 0D 0A : 1A  : DOS,WindowsNT,OS/2(デフォルト)
            format=qnx       : 1E    : 無  :
            format=tos       : 0D 0A : 無  :
            format=unix      : 0A    : 無  : Unix

            備考 : EOF=End Of File  0D=CR  0A=LF or NL  1A=CTRL-Z

            設定値と異なる形式が現れた際には、可能であれば、自動的に設
            定値を変更します。(例えば、format=dos であるにもかかわらず 
            Unix 形式の行末が現れたら、自動的に format=unix となります。
            第一行目の行末の形式により判定しています。)

            また、format=dos において、ファイルの最後を EOF 文字(1A)で
            表わす方法は明らかに時代遅れなので、読み込み時には考慮しま
            すが、書き込み時には無視します。

    以上の設定の具体的な使い方ですが、例えば、現在編集中のファイルを強
    制的に UNICODE 化して出力したい場合は、

        :set codetype=unicode[ENTER]
        :w[ENTER]
        ZZ

    とします。同じような方法で、コードページ、行末形式などの変換ができ
    ます。

    5. カラーの指定方法を変更しました。set 変数 color、roscolor(Read 
    Only file編集時のメッセージ色)、statuscolor(通常のメッセージ色)は、
    次の値を加算したものを指定してください。デフォルトのカラーは、現在
    のコンソールのカラーを元に、適当に設定されます。

          1 : 前景色 BLUE
          2 : 前景色 GREEN
          4 : 前景色 RED
          8 : 前景色 強調
         16 : 背景色 BLUE
         32 : 背景色 GREEN
         64 : 背景色 RED
        128 : 背景色 強調

    なお、set 変数 systemcolor は、使われていません。

    6. xvi の mchar (1バイト内の最上位ビットが立っている文字の扱い)は、
    UNICODE 化に伴い無意味となったと判断し、廃止しました。

    7. カーソル移動キーなどを有効にする set 変数 extendedkey を追加しま
    した。

    8. 一時ファイルやプリザーブ・ファイルは、各ユーザーのホーム・ディレ
    クトリに作られます。(どこに作るか迷ったのですが、ここが一番確実に書
    き込み許可を持っているディレクトリのはずです。)

    ちなみに、プリザーブ・ファイルというのは、wvi が異常終了した際でも
    編集内容を失わないようにするために、編集内容を待避するためのファイ
    ルのことです。拡張子が"$$$"、"$$1"、"$$2"、‥‥となっています。万が
    一の場合は、これらのファイルを調べてみてください。

    9. 現在コンソールで使用されているフォントに応じて、カラム幅(文字幅)
    を自動的に調整します。

●コンパイルの方法

    ソースは、wvisrc.zip に入っています。xvisrc.zip の方は、オリジナル
    のソースです。xvi は、事実上「改変内容明示の上でソース同時配布」が
    義務付けられているので、オリジナルの方も添付してあります。

    コンパイラは、Visual C++ 2.0 を使用しました。作業は、コマンド・プロ
    ンプトで行います。wvisrc.zip をどこか適当なディレクトリで展開して、
    nmake してください。

    Win32 への移植に際しては、概略次のような変更を行いました。

        (1) オリジナルの xvi は 1byte 文字ベースでしたが、これを 
        UNICODE 化しました。

        全ソースに渡って、UNICODE 決め打ちになっています。従来のマルチ
        バイト文字版も生成可能なソースにすることは比較的簡単なのですが、
        マルチバイト文字コード体系の混乱ぶりを見ると、(UNICODE が理想的
        なコードだとは思いませんが) UNICODE 化のメリットは大です。

        そこで、マルチバイト文字へ戻りたいという誘惑を断ち切るために、
        あえて、UNICODE のみの対応としました。UNICODE に対応不可能なプ
        ラットホームは切り捨てます。

        また、Microsoft互換の C 言語拡張および拡張 wide character 用の
        ライブラリを持つことを前提とします。

        (2) C++ 化しました。ただし、オブジェクト指向にしたわけではなく、
        C++ を単に「改良された C」として使っているだけです。具体的には、
        全関数のプロトタイプ宣言化、'//' コメント化、などを行いました。

        (3) オリジナルの xvi の NT サポート・ルーチンを、ほぼ全面的に書
        き直しました。

        (4) その他、細かい変更多数。

●ド初心者講座

    vi は、基本的に、ファンクション・キーやカーソル移動キーは一切使わず
    に、標準キーだけを使って、手をホーム・ポジョンから動かさずに編集操
    作ができるようになっています。

    標準キーだけで編集操作ができるようにする必要から、vi には、例えば  
    'A' というキーをタイプした時に、それが編集命令として解釈される『コ
    マンド・モード』と、'A' という文字そのものとして解釈される『入力モ
    ード』の二つのモードが備わっています。

    また、vi は「寡黙」なエディタです。メニューなんてもちろんありません
    し、入力中のコマンドも原則として画面に表示されません。

    この二つのモードの存在や寡黙さを嫌う軟弱野郎もいますが、余計な事を
    しないだけ動作が軽快ですし、慣れてしまえば「手に吸い付く」ような超
    高速の編集操作ができます。

    『vi 使い』と呼ばれるレベルに達すれば、カーソルは画面を蝶のように舞
    い、ファイルはグシャグシャと姿を変え、うしろから覗き込んでいる「初
    心者」は、いや「中級者」ですら、驚きの声を発するようになるでしょう。

    とはいっても、確かに vi は初心者には「とっつきにくい」エディタです。

    そこで、wvi ではカーソル移動キーその他を使って、最低限の編集操作が
    できるようにしてあります。あなたが vi のド初心者なら、とりあえず次
    の事項とキー操作を覚えてください。

        (1) vi は『小文字ベース』で操作するようにデザインされている。大
        文字ロック(CapsLock) を常時オンにするクセのある人は注意。

        (2) wvi の起動は、次のようにする。

            C>wvi ファイル名

        (3) 起動直後は、『コマンド・モード』になっている。

        (4) [INSERT] キーで『入力モード』になる。

        (5) 『入力モード』で文字を打ち間違えたら、その一行内に限って
        [BackSpace]で訂正できる。

        (6) [ESC] キーで、『入力モード』から『コマンド・モード』に移行
        する。

        (7) 『コマンド・モード』では、次のようなキーが使える。()内が本
        来の vi のコマンド・キー。

            [←]  [↓]  [↑]  [→] : カーソル移動([h] [j] [k] [l])
            [PageUp]  [PageDown]   : 一画面分移動([^B] [^F])
            [Home]  [End]          : ファイルの先頭／最後へ移動([1][G] [G])
            [Delete]               : カーソルの下の一文字削除([x])
            [Insert]               : カーソル位置で入力モードへ移行([i])

            これ以外にも、次のような操作を覚えることが必要。

            [Z][Z]                 : 終了 (大文字の 'Z' を 2 回タイプ。
                                     シフトキーを押しながら[Z] を 2 回
                                     押せばよい。)
            [d][d]                 : 一行削除
            [a]                    : カーソルの右隣の位置で入力モードへ移行
            [:][q][!][ENTER]       : 編集操作を取り消して終了

    これだけ覚えれば何とかなるでしょう。あとは適当な参考書で勉強してく
    ださい。「vi 使い」と呼ばれる人たちも、皆そうやって修行してきたので
    す。

    なお、:help[ENTER] とタイプすると、簡易ヘルプ(英文、コマンドの要約)
    が出ますから、それも参考にしてください。簡易ヘルプの終了は :close
    [ENTER] です。

●著作権等について

    このアーカイブを構成する各ファイルは、原則として、オリジナル・ソー
    ス・アーカイブ xvisrc.zip に含まれる COPYING に記載されている使用配
    件にしたがいます。(私の Copyright 表示があるファイルについても、こ
    の条件にしたがいます。)

    COPYING の使用条件は、GPL (GNU General Public License)に準じたもの
    です。

    このソフトウェアは無保障です。各自の判断とリスク負担のもとに使用し
    てください。

    詳しくは、COPYING および個々のファイルのコメントを参照してください。

●履歴

    0.1 1995/01/12

    ・最初のバージョン。

    0.2 1995/01/28

    ・使用コンパイラを、Borland-C++ 4.02 から Visual C++ 2.0 に変更。
    ・カラム(文字)幅の自動判定機能追加。
    ・行長の制約を無制限に。
    ・日本語以外のマルチバイト文字の第１バイトの判定のバグ修正。
    ・カラー設定方法の変更。
    ・その他、細かいバグ・フィックス、変更多数。

    0.3 1995/06/09

    ・全角文字が行の右端にかかると見えなくなってしまうバグを修正。
    ・オリジナルの xvi にあったオンラインの簡易ヘルプを、若干変更の上
      でサポート。
    ・その他、細かい修正。

1995/06/09 K.Yoshizawa (PAF02413.niftyserve.or.jp)
