4

WinXP で Vim 7.3 を使用しています。私は、UCS-2le エンコーディングでファイルを書き込むアプリケーションによって生成された XML ファイルを使用しています。vim wiki でエンコーディングに関するいくつかの記事を読んだ後、次のアドバイスが与えられているのを見つけました。つまり、vimrc でファイル エンコーディングを設定することです。

set fileencodings=ucs-bom,utf-8

問題のファイルは先頭文字が FF EE となっているのですが(HxDで表示確認済み)、Vimでうまく開けません。vimrc でこれを使用して、UCS-2le ファイルを適切に開くことができます。

set fileencodings=ucs-2le, utf-8

しかし今、私の UTF-8 ファイルはめちゃくちゃです!

続行する方法についてアドバイスはありますか?私は通常、MSwin を動作させずに Gvim を実行します (それが重要な場合)。使用するプラグインはほとんどありません。ファイルエンコーディングに関する私の実際のvimrc設定は次のとおりです。

set encoding=utf-8
set fileencodings=ucs-bom,utf-8,ucs-2le,latin1

3 番目の場所の ucs-2le のエントリは、違いがないようです。私が理解しているように、最初のエントリ (set encoding) は Vim がバッファ内で内部的に使用するエンコーディングであり、2 番目 (set fileencodings) は vim がファイルを読み書きするときのファイルのエンコーディングを扱います。したがって、ファイルにはバイトオーダーマークがあるため、 setfileencodings の最初のエントリとして ucs-bom がそれをキャッチする必要があるように思えます。私が知る限り、vim はこのファイルが 1 文字あたり 16 バイトであることを認識していないようです。

注:ucs-2leファイルを開くときにファイルエンコーディングを手動で設定することで、問題を解決できます/解決できます:

edit ++enc=ucs2-le

乾杯。

4

1 に答える 1

1

解決しました。何をしたかはわかりませんが、記載されている修正は、UCS-2 ファイルの読み取りと書き込みに完全に機能するようになりました。理由は不明ですが (Vim を再起動しましたか?) 修正を元に戻して、どれが重要な変更であったかを確認することもできますが、これが私が行ったことです (上記の 7 月 27 日の私のコメントも参照してください)。

  • AutoFenc.vim プラグインをプラグイン フォルダーに配置します (ファイル エンコーディング ( AutoFenc.vim ) を自動的に検出します)。
  • vim73 フォルダ ( Vim.org )に iconv.dll と新しいバージョンの libintl.dll を追加しました。
  • 以下のようにvimrcを編集

vimrc には以下が含まれるようになりました (最後のビットは、ステータス行にファイルのエンコーディングを表示することで、ファイルのエンコーディングで何が起こっているかを簡単に確認できるようにするためです):

"use utf-8 by default
set encoding=utf-8
set fileencodings=ucs-bom,utf-8,ucs-2le,latin1

"always show status line
set laststatus=2

"show encoding in status line http://vim.wikia.com/wiki/Show_fileencoding_and_bomb_in_the_status_line
if has("statusline")
 set statusline=%<%f\ %h%m%r%=%{\"[\".(&fenc==\"\"?&enc:&fenc).((exists(\"+bomb\")\ &&\ &bomb)?\",B\":\"\").\"]\ \"}%k\ %-14.(%l,%c%V%)\ %P
endif

そして、すべて順調です。

于 2012-08-16T16:01:57.710 に答える