vim-jp / vimdoc-ja / mbyte

mbyte - Vim日本語ドキュメント

メインヘルプファイルに戻る English | 日本語 | 編集
mbyte.txt     For Vim バージョン 9.1.  Last change: 2022 Apr 03

                  VIMリファレンスマニュアル       by Bram Moolenaar et al.


マルチバイトサポート                            multibyte multi-byte
                                                Chinese Japanese Korean
このファイルでは、中国語、日本語、韓国語などの、1バイト(オクテット)では表現す
ることができないほど多くの文字を持つ言語の、テキストの編集について説明する。
Unicodeについても説明する。

ユーザーマニュアルのusr_45.txtで、共通する事柄を簡単に紹介している。
メッセージやメニューの言語を変更するにはmlang.txtを参照。

1.  はじめに                            mbyte-first
2.  ロケール                            mbyte-locale
3.  エンコーディング                    mbyte-encoding
4.  端末の使用                          mbyte-terminal
5.  X11のフォント                       mbyte-fonts-X11
6.  MS-Windowsのフォント                mbyte-fonts-MSwin
7.  X11での入力                         mbyte-XIM
8.  MS-Windowsでの入力                  mbyte-IME
9.  キーマップを使用した入力            mbyte-keymap
10. imactivatefunc() を使用した入力     mbyte-func
11. UTF-8を使う                         mbyte-utf8
12. 主なオプション                      mbyte-options

NOTE: このファイルにはUnicodeの文字が含まれている。他のエンコーディングを使用
している場合は、変な文字、あるいは四角形として表示されるかもしれない。

==============================================================================
1. はじめに (Getting started)                           mbyte-first

Vimのマルチバイト機能を簡単に紹介する。運が良ければ、説明したことがそのまま機
能して、なんのトラブルもなしにVimを使い始めることができる。そうでない場合は、
このファイルをさらに読み進める必要がある。Vimのマルチバイト機能を使用できるよ
うにするために、多少の手間や試行錯誤が必要であっても驚かないで欲しい。不幸なこ
とに、すべてのシステムはそれぞれ独自の方法でマルチバイト言語を扱っていて、それ
は実に複雑である。


ロケール

まずは、ロケールが正く設定されていることを確認する。システムの言語が正しく設定
されていれば、マルチバイト機能をすぐに使用することができる。設定されてなくて
も、環境変数$LANGをシェルから設定すれば、大抵は使用できるようになる: >

        setenv LANG ja_JP.EUC

不幸なことに、ロケールの名前はシステムごとに違う。日本語なら "ja_JP.EUCjp" や
"ja" などがある。現在の設定を確認するには: >

        :language

Vimが内部で使用するロケールを変更するには: >

        :language ja_JP.EUC

その設定が機能しない場合はエラーメッセージが表示される。使用したい言語のロケー
ル名を見付けるためにいくつか試してみると良い。しかし、Vimは起動時にシステムの
ロケールを適切に使用するので、シェルでロケールを設定するのが無難である。

詳細はmbyte-localeを参照。


エンコーディング

ロケールが適切に設定されていれば、オプション 'encoding' はそれに応じた値に設定
される。それが機能しないときは、自分で設定しなおすこともできる: >

        :set encoding=utf-8

設定できる値の一覧はencoding-valuesを参照。

この設定はVim内部でテキストを保持するためのエンコーディングとして使用される。
バッファのテキストだけでなく、レジスタや変数のエンコーディングとしても使用され
る。そのため、'encoding' の設定を変更すると、すでに内部にあるテキストは不正な
テキストになってしまう。テキストは新しいエンコーディングに変換されず、間違った
状態で表示される。

'encoding' に設定されたのとは違うエンコーディングのファイルも編集することがで
きる。Vimはファイルを開くときにエンコーディングを変換し、保存するときに元に戻
す。'fileencoding''fileencodings'++encを参照。


表示とフォント

端末(のエミュレータ)で作業しているなら、端末が、Vimと同じエンコーディングを使
用することを確認する。違うなら、オプション 'termencoding' を設定して、テキスト
が自動的に変換されるようにする。

GUIで作業しているなら、'encoding' に設定されたエンコーディングに対応したフォン
トを選択する必要がある。フォントの設定は難しい。使用しているシステムやロケール
などに依存している。X-Window環境ならmbyte-fonts-X11、MS-Windowsなら
mbyte-fonts-MSwinを参照。

GTK+ 2を使っているなら、今読んでいるこの項目はほとんど読まなくて良い。オプショ
ン 'guifontset' はもう存在しない。'guifont' を設定するだけですべてうまく機能す
る。システムにXft2とfontconfigが用意されているなら、選択したフォントが何かのグ
リフを含んでいないときは、自動的に他の利用可能なフォントが使用される。オプショ
ン 'guifontwide' はまだサポートされているが通常は必要ない。自動的に選択される
フォントが適切でない場合のみ設定する必要がある。

X11ではオプション 'guifontset' に複数のフォントを設定して、さまざまな文字を扱
えるようにする。韓国語での設定例: >

        :set guifontset=k12,r12

代わりに 'guifont' と 'guifontwide' を設定することもできる。'guifont' は半角文
字、'guifontwide' は全角文字のためのフォントである。'guifontwide' のフォントは
'guifont' のちょうど2倍の幅でなければならない。
UTF-8使用時の設定例: >

        :set guifont=-misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1
        :set guifontwide=-misc-fixed-medium-r-normal-*-18-120-100-100-c-180-iso10646-1

'guifont' だけを設定した場合、Vimは 'guifontwide' として使用できるフォントを見
付けようとする。


入力

マルチバイト文字を入力するにはいくつかの方法がある:
- X11ではXIMを使用できる。XIMを参照。
- MS-WindowsではIMEを使用できる。IMEを参照。
- すべてのシステムでキーマップを使用できる。mbyte-keymapを参照。

オプション 'iminsert''imsearch''imcmdline' を使用して、別の入力方法に切り
替えたり、インプットメソッドを一時的に無効にしたりできる。

==============================================================================
2.  ロケール (Locale)                                   mbyte-locale

最も簡単なのは、システム全体のロケールを設定することである。しかし、作業してい
るシェルのみロケールを変更したり、Vimだけが特定のロケールを使用するようにも設
定できる。


ロケールって何?                                        locale

世界にはたくさんの言語があり、少なくとも、それと同じ数だけ文化や環境がある。地
域に対応した言語環境のことをロケール(locale)という。ロケールは、言語、文字セッ
ト、文字の整列順、日付の書式、通貨の書式、などの情報を含んでいる。Vimにとって
は言語と文字セットの情報だけが重要である。

システムがサポートしているロケールのみ使用することができる。(特にアメリカなど
では)ほんの少しのロケールしか持っていないシステムもある。そのため、望みの言語
を使用することができないかもしれない。追加パッケージでロケールをインストールで
きることもあるので、システムのドキュメントを確認すること。

ロケールがインストールされている場所はシステムによりさまざまである。例えば
"/usr/share/locale" や "/usr/lib/locale" などにある場合がある。システムのマニュ
アルのsetlocale()を参照。

ロケールがインストールされているディレクトリを見ればロケールの正しい名前がわか
る。ほとんどの場合、大文字と小文字は区別されるので、例えば "ja_JP.EUC" と
"ja_jp.euc" は異なる。いくつかのシステムはlocale.aliasというファイルを持ってい
て、"nl" のような短い名前を使って "nl_NL.ISO_8859-1" という完全な名前を指定で
きる。

Note: X-Windowは独自のロケール機構を持っている。そして不幸なことに、他で使用さ
れているものとは違うロケール名を使用する。これは混乱の元である。Vimにとっては
関数setlocale()が使用するものが重要であり、それは通常、X-Windowのものではない。
何が実際に機能するのか、実験してみる必要があるかもしれない。

                                                        locale-name
ロケールlocaleの名前の(簡単な)書式は:

        言語                    (language)
or      言語_地域               (language_territory)
or      言語_地域.コードセット  (language_territory.codeset)

地域は国を意味する(あるいはその地方)。コードセットはcharsetのこと。例えば、
ロケール名 "ja_JP.eucJP" の意味は:
        ja      言語は日本語(Japanese)
        JP      国は日本(Japan)
        eucJP   コードセットはEUC-JP
同じ意味でも "ja"、"ja_JP.EUC"、"ja_JP.ujis" などの名前のこともある。不幸なこ
とに、言語、地域、コードセット、を表す名前は統一されておらず、システムによって
異なる。

