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
" 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
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