multilingual patch for Keith Bostic's nvi
Jun-ichiro itojun Hagino <itojun@itojun.org>
$Id: README.japanese,v 1.1.2.5 1999/03/10 14:23:14 itojun Exp $


			vi users of the world, unite!


	この文書は、英語版の翻訳です。英語版の方が更新されていますので
	実際と異なる点があったら英語版を参照してください。

これなあに?

	このpatchkitは、nvi 1.79に対する多国語化パッチです。
	このパッチのことを"nvi-m17n"と読んでいます。"m17n"とは、
	multilingualizationのこと(m + 17文字 + n)です。

	nviの最新版は、以下から得ることができます:
		ftp://ftp.cs.berkeley.edu/ucb/4bsd/
	このパッケージの最新版は、以下から得ることができます:
		ftp://ftp.foretune.co.jp/pub/tools/nvi-m17n/

	日本語化パッチからスタートしたので、以前は"jnvi"と呼んでました。
	このため、"jnvi"という記述が残ってるかもしれません。
	"nvi-m17n"と読み替えてください。

REDISTRIBUTION

	Freely redistributable, under condition written in LICENSE file.

WARRANITY AND COPYRIGHT

	Absolutely no warranty.  Pray and backup before try.

	The patch is based on the Japanization work on nvi 1.03 by:
		Yoshitaka Tokugawa <toku@dit.co.jp>
	and Japanization patch to elvis(vi clone by Steve Kirkendall) by:
		Jun-ichiro itojun Itoh <itojun@itojun.org>
	
	Some part of multibyte support has been derived from other people's
	work.  See comment in multibyte.c.

	Multilingual portion copyright(c) 1996, 1997 by Jun-ichiro Itoh.
	All rights reserved.

表記について

	明白な場合、"多国語化nvi"のことを"nvi"と表記します。
	区別したい場合には"nvi-m17n"と呼んでいます。