ロケール名の例:
    charset         language              locale name ~
    GB2312          中国語 (簡体字)       zh_CN.EUC, zh_CN.GB2312
    Big5            中国語 (繁体字)       zh_TW.BIG5, zh_TW.Big5
    CNS-11643       中国語 (繁体字)       zh_TW
    EUC-JP          日本語                ja, ja_JP.EUC, ja_JP.ujis, ja_JP.eucJP
    Shift_JIS       日本語                ja_JP.SJIS, ja_JP.Shift_JIS
    EUC-KR          韓国語                ko, ko_KR.EUC


ロケールを使用する

システム全体のロケールを設定するには、システムのドキュメントを参照。恐らく、
"/etc" 内の設定ファイルを編集する必要がある。

シェルのロケールを設定するには、環境変数$LANGを設定する。例えば、韓国語を使用
するとき、ロケールlocaleの名前が "ko" なら、このように設定する:

    sh:    export LANG=ko
    csh:   setenv LANG ko

これを~/.profileや~/.cshrcに書いておけばいつでも設定された状態にできる。

Vimが使用するロケールだけ設定するには:languageコマンドを使う: >

        :language ko

これを~/.vimrcに書いておけばいつでも設定された状態にできる。

あるいは、特定の$LANGを設定した状態でVimを起動するには:

   sh:    LANG=ko vim {vim-arguments}
   csh:   env LANG=ko vim {vim-arguments}

このために、小さなシェルスクリプトを作成することもできる。

==============================================================================
3.  エンコーディング (Encoding)         mbyte-encoding

Vimはオプション 'encoding' をVim内部で使用するエンコーディングとして使用する。
バッファ(メモリに読み込まれたファイル)やレジスタ、変数など、すべてのテキストは
このエンコーディングでメモリに保存される。

                                                        charset codeset
文字セット(Charset)とコードセット(codeset)は「エンコーディング」の別名である。
正確には違うのだが、Vimを使用する上でそれは重要ではない。

文字は1バイト以上のバイトでエンコードされる。すべての文字が1バイトでエンコード
されるものを私達はシングルバイトエンコーディングと呼ぶ。そのようなエンコーディ
ングとしては "latin1" がよく使用される。これは256文字を表現することができる。
それには制御文字も含むので、テキストとして使用できる文字はそれより少ない。

2バイト以上を使って文字を表現するものを、私達はマルチバイトエンコーディングと
呼ぶ。これは256文字よりもっと多くの文字を表現することができ、ほとんどの東アジ
アの言語はこれを必要とする。

ほとんどのマルチバイトエンコーディングは127文字(ASCII文字の範囲)を1バイトで表
現するため、使用する言語に関係なく、ASCII文字だけのテキストをやり取りすること
が簡単になっている。したがって、間違ったエンコーディングが設定されていても、そ
れを読むことができるだろう。

                                                        encoding-names
多くのエンコーディングを使用することができる。大きく3つに分類すると:

1   8bit        シングルバイトエンコーディング。256文字を表現できる。アメリカ
                やヨーロッパで使用される。例: ISO-8859-1 (Latin1)。すべての文
                字は1つ分の表示幅で表示される。(いわゆる半角)

2   2byte       ダブルバイトエンコーディング。10000以上の文字を表現できる。ア
                ジアの国々で使用される。例: euc-kr (韓国語)。文字のバイト数と
                同じ数の表示幅で表示される。(2バイトならいわゆる全角)
                (euc-jpの1バイト目が0x8eの文字(半角カナ)は例外)

u   Unicode     ユニバーサルエンコーディング。他のエンコーディングを統合するも
                の。ISO 10646。100万以上の文字を表現できる。例: UTF-8。文字が
                使用するバイト数と表示幅の関係は複雑。

他のエンコーディングはVim内部のエンコーディングとして使用することはできないが、
そのようなエンコーディングのファイルを編集することはできる。'fileencoding' を
参照。
Note: すべてのエンコーディングは0から128までの文字がASCII文字と同じでなければ
ならない(EBCDIC用にコンパイルした場合は除く)。

'encoding' に設定できる値:                              encoding-values
1   latin1      8ビット文字 (ISO 8859-1 及び cp1252)
1   iso-8859-n  ISO_8859 シリーズ (n = 2 to 15)
1   koi8-r      ロシア語
1   koi8-u      ウクライナ語
1   macroman    MacRoman (Macintoshのエンコーディング)
1   8bit-{name} 8ビットエンコーディングのどれか (Vim特有の名前)
1   cp437       iso-8859-1に類似
1   cp737       iso-8859-7に類似
1   cp775       バルト語
1   cp850       iso-8859-4に類似
1   cp852       iso-8859-1に類似
1   cp855       iso-8859-2に類似
1   cp857       iso-8859-5に類似
1   cp860       iso-8859-9に類似
1   cp861       iso-8859-1に類似
1   cp862       iso-8859-1に類似
1   cp863       iso-8859-8に類似
1   cp865       iso-8859-1に類似
1   cp866       iso-8859-5に類似
1   cp869       iso-8859-7に類似
1   cp874       タイ語
1   cp1250      チェコ語、ポーランド語など
1   cp1251      キリル語
1   cp1253      ギリシャ語
1   cp1254      トルコ語
1   cp1255      ヘブライ語
1   cp1256      アラビア語
1   cp1257      バルト語
1   cp1258      ベトナム語
1   cp{number}  MS-Windows: インストールされているシングルバイトのコードページ
2   cp932       日本語 (Windows only)
2   euc-jp      日本語 (Unix only)
2   sjis        日本語 (Unix only)
2   cp949       韓国語 (Unix and Windows)
2   euc-kr      韓国語 (Unix only)
2   cp936       簡体中国語 (Windows only)
2   euc-cn      簡体中国語 (Unix only)
2   cp950       繁体中国語 (on Unix alias for big5)
2   big5        繁体中国語 (on Windows alias for cp950)
2   euc-tw      繁体中国語 (Unix only)
2   2byte-{name} Unix: ダブルバイトエンコーディングのどれか (Vim特有の名前)
2   cp{number}  MS-Windows: インストールされているダブルバイトのコードページ
u   utf-8       UTF-8にエンコードされた32ビットのUnicode (ISO/IEC 10646-1)
u   ucs-2       UCS-2にエンコードされた16ビットのUnicode (ISO/IEC 10646-1)
u   ucs-2le     リトルエンディアンのucs-2
u   utf-16      ucs-2を拡張してさらに多くの文字を表現できるようにしたもの
u   utf-16le    リトルエンディアンのutf-16
u   ucs-4       UCS-4にエンコードされた32ビットのUnicode (ISO/IEC 10646-1)
u   ucs-4le     リトルエンディアンのucs-4

{name}にはシステムがサポートしているエンコーディングの名前を入れることができ
る。これらの名前はファイルのエンコーディングとロケールのエンコーディングを変換
するときにiconv()に渡される。MS-Windowsでは "cp{number}" はコードページ番号で
ある。
例: >
                :set encoding=8bit-cp1252
                :set encoding=2byte-cp932

MS-Windows のコードページ 1252 は latin1 と良く似ている。実用的な理由から、二
つは同じエンコーディングとして扱われ、latin1 と呼ばれる。0x80 - 0xA0 の文字を
表示するかしないかは 'isprint' で設定できる。

いくつかの別名を使用できる。別名は上記の名前のどれかとして解釈される。
完全ではないが一覧を示す:

1   ansi        latin1と同じ (廃止。後方互換性のために残されている)
2   japan       日本語: Unixではeuc-jp、MS-Windowsではcp932
2   korea       韓国語: Unixではeuc-kr、MS-Windowsではcp949
2   prc         簡体中国語: Unixではeuc-cn、MS-Windowsではcp936
2   chinese     prcと同じ
2   taiwan      繁体中国語: Unixではeuc-tw、MS-Windowsではcp950
u   utf8        utf-8と同じ
u   unicode     ucs-2と同じ
u   ucs2be      ucs-2と同じ (ビッグエンディアン)
u   ucs-2be     ucs-2と同じ (ビッグエンディアン)
u   ucs-4be     ucs-4と同じ (ビッグエンディアン)
u   utf-32      ucs-4と同じ
u   utf-32le    ucs-4leと同じ
    default     'encoding' のデフォルト値を意味する。環境に依存する。

UCSコードにはバイト順の問題がある。これは扱いが難しいので、可能なときにはいつ
でもUTF-8を使用した方が良い。指定がなければビッグエンディアンを使用する(最上位
バイトが最初にくる):
            名前        バイト列        文字 ~
            ucs-2             11 22         1122
            ucs-2le           22 11         1122
            ucs-4       11 22 33 44     11223344
            ucs-4le     44 33 22 11     11223344

