Vimの符号化とフォントの問題の詳細

8489 ワード

Linuxシステム攻略Vimのコードとフォントの問題の詳細


 
すべてのポピュラーテキストエディタと同様に、VimはUCS-2、UTF-8などのポピュラーなUnicode符号化方式を含む様々な文字符号化ファイルをよく編集することができます.しかし残念なことに、Linuxの世界から多くのソフトウェアと同じように、自分で設定する必要があります.Vimには、文字符号化方式に関する4つのオプションがあります.encoding、filencoding、filencoding、termencoding(これらのオプションの可能な値は、Vimオンラインヘルプ:help encoding-namesを参照してください).これらの意味は、*encoding:Vim内部で使用される文字符号化方式であり、Vimのbuffer(バッファ)、メニューテキスト、メッセージテキストなどが含まれます.デフォルトはあなたのlocaleによって選択されます.ユーザーマニュアルでは推奨は.vimrcでその値を変えるのは、実際にはそうではないようだ.vimrcでその値を変えることこそ意味がある.あなたのvimのencodingがutf-8であるように、編集されたファイルはcp 936符号化を採用し、vimは自動的に読み込んだファイルをutf-8(vimの読み取り可能な方法)に変換し、ファイルに書き込むと自動的にcp 936(ファイルの保存符号化)に戻ることができます.*filencoding:Vimで現在編集されているファイルの文字符号化方式で、Vimがファイルを保存する際にもこのような文字符号化方式としてファイルが保存されます(新しいファイルの有無にかかわらず).*fileencodings:Vimは自動的にfileencodingの順序リストを検出し、起動時にリストされた文字符号化方式に従って開くファイルの文字符号化方式を逐一検出し、fileencodingを最終的に検出される文字符号化方式に設定する.そのためUnicode符号化方式をこのリストの一番前に、ラテン語系符号化方式latin 1を一番後ろに置くことが望ましい.*termencoding:Vimが動作する端末(またはWindowsのConsoleウィンドウ)の文字符号化方式.vimが存在するtermがvim符号化と同じである場合、設定する必要はありません.そうでなければvimのtermencodingオプションでtermの符号化に自動的に変換できます.このオプションはWindowsでよく使用されるGUIモードのgVimには無効ですが、ConsoleモードのVimにとってWindowsコンソールのコードページであり、通常は変更する必要はありません.では、初心者を混乱させやすいパラメータの山を説明しました.Vimのマルチ文字符号化方式のサポートがどのように機能しているかを見てみましょう.    1. Vim起動、根拠.vimrcで設定したencodingの値はbuffer、メニューテキスト、メッセージ文の文字符号化方式を設定します.    2. 編集するファイルを読み込み、filencodingsにリストされている文字符号化方式に基づいてファイル符号化方式を逐一検出します.filencodingを検出するように設定し、正しい(注1)文字符号化方式に見えます.    3. filencodingとencodingの値を比較し、異なる場合はiconvを呼び出してファイル内容をencodingで記述された文字符号化方式に変換し、変換された内容をこのファイルのために開いたbufferに入れると、このファイルの編集を開始できます.このステップを完了するには、外部のiconvを呼び出す必要がある.dll(注2)、このファイルが$VIMRUNTIMEまたはPATH環境変数にリストされている他のディレクトリに存在することを保証する必要があります.    4. 編集が完了してファイルを保存すると、filencodingとencodingの値を再度比較します.異なる場合は、iconvを再度呼び出して、保存するbufferのテキストをfilencodingで説明した文字符号化方式に変換し、指定したファイルに保存します.同様にiconvを呼び出す必要があります.dll Unicodeはほとんどの言語の文字を含むことができ、UnicodeのUTF-8符号化方式は非常に性価比のある符号化方式(UCS-2よりも空間消費が小さい)であるため、encodingの値はutf-8に設定することを推奨する.もう一つの理由は、encodingがutf-8に設定されている場合、Vim自動検出ファイルの符号化方式がより正確になるからです(この理由が主なのかもしれません).私たちが中国語Windowsで編集したファイルは、他のソフトウェアとの互換性を両立させるために、ファイルコードはGB 2312/GBKに設定するのが適切なので、filencodingはchinese(chineseは別名で、Unixではgb 2312、Windowsではcp 936、つまりGBKのコードページ)に設定することをお勧めします.以下は私のです.vimrc(添付ファイル参照)では文字符号化方式の設定内容について、この設定は比較的弾力性があり、システム内の環境変数$LANG(もちろん、Windowsでは%LANG%)の値に応じて適切な文字符号化方式を自動的に設定することができます.この場合、推奨設定%LANG%=zh_CN.UTF-8は、後のWindowsレジストリスクリプトファイルで簡単に行えます.注1:実際、Vimの検出精度は高くありません.特にencodingがutf-8に設定されていない場合です.そこでencodingをutf-8に設定することを強くお勧めします.Vimに中国語のメニューとヒントメッセージを表示したい場合は、もう一つの小さな問題がありますが.注2:GNUのFTPでiconvのWin 32版(http://mirrors.kernel.org/gnu/libiconv/libiconv-1.9.1.bin.woe32.zip)、GnuWin 32(http://gnuwin32.sourceforge.net/)libiconvをダウンロードします.そのバージョンは古いので、dllファイルを自分で名前を変更する必要があります.注意3:ヘルプの表示:h iconv-dynamic On MS-Windows Vim can be compiled with the|+iconv/dyn|feature.This means Vim will search for the "iconv.dll"and "libiconv.dll"libraries. When neither of them can be found Vim will still work but some conversions won't be possible. 添付1:vimrcファイル
" Multi-encoding setting, MUST BE IN THE BEGINNING OF .vimrc!
    "
    if has("multi_byte")
      " When 'fileencodings' starts with 'ucs-bom', don't do this manually
      "set bomb
      set fileencodings=ucs-bom,chinese,taiwan,japan,korea,utf-8,latin1
      " CJK environment detection and corresponding setting
      if v:lang =~ "^zh_CN"
        " Simplified Chinese, on Unix euc-cn, on MS-Windows cp936
        set encoding=chinese
        set termencoding=chinese
        if &fileencoding == ''
          set fileencoding=chinese
        endif
      elseif v:lang =~ "^zh_TW"
        " Traditional Chinese, on Unix euc-tw, on MS-Windows cp950
        set encoding=taiwan
        set termencoding=taiwan
        if &fileencoding == ''
          set fileencoding=taiwan
        endif
      elseif v:lang =~ "^ja_JP"
        " Japanese, on Unix euc-jp, on MS-Windows cp932
        set encoding=japan
        set termencoding=japan
        if &fileencoding == ''
          set fileencoding=japan
        endif
      elseif v:lang =~ "^ko"
        " Korean on Unix euc-kr, on MS-Windows cp949
        set encoding=korea
        set termencoding=korea
        if &fileencoding == ''
          set fileencoding=korea
        endif
      endif
       " Detect UTF-8 locale, and override CJK setting if needed
      if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
        set encoding=utf-8
      endif
    else
      echoerr 'Sorry, this version of (g)Vim was not compiled with "multi_byte"'
    endif

添付2:
Supported 'encoding' values are:                        *encoding-values*
1   latin1      8-bit characters (ISO 8859-1)
1   iso-8859-n  ISO_8859 variant (n = 2 to 15)
1   koi8-r      Russian
1   koi8-u      Ukrainian
1   macroman    MacRoman (Macintosh encoding)
1   8bit-{name} any 8-bit encoding (Vim specific name)
1   cp437       similar to iso-8859-1
1   cp737       similar to iso-8859-7
1   cp775       Baltic
1   cp850       similar to iso-8859-4
1   cp852       similar to iso-8859-1
1   cp855       similar to iso-8859-2
1   cp857       similar to iso-8859-5
1   cp860       similar to iso-8859-9
1   cp861       similar to iso-8859-1
1   cp862       similar to iso-8859-1
1   cp863       similar to iso-8859-8
1   cp865       similar to iso-8859-1
1   cp866       similar to iso-8859-5
1   cp869       similar to iso-8859-7
1   cp874       Thai
1   cp1250      Czech, Polish, etc.
1   cp1251      Cyrillic
1   cp1253      Greek
1   cp1254      Turkish
1   cp1255      Hebrew
1   cp1256      Arabic
1   cp1257      Baltic
1   cp1258      Vietnamese
1   cp{number}  MS-Windows: any installed single-byte codepage
2   cp932       Japanese (Windows only)
2   euc-jp      Japanese (Unix only)
2   sjis        Japanese (Unix only)
2   cp949       Korean (Unix and Windows)
2   euc-kr      Korean (Unix only)
2   cp936       simplified Chinese (Windows only)
2   euc-cn      simplified Chinese (Unix only)
2   cp950       traditional Chinese (on Unix alias for big5)
2   big5        traditional Chinese (on Windows alias for cp950)
2   euc-tw      traditional Chinese (Unix only)
2   2byte-{name} Unix: any double-byte encoding (Vim specific name)
2   cp{number}  MS-Windows: any installed double-byte codepage
u   utf-8       32 bit UTF-8 encoded Unicode (ISO/IEC 10646-1)
u   ucs-2       16 bit UCS-2 encoded Unicode (ISO/IEC 10646-1)
u   ucs-2le     like ucs-2, little endian
u   utf-16      ucs-2 extended with double-words for more characters
u   utf-16le    like utf-16, little endian
u   ucs-4       32 bit UCS-4 encoded Unicode (ISO/IEC 10646-1)
u   ucs-4le     like ucs-4, little endian

  The {name} can be any encoding name that your system supports.  It is passed
to iconv() to convert between the encoding of the file and the current locale.
For MS-Windows "cp{number}" means using codepage {number}.

  Several aliases can be used, they are translated to one of the names above.
An incomplete list:

1   ansi        same as latin1 (obsolete, for backward compatibility)
2   japan       Japanese: on Unix "euc-jp", on MS-Windows cp932
2   korea       Korean: on Unix "euc-kr", on MS-Windows cp949
2   prc         simplified Chinese: on Unix "euc-cn", on MS-Windows cp936
2   chinese     same as "prc"
2   taiwan      traditional Chinese: on Unix "euc-tw", on MS-Windows cp950
u   utf8        same as utf-8
u   unicode     same as ucs-2
u   ucs2be      same as ucs-2 (big endian)
u   ucs-2be     same as ucs-2 (big endian)
u   ucs-4be     same as ucs-4 (big endian)
    default     stands for the default value of 'encoding', depends on the
                environment