とりあえず使いたい(いらちなひとに)

	まず、このpatchはもとのnviの全ての機能を多国語化してると保証されてる
	わけではない、ということに注意してください。
	いくつかの機能はまだ使ってはいけない場合があります。
	"多国語化済み"と"多国語未対応"の節を見るとどの機能がokでどの機能が
	まだかわかります。

	0. nviのパッケージにpatchをあてます。
		% cd nvi-1.79
		% patch -p1 < nvi-m17n.diff
	1. 多国語パッチを活かしてconfigureします。
		% cd build
		% ./configure --enable-multibyte
	   nviから直接cannaを使いたい場合、以下のようにconfigureを呼び出して
	   ください。以下の例だと、/usr/local/cannaにcannaのライブラリや
	   ヘッダファイルがインストールされている必要があります。
		% ./configure --enable-multibyte --enable-canna=/usr/local/canna

	2. makeしてインストールしましょう。
		% make
		% su
		password: xxxx
		# make install

	3. Xを使っている場合、多国語表示のためにkterm 6.2.0をインストール
	   することをおすすめします。kterm 6.2.0はX11R6 contribのミラーを
	   しているftpサーバから持ってこれます。フォントも追加インストール
	   しましょう。
	   単に日本語が使いたいだけなら古いktermでも平気です。

	4. 設定ファイルを編集しましょう。(~/.exrc)
	4-a. iso-2022-*の表示
	     iso-2022-*対応の端末ソフトを使っている場合、以下の行を
	     足しましょう(ktermの場合こっちです):
		set noskipdisplay
	     そうでなければ、以下の行を足しましょう:
		set skipdisplay
	4-b. 表示のencoding
	     別の節にあるリストから、端末への表示に使うencodingを選び、
	     以下のように設定しましょう:
		set displayencoding=iso-2022-jp
		set displayencoding=sjis
		set displayencoding=euc-jp
		set displayencoding=big5
	     いくつかのencodingを指定した場合、動作にクセがあります。
	     "多国語対応済み"の節を参照してください。
	4-c. キー入力のencoding
	     別の節にあるリストから、キー入力に使うencodingを選び、
	     以下のように設定しましょう:
		set inputencoding=euc-jp
	     一部のencodingはキー入力には使えませんので注意しましょう。
	4-d. ファイルのencoding
	     同様にファイル入出力に使うencodingを選び、以下のように
	     設定しましょう:
		set fileencoding=iso-2022-jp
	     また、ファイルオープン/入力時にファイルのencodingを自動判別
	     したければ、以下を設定しましょう:
		set autodetect=jp (euc-jp/sjis/iso-2022-jp、を判定)
		set autodetect=cn (euc-cn/big5/hz/iso-2022-cn、othersを判定)
		set autodetect=tw (euc-tw/big5/hz/iso-2022-cn、othersを判定)
		set autodetect=kr (euc-kr/iso-2022-kr、を判定)
	     また、ファイルのオープン時に(:e/:nコマンドで)自動判定結果で
	     fileencodingの値を上書きすることもできます。
	     この場合、以下のように設定します。こうすることで、
	     ファイルのencodingがファイル編集前と編集後で
	     変わらないようにすることができます。たとえば:
		set autodetect=jp+
		set autodetect=cn+

	     中国語の自動判別をしたい場合(:set autodetect=cn)、
	     fileencodingを"euc-cn"または"big5"に設定することをお勧めします。
	     euc-cnとbig5を自動判別するのはほとんど不可能なので、
	     自動判別はたいてい失敗します。自動判別が失敗した場合、
	     fileencodingに設定されたencodingが使われます。
	     ので、big5をよく使う場合、以下のようにしましょう:
		set autodetect=cn fileencoding=big5
	     euc-cnをよく使う場合、以下のようにしましょう:
		set autodetect=cn fileencoding=euc-cn
	     中国語の自動判別をする場合、これ以外の設定はお勧めしません。
	
	     台湾語(?)の自動判別をしたい場合(:set autodetect=tw)も、
	     上記の記述はあてはまります。fileencodingは"euc-tw"か"big5"の
	     どちらかに設定してください。

	4-e. cannaサポート
	     cannaによる日本語入力を使いたい場合、以下の行を追加します:
		set canna
	     cannaの入力モード(フェンス)のon/offの自動制御を使いたい場合、
	     以下も設定してください(あと、fepkeyを好みにあわせてください):
		set cannactrl
	     cannaサーバを指定する場合、以下のようにします:
		set cannaserver=somehost.your.domain
	     canna入力モードに入るキーを変えたい場合、以下のようにします。
	     この設定をすると入力モードに入るキーがcontrol-Oになります。
	     キーは*慎重に*選んで下さい!:
		set cannakey=^O

	5. このパッチをあてた場合、原作nviのドキュメントに述べられている
	   説明文の一部は適用されなくなることに注意してください。
	   例えば、locale関連のもの(nvi-1.79/FAQのいちばん最初の質問、とか)
	   はnvi-m17nに関して正しくありません。

	6. これであがりです。Enjoy!

	.exrcの例題をいくつか:

	例1: iso-2022-*表示のできる端末を使っていて、euc-jpをencodingとして
	使います。日本語のファイルencoding自動判別を使います。
		set noskipdisplay
		set displayencoding=euc-jp
		set inputencoding=euc-jp
		set fileencoding=euc-jp
		set autodetect=jp

	例2: iso-2022-*表示のできる端末を使っていて、iso-2022-jpをencoding
	として使います。日本語のファイルencoding自動判別を使います。
	cannaと、自動cannaモード制御を使います。
		set noskipdisplay
		set displayencoding=iso-2022-jp
		set inputencoding=iso-2022-jp
		set fileencoding=iso-2022-jp
		set autodetect=jp
		set canna cannactrl

	例2: iso-2022-*表示のできる端末を使っていて、big5をencoding
	として使います。中国語のファイルencoding自動判別を使います。
		set noskipdisplay
		set displayencoding=big5
		set inputencoding=big5
		set fileencoding=big5
		set autodetect=cn