MS-WindowsはリトルエンディアンのUCS-2を使用するので、MS-Windowsでは主に
"ucs-2le" を使う。

良く似ているが区別されているエンコーディングがある。Vimはそれらを別のエンコー
ディングとして扱うため、エンコーディングの変換が行われる。エンコーディングの変
換ができないときや、よけいな変換を防ぎたいときは、他の名前を使う必要があるかも
しれない:

        cp932, shift-jis, sjis
        cp936, euc-cn

                                                        encoding-table
通常、'encoding' はロケールと同じ設定で、'termencoding' は空になっている。その
場合、文字の入力と表示はそのロケールでエンコードされる。Vim内部でも同じ文字表
現を使う。

オプション 'encoding' を設定して、Vim内部で使用するエンコーディングを変更する
ことができるが、入力と表示にはロケールが使用されるので、エンコーディングの変換
が必要になる。そのときは 'termencoding' がロケールのエンコーディングとして使用
される。Vimは 'encoding' と 'termencoding' の間でエンコーディングを変換する。
例: >
        :let &termencoding = &encoding
        :set encoding=utf-8

すべてのエンコーディングの組み合わせが利用できるわけではない。下記の表にどのよ
うなものが機能するか示す。すべての変換が可能なわけではなく、iconv()が常に使用
できるとは限らないので、利用できないものもある。これはシステムに依存することな
ので細部まで説明することはできない。

('tenc' は 'termencoding' の省略、'enc' は 'encoding' の省略)

'tenc'      'enc'       説明 ~

 8bit       8bit        機能する。'termencoding' と 'encoding' が違うときは、
                        変換することができないいくつかの文字は入力と表示が正し
                        く行われない。(そのような文字を得るには 'encoding' を
                        'utf-8' に設定する)
 8bit      2byte        MS-Windows: インストールされているすべてのコードページ
                        で機能する。8ビットの文字だけ入力することができる。
                        他のシステム: 機能しない。
 8bit      Unicode      機能するが、8ビット文字しか直接入力できない(他の文字は
                        DIGRAPH、キーマップなどで入力できる)。端末には8ビット
                        文字しか表示できない。GUIでは 'guifont' がサポートして
                        いる文字であれば表示できる。

 2byte      8bit        機能するが、非ASCII文字を入力するには問題がある。
 2byte     2byte        MS-Windows: インストールされているすべてのコードページ
                        で機能する。'encoding' をロケールと違う設定にすると入
                        力に問題あり。
                        他のシステム: 'termencoding' と 'encoding' が同じ場合
                        のみ機能する。'termencoding' は空にしておいたほうが良
                        い。
 2byte     Unicode      機能する。Vimは入力された文字を変換する。

 Unicode    8bit        機能する。(普通はこうしない)
 Unicode    2byte       機能しない。
 Unicode   Unicode      問題なく機能する。(Vim内部ではUnicodeはすべてUTF-8で扱
                        われるため、'termencoding' が空でも同じく機能する)

エンコーディングの変換                                  charset-conversion

Vimはいろいろな場面で自動的にエンコーディングを変換する:
- ファイルを読み込むとき、'fileencoding' と 'encoding' が違う場合
- ファイルを書き込むとき、'fileencoding' と 'encoding' が違う場合
- 文字を表示するとき、'termencoding' と 'encoding' が違う場合
- 入力を受け取るとき、'termencoding' と 'encoding' が違う場合
- メッセージを表示するとき、LC_MESSAGESのエンコーディングが 'encoding' と違う
  場合(gettextのサポートが必要)。
- Vim script を読み込むとき、:scriptencodingが 'encoding' と違う場合
viminfoファイルを読み書きするとき
ほとんどの変換は+iconvの機能が必要である。ファイルを読み書きするときの変換の
動作はオプション 'charconvert' での指定もできる。

