つまり化けたファイルだと、どのfileencodingsにもマッチせずencodingで指定されたエンコーディングでファイルが開かれステータス行に「変換失敗」と表示される事になります。
しかしながらそのファイルのエンコーディングが分かっている場合もあります。vimでは
++encオプションを指定する事で指定のfileencodingでファイルを開く事が出来ます。:e ++enc=utf-8 foo.txtこの場合、vimはiconvで変換出来なかった文字を
?という文字で置き換えてしまいます。# echo あいうえお | iconv -f char -t utf-8 > utf8.txtcp932の場合は文字集合の区画が広い為、vimではutf-8が構成するバイト列をcp932の範囲内として開いてしまいます。
# echo あいうえお | iconv -f char -t cp932 > sjis.txt
# cat utf8.txt sjis.txt > bad.txt
# vim
:e ++enc=cp932 bad.txtまたutf-8の場合はcp932の区画は範囲外になります。つまり
縺ゅ>縺?縺医♀
あいうえお
:e ++enc=utf-8 bad.txtこの様に
あいうえお
??????????
?に変換されてしまう事になります。ステータス行には何行目で変換が失敗したかを警告するメッセージも表示されますが、元のテキストは失われます。こういったファイルを開くのにフィルタを使用する人もいるかもしれません。
:%!nkf -Wsこれでも良いのですが、nkfが変換出来ない文字は削られてしまいます。
実はvimの:eコマンドには
++badオプションという物があり、この?の挙動を変更出来る様になっています。*++bad*例えば++badオプションに
The argument of "++bad=" specifies what happens with characters that can't be
converted and illegal bytes. It can be one of three things:
++bad=X A single-byte character that replaces each bad character.
++bad=keep Keep bad characters without conversion. Note that this may
result in illegal bytes in your text!
++bad=drop Remove the bad characters.
The default is like "++bad=?": Replace each bad character with a question
mark.
%を指定すると
:e ++enc=utf-8 bad.txtとなるのです。現在の所1文字の場合はその文字で置き換える様になっています。また++badオプションに
あいうえお
%%%%%%%%%%
keepを指定すると、何も変換せずに開いてくれます。:e ++enc=utf-8 ++bad=keep bad.txtさらに
あいうえお
<82><a0><82><a2><82><a4><82><a8><82><a6>
dropを指定する事で不正な文字を削除してファイルを開く事も出来ます。あいうえおvimでファイルが開けなくなってしまった方、一度++badオプションを試してみては如何でしょうか?



![Validate my RSS feed [Valid RSS]](http://mattn.kaoriya.net/images/valid-rss.png)