encoding

	行左端の"*"印は、このencodingをキー入力のencodingに使えることを
	示しています。(:set inputencoding=xxx)

	行左端の"!"印は、このencodingの実装は仕様を完全に満たしていないことを
	示します。表の次にある註を読んで下さい。

	encodingの仕様にない多国語をencodeする場合、iso-2022-*的な指示が
	使われます。
	(例えば、iso-2022-kr中のlatin-1とか、iso-2022-cn中のcyrillicとか)
	単一言語encodingの場合、知らない文字セットは単に飛ばされます。

	encodingの扱われ方の詳細は"多国語化済み"の節を参照してください。

    多国語encoding:
	   name		note			initially designated charsets
	   ---		---			---
	*  euc-jp-old				G0=ascii, G1=JIS X0208-1976,
						G2=JIS X0201 kana,
						G3=JIS X0212-1990.
						SS1 and SS2 used
	*  euc-jp				G0=ascii, G1=JIS X0208-1983,
						G2=JIS X0201 kana,
						G3=JIS X0212-1990.
						SS1 and SS2 used
	*  euc-cn				G0=ascii/G1=GB2312
	*  euc-kr				G0=ascii/G1=KSC5601

	*  iso-8859-1	8bit			G0=ascii/G1=iso-8859-1
	*  iso-8859-2	8bit			G0=ascii/G1=iso-8859-2
	*  iso-8859-3	8bit			G0=ascii/G1=iso-8859-3
	*  iso-8859-4	8bit			G0=ascii/G1=iso-8859-4
	*  iso-8859-7	8bit			G0=ascii/G1=iso-8859-7
	*  iso-8859-8	8bit			G0=ascii/G1=iso-8859-8
	*  iso-8859-9	8bit			G0=ascii/G1=iso-8859-9
	*  latin1	8bit			iso-8859-1の別名
	*  latin2	8bit			iso-8859-2の別名
	*  iso-2022-cn-ext			G0=ascii
			rfc1922			SI, SO, SS2 and SS3 used
	*  iso-2022-cn	rfc1922			iso-2022-cn-extの別名
						(仕様が互換)
	*  iso-2022-jp-2 rfc1554		G0=ascii
						SS2 used
	*  iso-2022-jp	rfc1468			iso-2022-jp-2の別名
						(仕様が互換)
	*! iso-2022-kr	rfc1557			G0=ascii
						SI and SO used
	*  ctext	X11 compound text	G0=ascii/G1=iso-8859-1
			8bit			no locking shift used
	   
	*  iso-2022-7-1	テスト用の汎用7bit、G0のみ使用
	*  iso-2022-7-2	テスト用の汎用7bit、G0/1のみ使用
	*  iso-2022-8-2	テスト用の汎用8bit、G0/1のみ使用

    単一言語encoding:
	   name		note			charsets
	   ---		---			---
	*  none		パッチ前のnviの動作	G0=ascii, G1=ascii(binary)	
	*  sjis		MS-Kanji/Shift JIS
	*  big5
	*  euc-tw				G0=ascii, G1=CNS11643-1,
						G2=CNS11643-[2-7]
	   hz		rfc1842			


	iso-2022-krの解釈:
	  rfc1557には述べられていませんが、実際の運用ではKSC5601の指示だけの
	  行があると、その行は捨てられます(行末文字を無視)。
	  nvi-m17nはこの挙動を実装しています。