エンコーディングを変換するための便利なユーティリティ:
    All:            iconv
        GNU iconvはほぼすべてのエンコーディングを変換できる。変換の中間層に
        Unicodeを使用することで、多くの変換を可能にしている。
        http://www.gnu.org/directory/libiconv.html を参照。

    日本語:         nkf
        "Network Kanji code conversion Filter"。最も特徴的なnkfの機能は漢字
        コードの自動認識である。そのため、ファイルのエンコーディングcharset
        を知る必要がない。ISO-2022-JPやShift_JISをEUC-JPに変換するには、Vimか
        らこのようなコマンドを単に実行すれば良い:
            :%!nkf -e
        Nkfはここから入手できる:
        http://www.sfc.wide.ad.jp/~max/FreeBSD/ports/distfiles/nkf-1.62.tar.gz
{訳注: utf-8対応などの機能が追加されているもの
        https://ja.osdn.net/projects/nkf/ }

    中国語:         hc
        "Hanzi Converter"。HcはGBからBig5へ、Big5からGBへ、の変換をする。Hcは
        ここから入手できる:
        ftp://ftp.cuhk.hk/pub/chinese/ifcss/software/unix/convert/hc-30.tar.gz

    韓国語:         hmconv
        HmconvはE-mailを扱うことに特化した韓国語エンコーディング変換ユーティリ
        ティである。EUC-KRとISO-2022-KRの間の変換ができる。Hmconvはここから入
        手できる:
        ftp://ftp.kaist.ac.kr/pub/hangul/code/hmconv/

    多国語:         lv
        Lvは高性能な多言語ファイルビューアである。そして、エンコーディングの変
        換もできる。サポートしているエンコーディングcharsetは:ISO-2022-CN、
        ISO-2022-JP、ISO-2022-KR、EUC-CN、EUC-JP、EUC-KR、EUC-TW、UTF-7、
        UTF-8、ISO-8859シリーズ、Shift_JIS、Big5、HZ。Lvはここから入手できる:
        http://www.ff.iij4u.or.jp/~nrt/lv/index.html


                                                        mbyte-conversion
'encoding' の設定と違うエンコーディングのファイルを読み書きするときは、エンコー
ディングを変換する必要がある。次の変換がサポートされている:
- Latin-1 (ISO-8859-1)、UTF-8、UCS-2、UCS-4の間の変換はVimが自前で行う。
- MS-Windowsでは、'encoding' がUnicodeなら各コードページとの変換は機能する。
'charconvert' による変換。
- 可能であれば、iconvライブラリを使用して変換することができる。
        古いバージョンのGNU iconv()では変換が失敗することがある(Vimが用意する
        バッファよりも、はるかに大きなバッファを要求するため)。
        その場合は他のiconv()実装を試すこと。

                                                        iconv-dynamic
MS-Windowsでは+iconv/dyn機能つきでVimをコンパイルすることができる。そうする
とVimは "iconv.dll" と "libiconv.dll" を検索するようになる。どちらも見つからな
い場合でもVimは動作するが、変換ができなくなる。

==============================================================================
4. 端末の使用 (Using a terminal)                        mbyte-terminal

GUIではマルチバイト文字を完全にサポートしている。端末を使う場合でも、Vimが使用
するエンコーディングをサポートしていればマルチバイト文字を扱えるが、少し不便な
こともある。

マルチバイト(とXIM)をサポートしているxtermでVimを使用することができる。他に
もkterm(Kanji term)、hanterm(韓国語用)、Eterm(Enlightened terminal)、rxvt、な
どが使用できる。

端末が適切なエンコーディングをサポートしていない場合はオプション 'termencoding'
を設定する。Vimは入力された文字を 'termencoding' から 'encoding' へと変換する。
そして表示するときに 'encoding' から 'termencoding' へと変換する。端末のエン
コーディングに、Vimが取り扱う文字がすべて含まれていない場合、文字の情報が失な
われてしまう。下記で説明しているxtermのように、Unicodeをサポートしている端末な
ら問題はない。ほぼすべての文字セットは情報を失なわずにUnicodeに変換できるから
である。


UTF-8をXFree86 xtermで使う                              UTF8-xterm

{訳注: 最近の環境なら標準で使えるようになっている。}

これは Thomas Dickey によって提供される XFree86 xterm で、どのようにしてUTF-8
エンコードされた文字を利用するかについての簡単な説明である(文: Markus Kuhn)。

UTF-8 をサポートしている最新の xterm を入手すること:

        http://invisible-island.net/xterm/xterm.html

"./configure --enable-wide-chars ; make" としてコンパイルすること。

また ISO 10646-1 バージョンのフォントを入手すること:

        http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz

それから README ファイルの記述に従ってフォントをインストールすること。

そして xterm を起動する。 >

  xterm -u8 -fn -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
大きな文字を使うときは: >
  xterm -u8 -fn -misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1

そうするとUTF-8端末エミュレータが動作するだろう。
ucs-fonts.tar.gz に含まれている次の両方のデモ・ファイルを試して: >

   cat utf-8-demo.txt
   vim utf-8-demo.txt

xtermでUTF-8が問題なく動作しているかどうか確認すること。

Vimの 'encoding' を 'utf-8' に設定する必要がある。

==============================================================================
5.  X11のフォント (Fonts on X11)                        mbyte-fonts-X11

X11でのフォントの取り扱いは難しい。シングルバイトフォントの名前は長い文字列で
ある。マルチバイトフォントを使うにはさらにいくつか考慮することがある。

Note: この説明のほとんどはGTK+ 2にとっては関係ない。XLFDを用いたフォントの指定
はサポートされていない。フォントの設定例は 'guifont' を参照。下記の項XLFD
xfontsetは読んでも読まなくても良い。

Vimは固定幅のフォントだけを扱うことができる。プロポーショナルフォントを使用す
ることはできない。そのため多くの(見た目の良い)フォントは使用できない。しかし、
メニューやツールチップにはどのフォントでも使用することができる。

Note: 表示と入力は独立している。入力したい言語のインプットメソッドがなくても、
表示することはできる。

メニューやツールチップは標準設定のフォントでも機能するが、おそらくそれは、あま
り見た目が良くない。より良いフォントを選ぶには下記の説明を参照。


X論理フォント名 (X LOGICAL FONT DESCRIPTION (XLFD))
                                                        XLFD
XLFDはXのフォント名であり、フォントサイズや文字セットなどの情報を含んでいる。
名前はこのような書式になっている:

FOUNDRY-FAMILY-WEIGHT-SLANT-WIDTH-STYLE-PIXEL-POINT-X-Y-SPACE-AVE-CR-CE

各フィールドの意味:

- FOUNDRY:  FOUNDRY フィールド。フォントを作成、提供した組織名。
- FAMILY:   FAMILY_NAME フィールド。フォントファミリの名前(書体名)
            (helvetica、gothic、times、など)
- WEIGHT:   WEIGHT_NAME フィールド。文字の太さ。(light、medium、bold、など)
- SLANT:    SLANT フィールド (文字の傾き)
                r:  Roman (ローマン体。正字体。傾きなし)
                i:  Italic (イタリック体)
                o:  Oblique (斜体)
                ri: Reverse Italic (逆傾きのイタリック体)
                ro: Reverse Oblique (逆傾きの斜体)
                ot: Other (その他)
                number: Scaled font (傾きの角度)
- WIDTH:    SETWIDTH_NAME フィールド。文字幅。
            (normal、condensed、narrow、double wide)
- STYLE:    ADD_STYLE_NAME フィールド。フォントの追加情報。
            (Serif、Sans Serif、Informal、Decorated、など)
- PIXEL:    PIXEL_SIZE フィールド。ピクセル単位の文字の高さ。
- POINT:    POINT_SIZE フィールド。ポイント単位の文字の高さを10倍した値。
- X:        RESOLUTION_X フィールド。X軸方向の解像度(1インチあたりのドット数)
- Y:        RESOLUTION_Y フィールド。Y軸方向の解像度(1インチあたりのドット数)
- SPACE:    SPACING フィールド。 (文字送り)
                p:  Proportional (プロポーショナル、可変幅)
                m:  Monospaced   (モノスペース、固定幅)
                c:  CharCell     (文字セル)
- AVE:      AVERAGE_WIDTH フィールド。ピクセル単位の文字幅の平均値を10倍した値。
- CR:       CHARSET_REGISTRY フィールド。文字セットの名前。
- CE:       CHARSET_ENCODING フィールド。文字セットの追加情報。JIS X 0208のよ
            うな文字セットは、このフィールドが0ならコードポイントはGLと同じ値
            を持つ。1ならGRと同じ。
{訳注: jisx0208の場合、CHARSET_ENCODING=0なら7ビットJISコード、1ならEUC-JP、の
       番号で、文字がフォントに収録されている。}

例えば、JIS X 0208に対応する16ドットのフォントは次のように書く:
    -misc-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1990-0


X フォントセット (X FONTSET)
                                                fontset xfontset
シングルバイト文字セットは一般的に一つのフォントに関連付けられている。マルチバ
イト文字セットはほとんどの場合、複数のフォントの組合せを使用する。そして表示す
る文字に合ったフォントが選択されて使用される。そのようなフォントの集合をフォン
トセットと呼ぶ。

ロケールによって必要なフォントは異なる。X-Windowはロケールに必要な文字セットの
表を管理している。ロケールが必要とする全てのフォントをオプション 'guifontset'
に設定しなければならない。

'guifontset' オプションを設定すると、すべてのフォント名がフォントセット名とし
て扱われる。:highlight コマンドの "font" 引数に使用されるものもある。

Note 'guifont' と 'guifontset' の違いに注意すること。'guifont' では、コンマ区
切りの名前は代替名で、そのうちの1つが使用される。'guifontset' では、文字列全体
が、コンマを含む1つのフォントセット名である。代替フォントセット名を指定するこ
とはできない。
この例は多くのX11システムで動作する: >
        :set guifontset=-*-*-medium-r-normal--16-*-*-*-c-*-*-*
<
フォントは現在のロケールと一致しなければならない。現在のロケールで使用されてい
る文字セットのフォントが含まれていない場合、'guifontset' の設定は失敗する。

NOTE'encoding' が、ロケールとは違う文字セットに設定されていても、フォントセッ
トは常にロケールを使用する。そういう場合は 'guifontset' ではなく 'guifont' と
'guifontwide' を使用する。

例:
    |charset| language              "groups of characters" ~
    GB2312    簡体中国語            ISO-8859-1 and GB 2312
    Big5      繁体中国語            ISO-8859-1 and Big5
    CNS-11643 繁体中国語            ISO-8859-1, CNS 11643-1 and CNS 11643-2
    EUC-JP    日本語                JIS X 0201 and JIS X 0208
    EUC-KR    韓国語                ISO-8859-1 and KS C 5601 (KS X 1001)

xlsfontsコマンドを使ってフォントを検索できる。例えば、KS C 5601のフォントを探
すには: >
    xlsfonts | grep ksc5601

これは複雑で混乱しやすいことなので、分からないことはX-Windowのドキュメントで調
べること。

                                                base_font_name_list
使用したいフォントの名前を見付けたらオプション 'guifontset' を設定する。設定は
フォントの名前をコンマで区切って指定する。

例えば、ja_JP.eucJPロケールの場合、JIS X 0201とJIS X 0208が必要である。次のよ
うに文字セットを明示的に指定してフォントを設定する: >

 :set guifontset=-misc-fixed-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0,
        \-misc-fixed-medium-r-normal--14-130-75-75-c-70-jisx0201.1976-0

文字セットの名前を省略した場合、X-Windowが、ロケールに必要なフォントを選択す
る。例: >

 :set guifontset=-misc-fixed-medium-r-normal--14-130-75-75-c-140,
        \-misc-fixed-medium-r-normal--14-130-75-75-c-70

基本となるフォントの名前を一つだけ指定して、利用可能なすべてのフォントの中から
選択させることもできる。例: >

 :set guifontset=-misc-fixed-medium-r-normal--14-*

フォントの別名を指定することもできる。フォントディレクトリ(例えば
/usr/X11R6/lib/X11/fonts/)のファイルfonts.aliasを見ること。例: >

 :set guifontset=k14,r14
<
                                                        E253
Note 東アジアのフォントは、基本的には正四角形の範囲で表示される。ラテンフォン
トと東アジアのフォントを組み合わせた場合、東アジアのフォントはラテンフォントの
2倍の幅で表示される。

'guifontset' が空の場合、コマンド:highlightの "font" 引数はフォントセットと
して解釈される。例えばこのように使用する: >
        :hi Comment font=english_font,your_font
間違った "font" 引数を使用するとエラーメッセージが表示される。事前に
'guifontset' を設定して確認すること。


リソースファイルを使う (USING RESOURCE FILES)

'guifontset' を設定する代わりにX11のリソースを設定すれば、Vimはそれを使用する。
これはXのリソースファイルの働きを知っている人向けである。

Motifではファイル$HOME/.Xdefaultsにこの3行を追加する:

        Vim.font: base_font_name_list
        Vim*fontSet: base_font_name_list
        Vim*fontList: your_language_font

Note: Vim.font はテキストエリアの設定
      Vim*fontSet はメニューの設定
      Vim*fontList はメニューの設定(Motif GUI用)

例えば、14ドットの日本語フォントを使うには: >

        Vim.font: -misc-fixed-medium-r-normal--14-*
        Vim*fontSet: -misc-fixed-medium-r-normal--14-*
        Vim*fontList: -misc-fixed-medium-r-normal--14-*
<
もしくは: >

        Vim*font: k14,r14
        Vim*fontSet: k14,r14
        Vim*fontList: k14,r14
<
この設定をすぐに反映させるには >

        xrdb -merge ~/.Xdefaults

もしくはXサーバーを停止して再起動する。


GTK+版のVimは.Xdefaultsを使わず~/.gtkrcの設定を使用する。初期設定は恐らくうま
く機能するが、メニューのフォントは変更した方がいいかもしれない。例: >

        style "default"
        {
                fontset="-*-*-medium-r-normal--14-*-*-*-c-*-*-*"
        }
        widget_class "*" style "default"

==============================================================================
6.  MS-Windowsのフォント (Fonts on MS-Windows)  mbyte-fonts-MSwin

最も簡単なのは、フォント選択ダイアロクを使ってフォントを選択して、試してみるこ
とである。メニューの "Edit/Select Font..." (編集/フォント設定)を使用する。ちょ
うどいいフォントを見付けたら、このコマンドでフォントの名前を確認する: >

        :set guifont

そして、'guifont' を設定するコマンドをgvimrcに追加する: >

        :set guifont=courier_new:h12

==============================================================================
7.  X11での入力 (Input on X11)                  mbyte-XIM

X INPUT METHOD (XIM) の基礎知識                 XIM xim x-input-method

XIMはXの国際化入力機構である。Xlibユニット型とIM-server (Input-Method
server) 型の2種類がある。IM-server型はCJK(日中韓)で使われるような複雑な入力
方式に適している。

- インプットメソッドサーバー (IM-server)
                                                        IM-server
  IM-server型の入力方式では、FrontEndシステムかBackEndシステムのどちらかの方
  法で入力イベントを処理する。FrontEndシステムでは、まずIM-serverが入力イベ
  ントを取得し、そして入力の結果をIM-serverからアプリケーションへ渡す。
  BackEndシステムではその逆の順番で処理される。MS-WindowsはBackEndシステムを採
  用している。Xでは、ほとんどのIM-serverがFrontEndシステムを採用している。
  BackEndシステムには通信のオーバーヘッドが大きく掛かるというデメリットはある
  が、アプリケーションに制限を加えず、安全に同期することができる。

  例えばxwnmoとkinput2という日本語インプットメソッドサーバーがあるが、両方とも
  FrontEndシステムである。xwnmoはWnn(下記参照)と一緒に提供されている。kinput2
  はここから入手できる: ftp://ftp.sra.co.jp/pub/x11/kinput2/

  中国語用には、"xcin" というよくできたXIMサーバーがあり、簡体中国語と繁体中国
  語の両方を入力できる。適切な入力テーブルを作成すれば、他のロケールも受け付け
  る。Xcinはここから入手できる: http://cle.linux.org.tw/xcin/
  他にはscim: http://scim.freedesktop.org/ と fcitx:
  http://www.fcitx.org/ がある。

- 変換サーバー (Conversion Server)
                                                        conversion-server
  いくつかのシステムではさらに、変換サーバーが必要である。ほとんどの日本語イン
  プットメソッドサーバーは仮名漢字変換サーバーを必要とする。中国語の入力では、
  入力方式に依存する。いくつかの方式では、PinYinやZhuYinからHanZiへの変換サー
  バーが必要である。韓国語の入力では、Hanjaを入力するには、Hangul-Hanja変換サー
  バーが必要である。

  例えば、日本語の入力は2段階に分けられる。最初に平仮名を入力し、次に漢字へ変
  換する。多くの漢字(JIS X 0208には6349文字が定義されている)と76文字の平仮名が
  あるため、まず平仮名を入力し、必要なら、それを漢字や片仮名に変換する。仮名漢
  字変換サーバーにはjserver(Wnnと一緒に提供されている。下記参照)やcannaなどが
  ある。Cannaはここから入手できる:
  http://canna.sourceforge.jp/

Wnn4.2というよくできた入力システムがある。Wnn4.2は以下のものを含んでいる。
    xwnmo (IM-server)
    jserver (日本語仮名漢字変換サーバー)
    cserver (中国語のPinYin、ZhuYinから簡体漢字への変換サーバー)
    tserver (中国語のPinYin、ZhuYinから繁体漢字への変換サーバー)
    kserver (Hangul-Hanja変換サーバー)
Wnn4.2は多くのシステムで動作し、インターネットのさまざまな場所で入手することが
できる。あなたのシステム用のRPMやportを使用すること。


- 入力スタイル (Input Style)
                                                        xim-input-style
  CJK(日中韓語)を入力するとき、4つの表示領域がある:
      1. 入力途中の文字を表示する領域
      2. 現在の入力モードを表示する領域
      3. 変換候補を表示する領域
      4. その他のツールを表示する領域

  3番目の表示領域は変換をするときに必要である。例えば、日本語の入力では、同じ
  発音の漢字が複数あるので、同じ平仮名が複数の漢字に対応する。

  1番目と2番目の表示領域はXの国際化入力でそれぞれ "Preedit Area"、"Status Area"
  と定義されている。3番目と4番目の表示領域は定義されておらず、IM-serverに任
  されている。国際化入力ではPreedit AreaとStatus Areaの組み合せで4つの入力スタ
  イルが定義されている: OnTheSpot OffTheSpot OverTheSpot Root

  現在、GUI VimはOverTheSpotOffTheSpotRootの3つのスタイルをサポート
  している。
  +GUI_GTK 機能付きでコンパイルされた場合は、GUI Vimは OnTheSpot と
  OverTheSpot の 2 つのスタイルをサポートする。'imstyle' でスタイルを選択す
  ることができる。

*.  on-the-spot                                         OnTheSpot
    Preedit AreaとStatus Areaはアプリケーション領域にクライアントアプリケー
    ションによって表示される。クライアントアプリケーションはテキストを挿入する
    位置に未確定文字をすべて表示するようにIM-serverから指示される。クライア
    ントは、コールバック関数を登録して、未確定文字の入力中にインプットメソッド
    から呼び出してもらう。
*.  over-the-spot                                       OverTheSpot
    Status Areaはアプリケーション領域の固定位置に作成される。Vimの場合は、ス
    テータスライン付近である。Preedit Areaはアプリケーションの入力している位置
    に作成される。インプットメソッドは、テキストが挿入される位置にあるウィンド
    ウに未確定文字を表示する。
*.  off-the-spot                                        OffTheSpot
    Preedit AreaとStatus Areaはアプリケーション領域に表示される。Vimの場合は、
    ステータスライン付近である。クライアントアプリケーションは表示ウィンドウを
    提供し、インプットメソッドが直接そこに未確定文字を表示する。
*.  root-window                                         Root
    Preedit AreaとStatus Areaはアプリケーションの外側に表示される。インプット
    メソッドは別に用意した自分のウィンドウに未確定文字をすべて表示する。


XIMを使用する (USING XIM)       multibyte-input E284 E285 E286 E287
                                        E288 E289

Note 表示と入力は独立している。インプットメソッドがなくてもあなたの言語を見る
ことができる。しかし、表示方法とインプットメソッドが合わないと、テキストは間
違って表示される。

        Note'guifontset' を設定しないとインプットメソッドを使用できない。従っ
        て、ラテン語のユーザーも、インプットメソッドを使用するなら、'guifontset'
        を設定しなければならない。

あなたの言語を入力するには、その言語をサポートしているインプットメソッドサーバー
IM-serverを実行する。必要なら変換サーバーconversion-serverも実行する。

次の3行を~/.Xdefaultsファイルに書き込む。これはXIMを使用するすべてのXアプリ
ケーションに共通する設定である。すでにXIMを使用している場合は、これを読み飛
ばすこと。 >

        *international: True
        *.inputMethod: your_input_server_name
        *.preeditType: your_input_style
<
input_server_name       インプットサーバーIM-serverの名前。(IM-serverのマ
                        ニュアルを確認すること)。
your_input_style        OverTheSpotOffTheSpotRootのどれか。
                        xim-input-styleを参照。

X11R6を使用している場合、*internationalは必要ない。
また、*.inputMethodと*.preeditTypeの指定は任意。

kinput2をIM-serverとして使う場合の例: >

        *international: True
        *.inputMethod: kinput2
        *.preeditType: OverTheSpot
<
OverTheSpotを使用する場合、GUI Vimはノーマルモードでも常にインプットメソッド
サーバーに接続する。そのため "f" や "r" コマンドであなたの言語を入力することが
できる。しかし、他の入力スタイルの場合は、GUI Vimはノーマルモードのときにはイ
ンプットメソッドサーバーに接続しない。

インプットメソッドサーバーがOverTheSpotをサポートしていない場合、"f" や "r"
などのノーマルモードコマンドであなたの言語を使用するには、ローカライズされた
xtermか、XIMをサポートしたxtermを使用する。

必要なら、環境変数XMODIFIERSを設定する:

        sh:  export XMODIFIERS="@im=input_server_name"
        csh: setenv XMODIFIERS "@im=input_server_name"

インプットメソッドサーバーにkinput2を使用する場合のshでの設定例: >

        export XMODIFIERS="@im=kinput2"
<

XIMの制御 (FULLY CONTROLLED XIM)

MS-WindowsのIME(multibyte-ime参照)のように、XIMを制御することができる。
この機能は現在GTK GUIでのみ利用可能。

XIMを制御するには、使用しているインプットメソッドのトグルキーを、オプション
'imactivatekey' に設定する必要がある。例えば、インプットメソッドサーバーに
kinput2 + cannaの組み合せを使用している場合、トグルキーは恐らくShift+Spaceなの
で、このように設定する: >

        :set imactivatekey=S-space

設定の書式は 'imactivatekey' を参照。

==============================================================================
8.  MS-Windowsでの入力 (Input on MS-Windows)            mbyte-IME

(Windows IME support)                           multibyte-ime IME

{WindowsのGUI環境で+multi_byte_imeが有効な場合のみ利用可能}

Windowsではマルチバイト文字の入力に Input Method Editor (IME) を使うことができ
る。IMEを使ったテキストの入力では、IMEの状態をオンにしたりオフにしたり、何度も
何度も切り替えなければならない。そうしないと、IMEの状態がオンのときには、キー
入力はすべてIMEに取られてしまうので、'j' や 'k' などほぼすべてのキーを、直接
Vimに入力することができない。

+multi_byte_ime機能はそれを手助けし、IMEの状態を手動で切り替えなければならな
い頻度を減少させる。マルチバイトテキストを編集しているときでも、ノーマルモード
でIMEを使用する必要があることはほとんどない。そこで挿入モードを抜けるときに、
VimはIMEの最後の状態を記録してからIMEをオフにする。そして再度挿入モードに入っ
たときに、記録しておいたIMEの状態に自動的に設定する。

これは挿入モードとノーマルモードの間だけでなく、コマンドラインや検索コマンドの
入力時や置換モードでも同じである。
オプション 'iminsert''imsearch''imcmdline' を設定して、それぞれ別々に入力
方法を選択したり、無効にしたりできる。

Windows 9x および Windows NT 4.0 では global-ime があったが、これはサポートさ
れなくなった。Active Input Method Manager (Global IME) のドキュメントはまだこ
こにある:
        http://msdn.microsoft.com/en-us/library/aa741221(v=VS.85).aspx

NOTE: IMEを使用するには入力したい言語をシステムに追加する必要がある。正確な設
定方法はWindowsのバージョンによって違う。Windows XPの場合は:
1. コントロールパネルを開く
2. 地域と言語のオプションを開く
3. 言語タブを選択
4. [テキストサービスと入力言語]エリアの詳細ボタンをクリック
5. 追加ボタンをクリック


IMEやXIMがオンのときのカーソルの色                              CursorIM
    IMEの状態に応じてカーソルの色を変えることができる。通常、IMEの状態はデスク
    トップの隅(やタスクバー)に表示されているが、これはあまり確認しやすくないの
    で、この機能が役に立つ。
    これはXIMでも同じように機能する。

    ハイライトグループ CursorIM を設定して、IMEの状態がオンのときの色を選べる。
    例えば、次の行をgvimrcに追加する: >

        if has('multi_byte_ime')
            highlight Cursor guifg=NONE guibg=Green
            highlight CursorIM guifg=NONE guibg=Purple
        endif
<
    これで、IMEがオフならカーソルは緑、オンなら紫になる。

==============================================================================
9. キーマップでの入力 (Input with a keymap)             mbyte-keymap

キーボードから入力できない文字がある場合にはオプション 'keymap' を使う。一つ以
上の(英語の)文字を入力することで、別の(非英語の)文字を入力することができる。こ
の機能はテキストを入力するときだけ作用する。Vimコマンドを入力するときには作用
しない。そのため、キーボードの設定を切り替える手間がない。
{Vimが +keymap 機能付きでコンパイルされたときにのみ利用可能}

オプション 'keymap' に、使用したいキーマップファイルを指定する。ファイルの名前
は次の二つのうちのどちらか:

        keymap/{keymap}_{encoding}.vim
        keymap/{keymap}.vim

{keymap}はオプション 'keymap' に設定する値、{encoding}はオプション 'encoding'
の値。{encoding}付きのファイル名が優先して使われる。

キーマップファイルを探すために 'runtimepath' が使われる。利用可能なすべてのキー
マップファイルを一覧するには、このようにする: >
        :echo globpath(&rtp, "keymap/*.vim")

挿入モードとコマンドラインモードでは、CTRL-^を使ってキーマップを使用するかどう
かを切り換えることができる。i_CTRL-^ c_CTRL-^
挿入モードでは、キーマップの状態はオプション 'iminsert' に記憶される。挿入モー
ドから抜けて、再び挿入モードに入ったときに、以前の状態が使われる。f や r
などの一つの文字を引数に取るコマンドでも同じ値が使われる。
コマンドラインモードでは、キーマップの状態は記憶されない。コマンドラインモード
に入るとまず、(ASCII文字の)Exコマンドを入力するはずだからである。
検索パターンの入力では、オプション 'imsearch' が使われる。'iminsert' と設定を
共有するように設定することもできる。
                                                                lCursor
キーマップ(言語マップ)を使用中に、GUIカーソルの色を変えることができる。もし
も、非標準な背景色を使用していた場合にカーソルが見えなくなることがないように、
初期状態ではこの機能は無効になっている。次の例では、カーソルの色が明るくなるよ
うにしている: >
        :highlight Cursor guifg=NONE guibg=Green
        :highlight lCursor guifg=NONE guibg=Cyan
<
                keymap-file-format :loadk :loadkeymap E105 E791
キーマップファイルはこのような構成になっている: >

        " Maintainer:   name <email@address>
        " Last Changed: 2001 Jan 1

        let b:keymap_name = "short"

        loadkeymap
        a       A
        b       B       comment

「"」で始まる行はコメントなので無視される。空白行も無視される。マップを定義す
る行には役に立つコメントを書くことができる。

"b:keymap_name" にはステータスラインに表示される短い名前を設定できる。'keymap'
の値は、言語の違いやキーボードやエンコーディングの違いを区別するために長くなり
がちだが、ステータスラインに表示できる文字には限りがあるので、この変数を使う。

実際のマップは "loadkeymap" 以下に書く。上の例では、"a" は "A" に、"b" は "B"
にマップされる。このように、一番目のものが二番目にマップされる。そして、ファイ
ルの末尾まで同じように処理される。
このように設定したマップは、:lnoremapに "<buffer>" を指定したバッファローカ
ルなマップとまったく同じである。
それはこのコマンドで確認できる: >
        :lmap
二つの項目は空白で区切る。マップに空白を含めるには、"<Tab>"、"<Space>" という
特別な表記を使う。二つの項目の文字の長さは、合わせて200バイトを超えてはいけな
い。

一番目の項目に複数の文字を指定することができる。これはデッドキーのような作用を
する。例: >
        'a      á
クォートの入力があったとき、次に "a" が入力されるかどうかわからないので、Vimは
次の文字が入力されるまで待機する。シングルクォートを入力できるようにするには、
次の行も加える: >
        ''      '
マップは:lnoremapで定義されるので、結果のクォート文字は、他のマップの開始文
字としては扱われない。
{訳注: > シングルクォートを入力できるようにするには...
       'timeout' も参照。}
"accents" キーマップはこれを使用する。                          keymap-accents

最初の列は <> 表記で書くこともできる:
        <C-c>           Ctrl-C
        <A-c>           Alt-c
        <A-C>           Alt-C
Note: Alt マッピングは機能しないことがある。それはキーボードや端末に依存する。

二番目の項目に複数の文字を指定することもできるが、一般的ではない。しか
し、文字を指定するのにいろいろな方法を使用して構わない: >
        A       a               literal character
        A       <char-97>       decimal value
        A       <char-0x61>     hexadecimal value
        A       <char-0141>     octal value
        x       <Space>         special key name

文字は現在の 'encoding' と同じエンコーディングであるものとして扱われる。
":scriptencoding" でリテラル文字のエンコーディングを指定することができるが、
<char->表記の文字には影響しない。なぜなら、キーマップファイルのエンコーディン
グが変換されるのであって、<char->の結果の文字は変換されないからである。

"loadkeymap" 以下の行は 'cpoptions' に "C" を設定した状態で解釈される。つまり、
行の継続は使用されない。バックスラッシュは特殊文字として扱われる。例: >

        " a comment line
        \"      x       " を x へマップ
        \\      y       \ を y へマップ

他の人にも便利なキーマップファイルを作成したら、Vimの配布物に含めるために、Vim
のメンテナーに提出することを検討していただきたい:
<maintainer@vim.org>


ヘブライ語 キーマップ (HEBREW KEYMAP)                   keymap-hebrew

このファイルはUTF-8とCP1255のエンコーディングで利用可能な文字と、その文字を入
力するためのキーマップを説明している:

glyph   encoding           keymap ~
Char UTF-8 cp1255  hebrew  hebrewp  name ~
א    0x5d0  0xe0     t        a     'alef
ב    0x5d1  0xe1     c        b     bet
ג    0x5d2  0xe2     d        g     gimel
ד    0x5d3  0xe3     s        d     dalet
ה    0x5d4  0xe4     v        h     he
ו    0x5d5  0xe5     u        v     vav
ז    0x5d6  0xe6     z        z     zayin
ח    0x5d7  0xe7     j        j     het
ט    0x5d8  0xe8     y        T     tet
י    0x5d9  0xe9     h        y     yod
ך    0x5da  0xea     l        K     kaf sofit
כ    0x5db  0xeb     f        k     kaf
ל    0x5dc  0xec     k        l     lamed
ם    0x5dd  0xed     o        M     mem sofit
מ    0x5de  0xee     n        m     mem
ן    0x5df  0xef     i        N     nun sofit
נ    0x5e0  0xf0     b        n     nun
ס    0x5e1  0xf1     x        s     samech
ע    0x5e2  0xf2     g        u     `ayin
ף    0x5e3  0xf3     ;        P     pe sofit
פ    0x5e4  0xf4     p        p     pe
ץ    0x5e5  0xf5     .        X     tsadi sofit
צ    0x5e6  0xf6     m        x     tsadi
ק    0x5e7  0xf7     e        q     qof
ר    0x5e8  0xf8     r        r     resh
ש    0x5e9  0xf9     a        w     shin
ת    0x5ea  0xfa     ,        t     tav

Vowel marks and special punctuation:
הְ    0x5b0  0xc0     A:      A:   sheva
הֱ    0x5b1  0xc1     HE      HE   hataf segol
הֲ    0x5b2  0xc2     HA      HA   hataf patah
הֳ    0x5b3  0xc3     HO      HO   hataf qamats
הִ    0x5b4  0xc4     I       I    hiriq
הֵ    0x5b5  0xc5     AY      AY   tsere
הֶ    0x5b6  0xc6     E       E    segol
הַ    0x5b7  0xc7     AA      AA   patah
הָ    0x5b8  0xc8     AO      AO   qamats
הֹ    0x5b9  0xc9     O       O    holam
הֻ    0x5bb  0xcb     U       U    qubuts
כּ    0x5bc  0xcc     D       D    dagesh
הֽ    0x5bd  0xcd     ]T      ]T   meteg
ה־   0x5be  0xce     ]Q      ]Q   maqaf
בֿ    0x5bf  0xcf     ]R      ]R   rafe
ב׀   0x5c0  0xd0     ]p      ]p   paseq
שׁ    0x5c1  0xd1     SR      SR   shin-dot
שׂ    0x5c2  0xd2     SL      SL   sin-dot
׃    0x5c3  0xd3     ]P      ]P   sof-pasuq
װ    0x5f0  0xd4     VV      VV   double-vav
ױ    0x5f1  0xd5     VY      VY   vav-yod
ײ    0x5f2  0xd6     YY      YY   yod-yod

The following are only available in UTF-8

Cantillation marks:
glyph
Char UTF-8 hebrew name
ב֑    0x591   C:   etnahta
ב֒    0x592   Cs   segol
ב֓    0x593   CS   shalshelet
ב֔    0x594   Cz   zaqef qatan
ב֕    0x595   CZ   zaqef gadol
ב֖    0x596   Ct   tipeha
ב֗    0x597   Cr   revia
ב֘    0x598   Cq   zarqa
ב֙    0x599   Cp   pashta
ב֚    0x59a   C!   yetiv
ב֛    0x59b   Cv   tevir
ב֜    0x59c   Cg   geresh
ב֝    0x59d   C*   geresh qadim
ב֞    0x59e   CG   gershayim
ב֟    0x59f   CP   qarnei-parah
ב֪    0x5aa   Cy   yerach-ben-yomo
ב֫    0x5ab   Co   ole
ב֬    0x5ac   Ci   iluy
ב֭    0x5ad   Cd   dehi
ב֮    0x5ae   Cn   zinor
ב֯    0x5af   CC   masora circle

Combining forms:
ﬠ    0xfb20  X`   Alternative `ayin
ﬡ    0xfb21  X'   Alternative 'alef
ﬢ    0xfb22  X-d  Alternative dalet
ﬣ    0xfb23  X-h  Alternative he
ﬤ    0xfb24  X-k  Alternative kaf
ﬥ    0xfb25  X-l  Alternative lamed
ﬦ    0xfb26  X-m  Alternative mem-sofit
ﬧ    0xfb27  X-r  Alternative resh
ﬨ    0xfb28  X-t  Alternative tav
﬩    0xfb29  X-+  Alternative plus
שׁ    0xfb2a  XW   shin+shin-dot
שׂ    0xfb2b  Xw   shin+sin-dot
שּׁ    0xfb2c  X..W  shin+shin-dot+dagesh
שּׂ    0xfb2d  X..w  shin+sin-dot+dagesh
אַ    0xfb2e  XA   alef+patah
אָ    0xfb2f  XO   alef+qamats
אּ    0xfb30  XI   alef+hiriq (mapiq)
בּ    0xfb31  X.b  bet+dagesh
גּ    0xfb32  X.g  gimel+dagesh
דּ    0xfb33  X.d  dalet+dagesh
הּ    0xfb34  X.h  he+dagesh
וּ    0xfb35  Xu  vav+dagesh
זּ    0xfb36  X.z  zayin+dagesh
טּ    0xfb38  X.T  tet+dagesh
יּ    0xfb39  X.y  yud+dagesh
ךּ    0xfb3a  X.K  kaf sofit+dagesh
כּ    0xfb3b  X.k  kaf+dagesh
לּ    0xfb3c  X.l  lamed+dagesh
מּ    0xfb3e  X.m  mem+dagesh
נּ    0xfb40  X.n  nun+dagesh
סּ    0xfb41  X.s  samech+dagesh
ףּ    0xfb43  X.P  pe sofit+dagesh
פּ    0xfb44  X.p  pe+dagesh
צּ    0xfb46  X.x  tsadi+dagesh
קּ    0xfb47  X.q  qof+dagesh
רּ    0xfb48  X.r  resh+dagesh
שּ    0xfb49  X.w  shin+dagesh
תּ    0xfb4a  X.t  tav+dagesh
וֹ    0xfb4b  Xo   vav+holam
בֿ    0xfb4c  XRb  bet+rafe
כֿ    0xfb4d  XRk  kaf+rafe
פֿ    0xfb4e  XRp  pe+rafe
ﭏ    0xfb4f  Xal  alef-lamed

==============================================================================
10. imactivatefunc() を使用した入力                             mbyte-func

Vim には 'imactivatefunc' および 'imstatusfunc' オプションがある。これらは外部
コマンドやその他の方法によって Vim からインプットメソッドを有効/無効にするのに
便利である。例として、fcitx は fcitx-remote コマンドを提供する: >

        set iminsert=2
        set imsearch=2
        set imcmdline

        set imactivatefunc=ImActivate
        function! ImActivate(active)
          if a:active
            call system('fcitx-remote -o')
          else
            call system('fcitx-remote -c')
          endif
        endfunction

        set imstatusfunc=ImStatus
        function!  ImStatus()
          return system('fcitx-remote')[0] is# '2'
        endfunction

このスクリプトを使うことによって、Vim が +xim 付きでコンパイルされていない場
合でも XIM を有効/無効にすることができる。

==============================================================================
11. UTF-8を使う (Using UTF-8)           mbyte-utf8 UTF-8 utf-8 utf8
                                                        Unicode unicode
Unicodeは、他の文字セットをすべて含むように設計された。そのため、どんな言語の
テキストでもUnicodeを使って書くことができる(希少な言語を除く)。そして、他のエ
ンコーディングでは混在させることが不可能な言語でも、一つのファイルに混在させる
ことが可能である。

Unicodeにはいくつかのエンコード法がある。もっとも一般的なのは、1文字を 1 また
は複数バイトで表わすUTF-8であり、ASCII と後方互換性がある。MS-Windowsでは
UTF-16 も使われる(以前は UCS-2 と呼ばれていた)。こちらは 16 ビットを基本単位と
する。Vimはこれらのエンコーディングすべてをサポートしているが、Vim で Unicode
を使う場合、内部では常に UTF-8 が使われている。

Vimは幅広くUTF-8をサポートしており、それは以下の環境で機能する:
- UTF-8サポートが有効になっているxterm
- Motif、GTK の GUI
- MS-Windows GUI
- その他いくつかのプラットフォーム

全角文字は 'guifontwide' や 'guifontset' を使うと最もうまく表示することができ
る。'guifont' だけを設定している場合は、全角文字は通常の幅で描画され、足りない
幅が空白で埋められる。Note: オプション 'guifontset' はGTK+ 2 GUIでは使用しな
い。

                                                        bom-bytes
ファイルを読み込むとき、BOM (Byte Order Mark)があれば、そのUnicodeエンコーディ
ングを判別するのに使われる:
        EF BB BF     UTF-8
        FE FF        UTF-16 big endian
        FF FE        UTF-16 little endian
        00 00 FE FF  UTF-32 big endian
        FF FE 00 00  UTF-32 little endian

UTF-8 が推奨されているエンコーディングである。UTF-16 と UTF-32 を区別するのは
難しい。Windows ではUTF-16 がしばしば使われる。UTF-32 はファイルフォーマットと
しては広く使われていない。


                                        mbyte-combining mbyte-composing
合成文字や結合文字を使うと、先行文字の意味を変えることができる。結合文字は先行
文字に重ねて描画される。
デフォルトで2文字までの結合文字を扱うことができる。この値はオプション
'maxcombine' で変更できる。
テキストの編集中は、合成文字は先行文字の一部として扱われる。例えば、初期設定で
は、"x" は文字を削除するときに、連なる合成文字をいっぺんに削除する。オプション
'delcombine' がオンのときには、'x' は1回に1文字の結合文字を削除して、最後に基
底文字を削除する。入力するときには、まず1文字目を入力して、そして合成文字を入
力する。すると、文字が合成される。"r" コマンドを使って結合文字を入力することは
できない。結合文字がさらに入力されるかどうか知ることができないからである。代わ
りに "R" を使う。
{訳注: combining character 結合文字
       composing character 合成文字
       base character      基底文字
       preceding character 先行文字?}

UTF-8として不正なバイト列はそれぞれ1バイトの文字として扱われ、<xx>と表示され
る。この "xx" はそのバイトの16進数である。

Overlong sequenceに対して特別な処理はされない。通常の文字と同じように表示され
る。Overlong sequenceはどんな検索パターンにもマッチしないかもしれない。
(Overlong sequenceとは、文字を表すために必要なバイトよりも多くのバイトでその文
字を表現しているバイト列のこと。) "<00>" と表示されているNUL(zero)は例外。
{訳注: たぶん、"<00>" と表示されてるOverlong sequenceだけはたとえ/\_.でもマッ
       チしないということ。}

ファイルやバッファには、Unicodeで表現できる範囲(31ビット)の文字をすべて書くこ
とができる。ただし、それを表示できるのは使用フォントがその文字を提供している場
合のみ。

便利なコマンド:
- "ga" はカーソル位置の文字のコードを10進数、16進数、8進数で表示する。合成文字
  も表示される。(表示が途切れてしまった場合は、":messages" を使う)。
- "g8" は文字のUTF-8コードを16進数で表示する。合成文字も表示される。
- ":set encoding=utf-8 fileencodings=" とすると、すべてのファイルでUTF-8を使う
  ように強制できる。'encoding' を現在のロケールに合わせて設定し、
  'fileencodings' によって自動的にファイルのエンコーディングを判定するように設
  定するのがデフォルトである。


VimをUTF-8モードで起動する (STARTING VIM)

ロケールがUTF-8の場合、Vimは自動的にUTF-8モードで起動する。

UTF-8以外のロケールを使っている場合はこのようにする: >

        set encoding=utf-8

メニューに使われるフォントを変える必要があるかもしれない。残念ながら、これはい
つもうまくいくとは限らない。システムに依存する説明は下記、または 'langmenu' を
参照。


X-WindowでUTF-8を使う (USING UTF-8 IN X-Windows)        utf-8-in-xwindows

Note: この項はGTK+ 2 GUIには当てはまらない。

使用するフォントを選択する必要がある。全角文字を表示するにはさらに別のフォント
が必要。設定するには次の三つの方法がある:

1. 'guifont' を設定して、'guifontwide' はVimに設定させる
2. 'guifont' と 'guifontwide' を設定する
3. 'guifontset' を設定する

詳細は各オプションの説明を参照。例: >

   :set guifont=-misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1

メニューで使用されるフォントも変更することができる。これはMotifでのみ機能する。
":hi Menu font={fontname}" コマンドを使って設定する。:highlight


UTF-8を入力する (TYPING UTF-8)                          utf-8-typing

X-Windowを使っているなら、UTF-8をサポートしているインプットメソッド使用する。

システムがUTF-8の入力をサポートしていない場合でも、'keymap' を使って入力するこ
とができる。ASCII文字を複数入力することでUTF-8の文字を入力するようなキーマップ
ファイルを作ることができる。mbyte-keymapを参照。

他にも、XIMを利用することができる言語に、ロケールを設定する方法がある。その場
合は、'termencoding' をその言語に設定する。Vimは入力された文字を 'termencoding'
から 'encoding' へ変換する。

すべての方法が使えなくても、4文字の16進数で文字コードを直接入力することができ
る: >

        CTRL-V u 1234

"1234" は16進数として解釈される。正しく4文字を入力しなくてはいけない。必要であ
ればゼロを前置する。

コマンド引数 (COMMAND ARGUMENTS)                        utf-8-char-arg

fFtrのようなコマンドは一つの文字を引数に取る。UTF-8では一文字か
二文字の合成文字の場合がある。Vimは合成文字の入力かどうかを調べるために次の入
力を待ったりはしないため、合成文字は基底文字と同時に入力する必要がある。そのよ
うな文字は 'keymap' や:lmapを使うと簡単に入力することができる。

行内検索をするコマンド(fなど)は合成文字を次のように処理する。非合成文字を検
索するときは、合成されている文字とされていない文字の両方がマッチする。合成文字
を検索するときは、合成文字だけがマッチする。すべての人が合成文字を入力できるわ
けではないので、このようになっている。
{訳注: 例えば、か(U+304B) + 濁点(U+3099) という合成文字は "fか" でマッチする}


==============================================================================
12. 主なオプション (Overview of options)                mbyte-options

これらのオプションはマルチバイトテキストのファイルの編集に関係する。詳細は
options.txtの説明を参照。

'encoding'      キーボード入力や表示に使われるエンコーディング。これは新規ファ
                イルのエンコーディングの初期設定でもある。

'fileencoding'  ファイルのエンコーディング。'encoding' と違う場合、ファイルの
                読み書き時にエンコーディングが変換される。

'fileencodings' ファイルに使うことができるエンコーディングのリスト。ファイルを
                開くとき、リストの先頭から順番に変換を試して、エラーが起きな
                かった最初のものが 'fileencoding' として使われる。

'charconvert'   あるエンコーディングから別のエンコーディングへファイルを変換す
                る式。

'formatoptions' このオプションにフラグ 'm' を含めると、フォーマット時に、(文字
                のコードが256以上の)マルチバイト文字のところで改行することがで
                きる。これは、どこでも改行することができる言語を編集するときに
                便利である。

'guifontset'    マルチバイトエンコーディングの文字に使うフォントのリスト。この
                オプションが設定されていれば 'guifont' の代わりに使用される。

'keymap'        キーボードマッピングの名前を指定する。

==============================================================================

マルチバイト機能は、特に以下の方々の貢献による:
        Chi-Deok Hwang <hwang@mizi.co.kr>
        SungHyun Nam <goweol@gmail.com>
        K.Nagano <nagano@atese.advantest.co.jp>
        Taro Muraoka  <koron@tka.att.ne.jp>
        Yasuhiro Matsumoto <mattn@mail.goo.ne.jp>

 vim:tw=78:ts=8:noet:ft=help:norl: