vim-jp / vimdoc-ja / usr_45

usr_45 - Vimドキュメント

メインヘルプファイルに戻る
usr_45.txt    For Vim バージョン 8.2.  Last change: 2020 Jun 11

                     VIM USER MANUAL - by Bram Moolenaar

                          言語を選択する (ロケール)


Vim のメッセージは言語を変更できます。本章では、言語を変更する方法を説明しま
す。様々な言語で書かれたファイルを取り扱う方法も説明します。

45.1  メッセージの言語
45.2  メニューの言語
45.3  他のエンコーディングを使う
45.4  異なるエンコーディングのファイルを編集する
45.5  言語のテキストを入力する

次章: usr_46.txt  Vim9 script でプラグインを作る
前章: usr_44.txt  構文ファイルを作成する
目次: usr_toc.txt

==============================================================================
45.1  メッセージの言語

Vim を起動すると、あなたが使っている言語を知るために環境がチェックされます。ほ
とんどの場合、この処理はうまく動作します。そして、メッセージはあなたの言語で表
示されます (それが利用可能なら)。現在の言語を確認するには、次のコマンドを使い
ます:

        :language

"C" と表示された場合は、デフォルト (英語) が使われています。

        Note:
        異なる言語を扱えるのは、Vim のコンパイル時にその機能が有効にされた場合
        だけです。機能の有無は、":version" コマンドを実行し、"+gettext" と
        "+multi_lang" の表示を確認してください。それが表示されていれば問題あり
        ません。"-gettext" か "-multi_lang" と表示された場合は他の Vim を探し
        てください。

異なる言語でメッセージを表示する方法はいくつかあります。どの方法を使うかはシス
テムによって違います。
一つ目は、Vim を起動する前に使用したい言語を環境変数に設定する方法です。Unix
の場合の例:

        env LANG=de_DE.ISO_8859-1  vim

この方法は、指定した言語がシステムでサポートされている場合のみ使えます。この方
法の利点は、GUI や何かのライブラリのメッセージも適切な言語で表示されることで
す。欠点は、Vim を起動する前に環境変数を設定しなければならないことです。Vim の
実行中に言語を変更したい場合は、二つ目の方法を使います:

        :language fr_FR.ISO_8859-1

この方法では言語の名前をいくつか試すことになるかもしれません。システムでサポー
トされていない名前を使うとエラーメッセージが表示されます。翻訳されたメッセージ
が利用可能でない場合はエラーメッセージは表示されません。Vim は静かに英語を選択
します。
利用可能な言語の一覧を調べるには、その一覧が入っているディレクトリを探してくだ
さい。私のシステムでは "/usr/share/locale" にあります。"/usr/lib/locale" に
入っているシステムもあります。"setlocale" のマニュアルページにディレクトリの場
所を示すヒントがあるかもしれません。
言語の名前は正確に入力してください。大文字と小文字の違いは重要です。"-" と "_"
は間違えやすいので注意してください。

メッセージ、編集するテキスト、時間の書式など、それぞれに別の言語を設定できま
す。:language 参照。


自分でメッセージを翻訳する
--------------------------

あなたの言語の翻訳メッセージが用意されていない場合、自分で翻訳することもできま
す。それには、Vim のソースコードと GNU gettext パッケージを入手してください。
ソースを展開すると、src/po/README.txt に説明が入っています。
翻訳作業はそれほど難しくありません。プログラマでなくても大丈夫です。しかし当然
ですが、英語と翻訳先の言語を両方知っている必要はあります。
納得のいく翻訳ができたら、それを他の人にも提供してもらえないでしょうか。
vim-online (http://vim.sf.net) にアップロードするか、Vim のメンテナー
<maintainer@vim.org> にメールを送ってください。両方でも構いません。

==============================================================================
45.2  メニューの言語

デフォルトのメニューは英語です。メニューが翻訳されていれば、あなたの国の言語で
表示することができます。メッセージと同様、環境が設定してあれば、自動的に適切な
言語が選択されます。そのために何かを設定する必要はありません。メニューが翻訳さ
れていれば動作します。
例えば、ドイツに住んでいてドイツ語を使っているにもかかわらず、"Datei" ではなく
"File" と表示したい場合、次のコマンドでメニューを英語に戻すことができます:

        :set langmenu=none

特定の言語を選択することもできます:

        :set langmenu=nl_NL.ISO_8859-1

前述したように、"-" と "_" の違いは重要です。ただし、この場合は大文字と小文字
の違いは無視されます。
'langmenu' オプションはメニューがロードされる前に設定する必要があります。メ
ニューが定義された後では、単に 'langmenu' を設定しただけでは何も変更されませ
ん。ですから、'langmenu' は vimrc ファイルの中で設定してください。
どうしても Vim の実行中にメニューの言語を変更したい場合は、次の手順を実行して
ください:

        :source $VIMRUNTIME/delmenu.vim
        :set langmenu=de_DE.ISO_8859-1
        :source $VIMRUNTIME/menu.vim

ただし、ユーザーが自分で定義したメニューは失われてしまうので、それらを再定義す
る必要があります。


自分でメニューを翻訳する
------------------------

利用可能な翻訳済みメニューは、次のディレクトリにあります:

        $VIMRUNTIME/lang

ファイルは menu_{language}.vim という名前になっています。使用したい言語がない
場合は自分で翻訳することもできます。最も簡単なのは、既存のファイルをコピーし
て、それを変更する方法です。
まず、あなたの言語の名前を ":language" コマンドで確認してください。その名前を
使います。ただし、すべてを小文字にします。そして、ファイルを自分のランタイム
ディレクトリにコピーします ('runtimepath' の早めに見つかるように)。例えば、
Unix なら次のようにします:

        :!cp $VIMRUNTIME/lang/menu_ko_kr.euckr.vim ~/.vim/lang/menu_nl_be.iso_8859-1.vim

"$VIMRUNTIME/lang/README.txt" には翻訳のヒントが書かれています。

==============================================================================
45.3  他のエンコーディングを使う

ファイルを開くとき、そのファイルはユーザーの言語のエンコーディングで保存されて
いるものと推測されます。多くのヨーロッパ系言語では "latin1" が使われます。その
場合、1 バイトで 1 文字を表すので、合計 256 個の文字を扱えます。アジア系言語の
場合はそれでは足りません。それらの言語はダブルバイトエンコーディングを使って、
1 万以上の文字を扱います。それでも、複数の言語を混在させるには十分ではありませ
ん。そういうときは Unicode の出番です。Unicode は一般的に使われている言語の文
字をすべて網羅しています。Unicode は "他のすべてのエンコーディングに取って代わ
るスーパーエンコーディング" なのです。しかしまだ広くは普及していません。
Vim はこのような三種類のエンコーディングをサポートしています。そして、多少の制
限はありますが、使用している言語とは違う言語のテキストを扱うことができます。
とはいえ、自分の言語のテキストだけを扱う場合は、Vim は何も設定しなくても適切に
動作します。以下の説明は、他の言語のテキストを編集したい場合にだけ必要です。


GUI で Unicode を使う
---------------------

Unicode には他のエンコーディングと相互に変換しても情報が欠落しないという長所が
あります。Vim の内部で Unicode を使うように設定すれば、あらゆるエンコーディン
グのファイルを編集することができます。
残念ながら、Unicode をサポートしているシステムはまだ限られています。言語のエン
コーディングが Unicode になっていることはまれです。その場合、Unicode の使用を
宣言し、非 Unicode システムと協調方法を設定する必要があります。
まずは、(Unicode文字を表示可能な) GUI 版の Vim を設定します。次のようにします:

        :set encoding=utf-8
        :set guifont=-misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1

'encoding' オプションに使用したいエンコーディングを設定します。これは、バッ
ファ (編集中のファイル) のテキスト、レジスタ、Vim script ファイル、などに使わ
れます。'encoding' は Vim の内部エンコーディングであると言えます。
この例では、設定しているフォントがシステムに存在することを前提にしています。例
で使用されているのは X Window System のフォント名です。このフォントは Unicode
をサポートした拡張 xterm で使われるパッケージに入っています。フォントがない場
合は、次の場所から入手できます:

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

MS-Windows では、Unicode 文字を部分的に持っているフォントがいくつかあります。
"Courier New" フォントを試してみてください。メニューの 編集/フォント設定 を使
うと、利用可能な一覧からフォントを選択できます。使用できるのは等幅フォントのみ
です。例:

        :set guifont=courier_new:h12

これがうまくいかない場合は、フォントパックを入手してください。Microsoft が場所
を変更していなければ、次の場所にあります:

        http://www.microsoft.com/typography/fonts/default.aspx 

さて、内部エンコーディングを Unicode にして、Unicode フォントでテキスト表示す
るように設定できました。しかし、入力される文字はまだ元の言語のエンコーディング
のままです。入力を Unicode に変換する必要があります。'termencoding' オプション
に入力のエンコーディングを設定します。次のように設定します:

        :let &termencoding = &encoding
        :set encoding=utf-8

'encoding' に utf-8 を設定する前に、元の値を 'termencoding' に代入しています。
この設定が動作するかどうか、実際にあなたの環境で試してください。特に、アジア系
言語の入力メソッドを使って Unicode のテキストを編集したい場合は、正しく動作す
る必要があります。


Unicode 端末で Unicode を使う
-----------------------------

Unicode をサポートしている端末がいくつかあります。XFree86 に付属の標準 xterm
もその一つです。ここではそれを使って説明します。
まず何よりも、xterm が Unicode サポート付きでコンパイルされている必要がありま
す。UTF8-xterm を参照し、その確認方法と、必要ならコンパイル方法も確認してく
ださい。
xterm に "-u8" 引数を付けて起動します。フォントを指定する必要もあるかもしれま
せん。例:

   xterm -u8 -fn -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1

この端末の中で Vim を実行します。前述したように 'encoding' を "utf-8" に設定し
てください。設定は以上です。


普通の端末で Unicode を使う
---------------------------

Unicode をサポートしていない端末で Unicode ファイルを取り扱うことができます。
ただし、端末でサポートされていない文字は表示されません。テキストのレイアウトは
失われません:

        :let &termencoding = &encoding
        :set encoding=utf-8

これは GUI での設定と同じです。しかし作用は違います。Vim はテキストを表示する
ときに、端末に文字を送る前に、それを変換します。それによって、端末の文字化けを
防ぐことができます。
これには、'termencoding' と 'encoding' の間での変換が可能である必要がありま
す。latin1 から Unicode への変換は Vim の内部で行われるので常に機能します。他
の変換には +iconv 機能が必要です。
実際に Unicode のテキストを編集してみてください。端末に表示できない文字は、ク
エスチョンマーク (あるいはアンダースコアや他の文字) として表示されます。クエス
チョンマークの上にカーソルを動かして次のコマンドを実行してください:

        ga

文字コード情報が表示されます。そこに実際に格納されている文字を知るヒントになり
ます。文字コードを Unicode の表から調べることもできます。時間さえあれば、実際
にこの方法でファイルを見ることも可能です。

        Note:
        'encoding' は Vim 内部のすべてのテキストで使われるので、設定を変更する
        と 非ASCII のテキストは不正になってしまいます。レジスタの中身や
        'viminfo' ファイル (例えば記録された検索パターン) などで確認できます。
        'encoding' は vimrc ファイルの中で設定し、それ以外では変更しないことが
        推奨されています。

==============================================================================
45.4  異なるエンコーディングのファイルを編集する

Unicode を使うように設定された Vim で 16-bit Unicode のファイルを開く場合、実
際には Vim の内部では utf-8 が使われているので、エンコーディングの変換が必要に
なります。文字セット (Unicode) とエンコーディング (utf-8 or 16-bit) は別ものな
のです。
ファイルを開くとき、Vim はファイルのエンコーディングを判別しようとします。それ
には 'fileencodings' オプションが使われます。Unicode を使っているときは、その
初期設定は "ucs-bom,utf-8,latin1" です。この設定を使ってファイルのエンコーディ
ングがチェックされます:

        ucs-bom         ファイルの先頭がバイトオーダーマーク (BOM) で開始する
                        場合。Unicode の 16-bit、32-bit、utf-8 エンコーディン
                        グを判別できます。
        utf-8           utf-8 Unicode。utf-8 として不正なバイトがあった場合は
                        拒否されます。
        latin1          古き良き 8-bit エンコーディング。常に有効です。

16-bit Unicode ファイルを開いたとき、BOM が付いていたなら、エンコーディングが
判別され、ファイルは utf-8 に変換されながら読み込まれます。'fileencoding' (末
尾に s なし) には判別されたエンコーディングが設定されます。この場合は
"utf-16le" になります。"utf-16le" はリトルエンディアンの 16-bit Unicode を意味
します。これは MS-Windows での一般的な形式です (例えばレジストリファイルな
ど)。
ファイルを保存するとき、'fileencoding' と 'encoding' が比較され、それが違って
いた場合は、テキストが変換されます。
'fileencoding' の値が空の場合は変換は実行されません。つまり、テキストは
'encoding' でエンコードするものと判断されます。

'fileencodings' の初期設定が良くない場合は、チェックさせたいエンコーディングを
自分で設定してください。設定の最初から順番に変換が試行されます。"latin1" を先
頭に置くとうまく動作しません。それは "latin1" の変換が失敗することがないからで
す。例えば次の設定では、BOM がなく、utf-8 でもない場合に、Shift_JIS が使われま
す:

        :set fileencodings=ucs-bom,utf-8,sjis

エンコーディングの名前は encoding-values を参照してください。それ以外の名前
も使えます。使用できる名前は変換ライブラリに依存します。


エンコーディングを強制する
--------------------------

自動判別が機能しない場合は、エンコーディングを指定する必要があります。例:

        :edit ++enc=koi8-r russian.txt

"++enc" を使ってファイルのエンコーディングを指定します。ファイルは指定されたエ
ンコーディング (例ではロシア語) から 'encoding' に変換されます。'fileencoding'
は指定されたエンコーディングに設定されるので、保存するときには逆の変換が実行さ
れます。
ファイルを保存するときにも同じ引数が使えます。すなわち Vim をコード変換ツール
として使うこともできます。例:

        :write ++enc=utf-8 russian.txt

        Note:
        変換によって一部の文字が失われることがあります。任意のエンコーディング
        から Unicode に変換し、それを元に戻す場合は、不正な文字が入っていない
        限り、そのような問題はほとんどありません。多言語で書かれたファイルを
        Unicode から他のエンコーディングに変換すると、情報が失われます。

==============================================================================
45.5  言語のテキストを入力する

コンピューターのキーボードには 100 個ほどのキーしかありません。しかし、数千の
文字を持つ言語があり、Unicode には 10 万以上の文字があります。どのようにしてそ
れらの文字を入力するのでしょうか?
それほど多くの文字を必要としない場合はダイグラフが使えます。ダイグラフについて
は 24.9 で説明しました。
キーボードのキー数よりはるかに多い文字を扱う場合はインプットメソッド (Input
Method, IM) を使います。インプットメソッドを使うには、目的の文字を入力するため
のキー操作を学ぶ必要があります。あなたがインプットメソッドを必要とするなら、そ
れはおそらくは最初からシステムに用意されています。Vim でも他のプログラムと同様
にインプットメソッドを使うことができます。詳細は、X Window system なら
mbyte-XIM を、MS-Windows なら mbyte-IME を参照してください。


キーマップ
----------

いくつかの言語は latin とは文字セットが異なるだけで、文字の数は同じような場合
があります。その場合はキーを文字にマップすることができます。それにはキーマップ
を使います。
例えば、ヘブライ語を使いたい場合は、次のようにしてキーマップをロードします:

        :set keymap=hebrew

キーマップファイルが検索されます。これは 'encoding' の設定に依存します。ファイ
ルが見つからなかった場合はエラーメッセージが表示されます。

さて、挿入モードでヘブライ語を入力できるようになりました。ただし、ノーマルモー
ドのときや、":" コマンドを入力するときは、自動的に英語に切り替わります。次のコ
マンドでヘブライ語と英語を切り替えることができます:

        CTRL-^

これは挿入モードとコマンドラインモードでのみ機能します。ノーマルモードではまっ
たく別の機能です (オルタネートファイルにジャンプ)。
キーマップの使用状態はモードメッセージに表示されます ('showmode' が設定されて
いるなら)。GUI ではカーソルの色が変わります。
キーマップの使用状態は 'iminsert' と 'imsearch' を設定することでも変更できま
す。

次のコマンドでマップの一覧を表示できます:

        :lmap

利用可能なキーマップファイルの一覧は、GUI ならメニューの 編集/キーマップ で確
認できます。あるいは次のコマンドで一覧を表示できます:

        :echo globpath(&rtp, "keymap/*.vim")


自分でキーマップを作成する
--------------------------

自分でキーマップファイルを作成することができます。作成はそれほど難しくありませ
ん。目的の言語に近い既存のキーマップファイルを土台にしてください。そのファイル
を自分の "keymap" ディレクトリにコピーします。例えば、Unix なら "~/.vim/keymap"
などを使います。
キーマップファイルの名前は次のような形式にします:

        keymap/{name}.vim
もしくは
        keymap/{name}_{encoding}.vim

{name} はキーマップの名前です。分かりやすい名前を付けます。既存のキーマップと
は違う名前にしてください (既存のキーマップファイルを置き換えるとき以外は)。
{name} にはアンダースコアを含めることはできません。アンダースコアに続けてエン
コーディングを指定することができます。例:

        keymap/hebrew.vim
        keymap/hebrew_utf-8.vim

ファイルの内容については実物を見れば分かると思います。Vim に付属のキーマップを
見てください。詳細は mbyte-keymap を参照。


最後の手段
----------

すべての方法がダメだったとしても、CTRL-V を使えばあらゆる文字を入力できます:

        エンコード 入力方法             入力できる範囲
        8-bit      CTRL-V 123           10進数の 0-255
        8-bit      CTRL-V x a1          16進数の 00-ff
        16-bit     CTRL-V u 013b        16進数の 0000-ffff
        31-bit     CTRL-V U 001303a4    16進数の 00000000-7fffffff

入力するときはスペースは不要です。詳細は i_CTRL-V_digit を参照。

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

次章: usr_46.txt  Vim9 script でプラグインを作る

Copyright: see manual-copyright  vim:tw=78:ts=8:noet:ft=help:norl:
関連キーワード:  usr, 言語, 設定, Vim, 文字, 表示, 変換, encoding, テキスト, 方法