文字セット

	nviは、以下にあげられていない文字セットの指示を認識しません。
	ある文字セットを認識するようにしてほしい場合、作者にコンタクト
	してください。

    94文字セット:
	name			designation to G0	note
	---			---			---
	IRV			ESC ( @
	UK			ESC ( A
	ASCII			ESC ( B			hardcoded
	Swedish			ESC ( C
	Norwegian		ESC ( E
	JIS X0201 right		ESC ( I			1バイトカタカナ
	JIS X0201 left		ESC ( J
	German			ESC ( K
	French			ESC ( R
	Italian			ESC ( Y
	Spanish			ESC ( Z

    96文字セット:
	name			designation to G0	note
	---			---			---
	Latin1			ESC , A			iso-8859-1
	Latin2			ESC , B			iso-8859-2
	Latin3			ESC , C			iso-8859-3
	Latin4			ESC , D			iso-8859-4
	Greek			ESC , F			iso-8859-7
	Arabic			ESC , G			iso-8859-6
	Hebrew			ESC , H			iso-8859-8
	Cyrillic		ESC , L			iso-8859-5
	Latin5			ESC , M			iso-8859-9
	Thai			ESC , T			TIS620.2529
	Latin6			ESC , V			iso-8859-10
	Latin6 additions	ESC , X			iso-8859-10 additions

    94x94文字セット:
	name			designation to G0	note
	---			---			---
	JIS X0208.1976		ESC $ ( @ or ESC $ @
	GB2312			ESC $ ( A or ESC $ A
	JIS X0208.1983		ESC $ ( B or ESC $ B
	KSC5601			ESC $ ( C
	JIS X0212.1990		ESC $ ( D
	ISO IR-165		ESC $ ( E
	CNS11643-1992-1		ESC $ ( G
	CNS11643-1992-2		ESC $ ( H
	CNS11643-1992-3		ESC $ ( I
	CNS11643-1992-4		ESC $ ( J
	CNS11643-1992-5		ESC $ ( K
	CNS11643-1992-6		ESC $ ( L
	CNS11643-1992-7		ESC $ ( M
	Big5-1			ESC $ ( 0		非公式、Muleに類似
	Big5-2			ESC $ ( 1		非公式、Muleに類似

増えたオプション

	name			type	range	description
	---			---	---	---
	autodetect(ad)		str	-	ファイル入力encoding自動判別
	displayencoding(de)	str	global	表示encoding
	fepkey			str	-	fenceを自動制御するコマンド名
	fileencoding(fe)	str	-	ファイル入出力encoding
	inputencoding(ie)	str	-	キー入力encoding
	skipdisplay(sd)		bool	-	表示できない文字セットは飛ばす

canna利用時に増えるオプション

	name			type	range	description
	---			---	---	---
	canna			bool	global	cannaを使う/使わない
	cannactrl		bool	-	fence自動制御
	cannakey		str	-	canna入力モードに入るキー
	cannaserver		str	global	cannaサーバ

configureの設定

    多国語化

	configureするときに、"--enable-multibyte"をつける必要があります。
	通常のインストール手順は以下の通り:
		% cd build
		% ./configure --enable-multibyte
		% make
	configureのときにencodingのデフォルト値を指定することができます:
		% ./configure --enable-multibyte=euc-kr
		% ./configure --enable-multibyte=iso-2022-jp
		% ./configure --enable-multibyte=euc-cn
	encodingを指定しないと、"none"になります。

    canna

	cannaによる日本語入力を使う場合、"--enable-canna"をconfigureの
	引数につける必要があります。"--enable-multibyte"が必要です。
		% cd build
		% ./configure --enable-multibyte --enable-canna

	ヘッダやライブラリのあるディレクトリを指定する必要があるかも
	しれません。
	--enable-cannaの後にディレクトリSOMEWHEREを指定した場合:
		% ./configure --enable-multibyte --enable-canna=SOMEWHERE
	以下にヘッダファイルとライブラリファイルがあることを意味します:
		SOMEWHERE/include/canna/jrkanji.h
		SOMEWHERE/lib/libcanna.a

	非一般的な設定をしていて、ヘッダとライブラリのパス名のprefixが
	違う場合、ディレクトリを個別に指定する必要があります。
	例えば以下のところにファイルがある場合:
		SOMEWHERE/canna/jrkanji.h
		ELSEWHERE/libcanna.a
	以下のようにconfigureを起動します:
		% env CFLAGS=-ISOMEWHERE LDFLAGS=-LELSEWHERE \
			./configure --enable-multibyte --enable-canna

	たいていの場合、以下の設定でうまくいきます:
		% ./configure --enable-multibyte --enable-canna=/usr/local/canna

多国語化済み

    多国語文字の上の移動/多国語文字の入力。

    多国語の単語移動(日本語/韓国語のみ)

    iso-2022-*をサポートする端末のための多国語表示。
	euc-jp/euc-cn/euc-kr/euc-tw/sjis/big5端末のための基本的なサポートも
	してます。
	表示のためのencodingはこんな風に設定しないといけません:
		:set displayencoding=foobaa

	表示に使えるencodingは"encoding"の節に列挙してあります。
	残念ながら、表示方法は直観的ではないので、以下を注意深く
	読んで下さい。

	多国語文字は以下の方法で表示されます:

	1. そのencoding用に特別の方法が定義されていたら、それを使います。
	   これは、8bit系のencodingの場合に定義されています。
		name	note
		---	---
		euc-jp	G0/G1のみ
			G0=ASCII, G1=JIS X0208-1983/1976
		euc-cn
		euc-kr
		euc-tw	G0/G1のみ (G0=ASCII, G1=CNS11643-1)
		sjis	X0208-1983/1976とJIS X0201カタカナ
		big5

	2. ":set skipdisplay"の設定の場合、多国語文字は"?"か"??"として
	   表示されます。

	3. そうでなければ、表示対象の文字セットをiso-2022-*のエスケープ
	   シーケンスを使ってG0に指示して表示します。
	   例えば、JIS X0208-1983の場合"ESC $ B"、latin-1の場合"ESC , A"
	   G0だけを使うのは単純化のためです。これはnviのencodingの
	   "iso-2022-7-1"に似ています。

	多国語表示のためには(上記の3.の場合)iso-2022-*完全対応の端末の
	利用をお勧めします。例えば、kterm-6.2.0を試すとよいでしょう。
	X11R6 contribのあるftpサーバにはたいてい置いてあります。

	cursesの多国語化について詳細が知りたければ、curses/README.m17nを
	見て下さい

	:set displayencoding=xxxという設定はnvi全体についての設定なので、
	全てのサブ画面に対して効きます。:set skipdisplayはサブ画面ごとに
	設定できます。

    ファイル入出力encodingは切替え可能です。
	使えるencodingは"encoding"の節に列挙してあります。

	ほとんどの多国語encodingは汎用iso-2022-*解析器/生成器で
	取り扱われています。
	一部のencodingの仕様は、一部の文字セットをどう指示するか
	規定していないことに注意してください。例えば、iso-2022-jp2(RFC1544)
	では全ての文字セットについてどう指示するかを規定していますが、
	iso-2022-kr(RFC1557)では規定されていません。
	このような場合には、nviはiso-2022-*のエスケープシーケンスを
	解釈/生成します。
	例:
	  ":set fileencoding=latin1"と指定しているときにJIS X0208-1983を
	  使った場合、nviは"ESC $ B ほげほげ ESC ( B"を出力します。
	  これはJIS X0208-1983を指定する方法として正当です。

	単一言語encoding(特にsjisとhz)はプログラムコードとして動作が
	決め打ちされていて、知らない文字セットは全て飛ばすように
	なっています。

	:set fileencoding=xxxはフィルタ系のコマンド(viの!コマンド)、
	ファイルのオープン/入力/出力(:r、:w、:eや:n)、およびshellとの
	入出力(:script)に影響します。

    ファイルオープン/入力時のencoding自動判別。
	一部のencodingを必要なときに自動判別できます。
		set autodetect=jp	(euc-jp/sjis/iso-2022-jp)
		set autodetect=cn	(euc-cn/big5/hz/iso-2022-cn)
		set autodetect=tw	(euc-tw/big5/hz/iso-2022-cn)
		set autodetect=kr	(euc-kr/iso-2022-kr)
	他の値を設定すると、自動判別は働きません。

	ファイル編集開始時(:nとか:eとか)またはファイル読み込み時(:r)に、
	ファイルの内容はデータベースに読み込まれ、そのあと自動判別の
	ためのプログラムコードが呼ばれます。自動判別のためのコードは
	encodingを判別し、それに従いデータベースの内容を適切な方法で
	内部表現に変換します。
	自動判別が成功しなかった場合、fileencodingに指定されている値が
	デフォルト値として使われます。

	また、ファイルのオープン時に(:e/:nコマンドで)自動判定結果で
	fileencodingの値を上書きすることもできます。
	こうすることで、ファイルのencodingがファイル編集前と編集後で
	変わらないようにすることができます。
	この場合、以下のように末尾に"+"を加えて設定します:
		set autodetect=jp+
		set autodetect=cn+
	この設定を使うと、viコマンドのcontrol-Gでfileencodingの値が
	表示されるようになります。

	大きなファイルを扱うと、自動判別に時間がかかることがあります。
	自動判別コードはデータベースに読み込まれたファイルを、自動判別が
	終るまで調べにいくからです(つまり、全行調べちゃう場合がある)。
	(最大行数はcommon/multibyte.cの中のPREDICT_MAXLINESの設定を変えると
	変更できます)
	自動判別が不可能な場合というのもあります。特にファイルが短い
	場合は無理な場合があります。
	バイナリファイルを読み込んでしまった場合、自動判別は
	きっとうまくいきません。注意して下さい。

	:set autodetect=xxxはファイルのオープン/入力にだけ影響します
	(:r、:eと:n)。

	中国語の自動判別をしたい場合(:set autodetect=cn)、
	fileencodingを"euc-cn"または"big5"に設定することをお勧めします。
	euc-cnとbig5を自動判別するのはほとんど不可能なので、
	自動判別はたいてい失敗します。自動判別が失敗した場合、
	fileencodingに設定されたencodingが使われます。
	ので、big5をよく使う場合、以下のようにしましょう:
	set autodetect=cn fileencoding=big5
	euc-cnをよく使う場合、以下のようにしましょう:
	set autodetect=cn fileencoding=euc-cn
	中国語の自動判別をする場合、これ以外の設定はお勧めしません。

	台湾語(?)の自動判別をしたい場合(:set autodetect=tw)も、
	上記の記述はあてはまります。fileencodingは"euc-tw"か"big5"の
	どちらかに設定してください。
	
    多国語キー入力。
	キー入力encodingを指定するには以下のようにします:
		:set inputencoding=euc-jp
		:set inputencoding=iso-2022-jp
	euc-jp/kr/cnとiso-2022-*を指定した場合、汎用iso-2022-*解析器が
	使われます。このため、これらの場合完全多国語キー入力が
	可能です。

	受け付け可能なsingle shiftとlocking shiftの種類は、encodingに
	何が指定されているかで決まります。例えば、euc-*を指定している場合には、
	SS2RとSS3R(0x8eと0x8f)しか解釈されません。
	iso-2022-*系のencodingをキー入力に使う場合、文字コード指定の
	エスケープシーケンスとESCキーとの区別が難しくなります。
	これらはタイムアウトを使って判別されます。非常に遅い回線越しに
	nviを使う場合、問題が生じる場合があり得ます。

    多国語の正規表現検索が可能です。
	制約事項についてはregex/README.m17n参照。

    cannaによる日本語入力をサポートしています。
	"canna"はクライアントサーバ形式の日本語変換システムです。
	cannaを使う場合に追加されるオプションのリストは別の節に
	挙げてあります。
	cannaのサポートはviモードの場合のみです。exモードでは、
	cannaによる日本語入力はできません。

	cannaを利用する場合、以下を行います:
		:set canna
	こうするとnviはcannaサーバと接続します。cannaサーバとの接続を
	切るにはこうします:
		:set nocanna

	canna入力モードに入ったり抜けたりするには、control-Oを打ちます。
	このキーストローク(control-O)はcannakeyオプションで決められて
	います。
	cannakeyオプションを変えるとキーストロークを変えられます。
	例えば、control-Xでcanna入力モードの切替えをする場合はこんな
	かんじ:
		:set cannakey=^X	(colonモードで入力するには^V^X)
	cannakeyの設定には*細心の注意を払って下さい*。ここで選択された
	キーストロークは全てに優先し、このキーストロークはcanna
	オプションが設定されている間、二度とnvi自体に渡らなくなります。

	viコマンドモードでcannaのfenceがでているのが邪魔になることが
	ありませんか?  nviはcanna入力モードを自動制御することができます。
	この機能を使うには以下のコマンドを入力します:
		:set cannactrl
	このオプションを設定した場合、以下のようになります:
	- (特定のコマンドについて)テキスト入力を終ると、cannaのfenceが
	  自動的にoffになります。
	- (特定のコマンドについて)テキスト入力の場面になると、cannaの
	  fenceが自動的にonになります。
	- (全てのコマンドについて)viコマンドモードに戻ると、cannaの
	  fenceが自動的にoffになります。
	「特定のコマンド」は、fepkeyオプションを設定することで
	指定できます。デフォルトでは"/?aioAIO"が設定されています。
	なんでも指定したい場合、こんなこともできます:
		:set fepkey=?/aioAIOcCrRtfTF
	この設定はちゃんと動きます。嘘じゃないよ。

	cannaサーバを切替える場合、以下を実行します:
		:set cannaserver=hostname.your.domain

	cannaサポートにはいくつか直観的でないところがあります。
	"ひねくれているところ"の節をみてください。

nvi-m17n特有のでオプションを設定する

	以上で述べたように、nvi-m17nではnviに対しいくつかオプションを
	追加しています。しかし、いくつかの場合、.exrcに書いたオプション
	設定で困ることがあります:
	1. nvi-m17nとnvi(または他のクローンvi)を両方使っている場合、nviや他の
 	   viクローンはnvi-m17nが拡張したオプションを解釈してくれない場合が
	   あります。この場合、起動時にエラーメッセージがでたり、
	   他のviが起動しなかったりします。
	2. 複数の設定を頻繁に切替えて使う場合、簡単に切替えられると素敵です。

	1.の場合、3つの逃げ方があります:
	- 他のvi(クローン)とnviの間のオプション設定を使い分けるために、
	  .exrcのかわりに.nexrcを使うことができます。
	  .nexrcはオリジナルのnviで導入されたものなので、オリジナルのnviと
	  nvi-m17nの間でオプション設定を区別するためには使えません。
	- 同様に、環境変数NEXINITも使えます。これはEXINITと同様に
	  働きますが、オリジナルのnviとnvi-m17nでしか使われません。
	- wrapperスクリプトを使います。以下参照。
	2.の場合、wrapperスクリプトが便利でしょう。

    wrapperスクリプト
	以下のようなwrapperスクリプトを使うと、nvi-m17nに特定のオプションを
	渡すことができます。これを使うと、.exrcに非一般的なオプションを
	含めずに済みます:

--->8 日本語を編集する場合の例(たとえば"jnvi"として使う)
#! /bin/sh

EXINIT0="set canna cannactrl autodetect=jp fileencoding=iso-2022-jp displayencoding=iso-2022-jp inputencoding=iso-2022-jp noskipdisplay"
if [ -f ~/.exrc ]; then
	EXINIT="$EXINIT0 `sed -e '/^set /!d' -e 's/^set //' < ~/.exrc | tr '\012' ' '`"
else
	EXINIT=$EXINIT0
fi
export EXINIT
exec /usr/local/bin/nvi $*
--->8

追加ツール

	nvi-m17nでは"regular"というスクリプトが追加されています。

    regular [-options]

	一部の文書には、ASCIIで表現できる文字に対して余分な文字セットの
	指示がつけられていることがあります。たとえば、UK文字セットの"a"とか
	JIS X0201左側(JIS roman)文字セットの"a"とかがそうです。
	このような指示は間違ってはいないのですが、たまにnvi-m17nの
	ユーザをいらつかせる原因になります。なぜなら、ASCIIの"a"以外を
	キーボードから入力するのは結構難しかったり不可能だったりするからです。
	Regularは、このような文字を全部ASCIIの"a"に変換します。

	Regularにはいくつかのオプションがあります。
		-7
			出力を、nviのencodingでいうとiso-2022-7-1にします。
			全ての文字セットはG0に呼び出されます。
			1ocking shiftやsingle shiftは使われません。
			オプションをなにも指定しなかった場合、この動作を
			します。
		-8
			出力を、nviのencodingでいうとiso-2022-8-2にします。
			94/94x94文字セットはG0に、96/96x96文字セットはG1に
			呼び出されます。locking shiftやsingle shiftは
			使われません。
		-kr
			入力がiso-2022-krと仮定します。
			すなわち、G0/G1/その他に呼び出された文字セットは
			行を越えて保存されます。
			-krを指定していない場合には、改行ごとに
				G0=ASCII/G1=G2=G3=なし
			というようにリセットされます。
	Regularは標準入力からテキストを読み、標準出力に結果を出力します。
		% regular < source.txt > dst.txt
	のように使うか、あるいはフィルタコマンド(viモードの!コマンド)で
	呼び出すかしてください。

	ひねくれているところ:
	- nvi-m17nはregularの出力encodingを処理できますが、regularの出力
	  encodingは一般的ではありません。
	  regularは汎用ツールではありません。nvi-m17nのサポート専用と
	  思って下さい。
	- euc-*/sjis/big5等のencodingで書かれたファイルを安全に取り扱う
	  ことはできません。フィルタコマンドを使う場合、nvi-m17nのfileencoding
	  オプションをiso-2022-*系のencodingにしておく必要があります。
	- regularの動作は非常に低速です。
	  もし遅すぎて困ったら、"qregular"をかわりに使ってください。
	  ただし、qregularはG0/G1への直接の指示しか考慮しません
	  (SIとかSOとかは解釈できません)。

多国語未対応

	このpatchはnviの全機能を多国語化するわけではありません。
	このため、いくつかの機能は使うべきではありません。
	そのうち*一部*をここに並べておきます。より細かく制約を知りたい場合は
	ソースコードを確認してください。
	- 横スクロール画面モード(:set leftright)はときどきcoreを吐いたり
	  無限ループに落ちたりします。
	- curses以外の画面出力インタフェースは動きません。
	- perlをlinkすることはできるようです。が、多分役にたちません。
	  なぜなら、perlスクリプト内ではnviの内部コードを扱わないと
	  いけないからです。
	- tclをlinkした場合、きっと動きません。
	- exモードでは、キー入力のエコーバックはnviではなく端末ソフトウェア
	  によって処理されます(オリジナルのnviがそうなっています)。
	  このため、端末ソフトウェアが正しく処理しない場合、文字が化けて
	  エコーバックされることがあります。
	- cannaサポートはexモードでは動きません。tty制御のしかたが
	  viモードと違ってcookedモードだからです(viのコロンモードでは
	  cannaが使えます)

ひねくれているところ/ばぐ(nvi 1.79について)

	tcsh 6.05.00のバグのせいで、tcsh 6.05.00とnviを一緒に使うと
	トラブルが発生することがあります。
	tcsh 6.05.00では
		% echo -n 'hoge' | tcsh -c cat
	をするとハングします。また、
		% ( echo 'hoge'; echo -n 'hoge') | tcsh -c cat
	とすると、最初の1行だけが出力されます。これは標準のcshの動作とは
	異なります。
	このため、login shellがtcsh 6.05.00のときに、nviから"1行だけfilter"
	するコマンド("!!cat"とか"!!fmt"とか)を実行すると、nviはtcshの
	道連れになってハングします。
	一番簡単な抜け道は、nviと一緒にtcshを使わないことです。
	例えば、以下を.exrcに足せば回避できます:
		set shell=/bin/csh

		:set
	の直後に
		:set all
	すると、画面が必要な量より1行多くスクロールします。
	このため、:set allの出力の一番上の行が見えません。

	原作nviのコードには、ctype.hで定義されているマクロ(isprint()とか
	isblank()とか)に負の数をつっこんだときにもちゃんと動くことを
	仮定して書かれた部分があります。
	(註: これはANSI Cの仕様にはありません!)
	もしこれが満たされていない場合、8ビットめが立っている値(0x80-0xff)が
	文書中に現れるとnviはハングアップすることがあります。
	多国語化の際に、8ビットめが立った値をかなりの頻度で使っているため、
	これはかなり大きな問題になります。
	ほとんどの部分は問題ないように修正してありますが、やりのこしが
	あるかもしれません。nviがハングアップしたら、状況を再現するための
	操作手順を作者まで送ってください。

ひねくれているところ/ばぐ(nvi-m17nについて)

	iso-2022-*をキー入力encodingに使っている場合(:set inputencoding=xxx)、
	control-Oとcontrol-Nは常にSI/SOとして取り扱われます。
	このため、control-Nをviの「次の行へ」コマンドとして使うことは
	できなくなります。
	(cannaを使っている場合、canna入力モードへの移行キーはここでの
	説明より優先してcannaのために使われます)
	これらのようなキーを入力したい場合、以下のように一時的にキー入力
	encodingを切替える必要があります:
		:set inputencoding=none

	キー入力、端末出力、ファイル入出力のための多国語encoding解析器/
	生成器はそれぞれ別々に実装されていて、動作がそれぞれ異なります。
	これは以下の理由によります:
	- キー入力は中途半端な状態の入力を処理しないといけません。
	- 端末出力はcursesの制限から全ての文字セットをG0に指示しないと
	  いけません(sjis等の単一言語encodingの場合8bitも使えますが)。
	- ファイル入出力は中では一番簡単なので、結構完全にできます。

	中国語のencodingの自動判別は原理的にほとんど不可能です。

	canna入力モードへの移行キー(:set cannakeyで設定)は全てに優先します。
	このため、例えばこれをcontrol-Oに設定すると、キー入力にcontrol-Oが
	あった場合それをSIと解釈できません。
	もしcannakeyをcontrol-Mに設定すると、リターンが二度と打てなくなります!
	canna入力モードへの移行キーは慎重に設定してください。

	viコマンドのうちいくつかは、他のviコマンドの組みあわせで実現
	されています。例えば、Sコマンドはc_コマンドとして実現されています。
	C/D/S/Yのコマンドはこのように作られています。fepkeyオプションは
	実際の実現に使われるコマンド名を対象にfence制御を行います。
	このため、cコマンドについてfence制御をonにすると、Sコマンドについても
	自動的にfence制御がonになります。
	詳細はvi/vi.cのv_alias()を参照。

	wrapmargin/wraplenオプションが設定されている場合、viのW/Bコマンドで
	認識される単語境界で行が区切られます。このため、英語以外の行では
	ときどき行末の長さが揃わなかったりします。
	多国語の行の区切り方についてよい方法はないか模索しているところです。
	なにか意見があったらお知らせください。

	中国語/韓国語の自動判別についてはチェックが甘いです。
	お気軽に御意見をお寄せください。

	iso-2022-*系のエンコーディングをキーボード入力に利用している場合、
	ESCのあとのタイムアウトが長くなってしまっています(2倍に延びて
	しまいます)。

	このパッチをあてた場合、原作nviのドキュメントに述べられている
	説明文の一部は適用されなくなることに注意してください。
	例えば、locale関連のもの(nvi-1.79/FAQのいちばん最初の質問、とか)
	はnvi-m17nに関して正しくありません。

	nvi-m17nをiso-2022のエスケープシーケンスを正しくサポートしていない
	端末上で利用した場合、nvi-m17nの起動時に、画面左上に"B"が残る
	ことがあります。これは、ASCII文字セットをG0(=GL)に呼び出すための
	"ESC ( B"が端末に正しく処理されなかったために表示されます。
	nvi-m17nは起動時に、ASCII文字セットをG0(=GL)に呼び出すために
	必ずこのシーケンスを出力します。
	もしこの挙動が気になる場合には、curses/refresh.cの以下の行を
	変更してください(関数putdesig()の中です):
配布時:		static enum { NO, ASCII, CACHED } prevstate = NO;
変更後:		static enum { NO, ASCII, CACHED } prevstate = ASCII;
	この場合、nvi-m17nは、nvi-m17nの起動時にはASCII文字セットが
	G0(=GL)に呼び出されていると仮定して動作します(多くの場合、
	これは正しい仮定とは言えません)。

	カーソルキー(termcapのku/kdなどで定義されたエスケープシーケンスの
	入力)による移動は、うまくいかないことがあるようです。これはかなり
	多数の原因が混じっていますが、作者がカーソルキーなんて使う気がない
	ため、あまりまじめにおっかける気がありません。

感想・意見

	バグやコメントは以下のいずれかの方法で送ってください:
		web: http://www.itojun.org/cgi-bin/gnats-send-pr
		e-mail: nvi-m17n@dit.co.jp
	その際、patchのバージョン番号を明示してください。

作者

	Jun-ichiro itojun Hagino (Jun-ichiro Itoh)
	itojun@itojun.org
	Contribution to the author, in any form (example: just say "thanks"),
	is always appreciated.
