毎日1 Vim(20)Vim符号化設定

2668 ワード

毎日1 Vim(20)Vim符号化設定


Vimのエンコーディングオプション


vim符号化は4つの概念に関し、それぞれenc,fenc,fencs,tencであり、一般的に乱符号化はこれらのパラメータの設定が正しくないことによるものが多いが、vimの乱符号化問題から徹底的に抜け出すには、この4つの概念を明らかにするか、以下に詳しく紹介する.
enc(encoding) encのフルネームはencodingで、buffer、レジスタの文字列などのVim内部で使用される符号化です.Vimがテキストを開くと、その符号化方式が内部符号化と一致しない場合、Vimはまず符号化を内部符号化に変換し、使用する符号化に内部符号化に変換できない文字が含まれている場合、これらの文字は失われます.デフォルト値はシステムのlocaleで決定されます.例えば、windowsではgbkまたはgb 2312が一般的ですが、linuxではutf-8が一般的です.コマンド:set encで現在のvimのencがどのような値であるかを表示することができ、筆者のwindowsはcp936を表示している.ここでcp 936はgb 2312に相当し、システムの936番目の符号化フォーマットを指す.
fenc(fileencoding)
fencは現在のバッファ(現在のVimがこのファイルを開く)ファイル自体の符号化であり、ディスクからファイルを読むとVimはファイルの符号化をチェックし、ファイルの符号化がVim内部符号化(enc)と異なる場合、Vimはテキストを符号化変換し、fencをファイルの符号化に設定する.Vimがファイルをディスクに書き込む場合、encがfencと異なる場合、Vimは符号化変換を行い、符号化fencに変換してファイルを保存します.Windowsではnotepad++などのエディタを借りてファイルがどのように符号化されているかをチェックすることができます.fencはファイルを開くときにVimによって自動的に検出されるので、文章に文字化けしがあってもfencを再設定して訂正することはできず、fencを設定するとテキストの符号化フォーマットしか変更できません.
fencs(fileencodings)
これは文字符号化のリストであり,符号化の自動認識はfencsを設定することによって実現される.ファイルを開くと、Vimはfencsで符号化された順序で復号動作を行い、マッチングが成功すればその符号化で復号し、この符号化をfencの値に設定する.ここでのマッチング成功とは、Vimが正しく復号でき、エラーは発生しないが、乱符号化が保証されていないため、fencs符号化リストの順序設定が重要である.lanin 1はiso 8859-1であり、国際化された標準符号化に属しているため、彼は任意の文字を表すことができ、エラーも発生しないが、私たちが見ているのは「乱符号」であることができる.だから一般的なfencs設定の順序はこのようにします:lan 1は最も後ろに置きます
 set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

tenc(termencoding)
端末はテキスト符号化、あるいはVimは画面表示時の符号化に用いられ、表示時にVimは内部符号化を画面符号化に変換して出力します.つまり、画面から見た文字はtenc符号化の文字で、空であればデフォルトではencです.WindowsプラットフォームGvimはtencを無視します.一般的には、1つの端末からlinuxシステムにリモートログインするとtencが機能します.

ふごうもんだい


文字化けしの問題に遭遇したら、enc、fencをutf-8に統一すれば問題は解決します.次の構成は、私のVimrcファイルの乱符号化構成の解決に関するコードセグメントです.
"  vim 
set encoding=utf-8

"  windows encoding utf-8, 
set langmenu=zh_CN.UTF-8
language message zh_CN.UTF-8
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim

" 
set fileencoding=utf-8 
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

参照:http://edyfox.codecarver.org/html/vim_fileencodings_detection.html
転載は出典を明記してください.ご協力ありがとうございます.作者---zhijun