2008年8月12日火曜日
viでエラーが発生して保存できない(追記あり)

えーっと、cygwinなんだけど、viで保存(:wq)時にエラーが出た。



"ファイル名" E513: write error, conversion failed (make 'fenc' empty to override)
Press ENTER or type command to continue



なんだ?

っつーか、fencってなんだよ。
:set fenc

としてみる。
fileencoding=sjis

まぁ、cygwinだからね、Shift-jisだね。

…で?

検索してみよう。

http://vim.cybermirror.org/messages/ja.po
msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
msgstr "E513: 書込みエラー, 変換失敗 (上書するには 'fenc' を空にしてください)"


あぁ、そうか。

ってことで、こうしてみる。
:set fenc=


:wq

無事終了。

再度viで開いてみる。
勿論fencを確認しても空っぽなんだけど、sjisに再設定してみると、やっぱりE513のエラーがでる。
また空にすればいいだけの話なんだけどさ。
このfenc/fileencodingって、なんのためにあるのだろう??

情報は少なそうだなぁ。
何故このファイルだけ…

ちょっと調べてみた。
エンコードを指定して開き直す方法があった。
:e ++enc=sjis

実行してみると…(sjisでなくてもshift_jisでもOKみたい)
"ファイル名" [converted][CONVERSION ERROR in line 94] 170L, 2914C


なぁにぃぃぃ!

で、94行目を見ると、"\"が"?"に置き換わっている(括弧をエスケープする目的の"\")。
ここがいけないのかと思って、"?"を"\"に置き換えるが、やはりsjisでは保存できないようだった。
(追記:当然だわな、sjisにバックスラッシュってないもんね)

エンコードを変更することで"\"が"?"に置き換えられるのと、同じ原因なのかな?
(追記:sjisでバックスラッシュを表示させようというのがそもそもの誤りに気づかない僕って…)

stupidGeek
エラーコード:E513を克服する

ここを読むと、同じくE513のエラーに苦戦した経緯と解決に至った内容が書かれている。
でも、ちょっとこのケースは違うな。



やっぱり、"\"の部分で、他の文字コードと誤認されているのかな?
(追記:だからそろそろ気づけ、俺!)

vi abc

で、テキトーに「aaaaa」と書いて保存(:w)。
正常、正常。
:set fenc

でファイルエンコードを確認する。
 fileencoding=

空っぽ。
一旦閉じて(:q)、再度開く。
vi abc

ファイルエンコードを確認する。
:set fenc

 fileencoding=sjis

よく考えたら~/.vimrcでfileencodingをsjisに設定してるわ。
で上書き保存・終了(:wq)すると、正常に終われる。
再度開いて(vi)、問題の"\"を書いて、保存(:w)すると…
"abc" E513: write error, conversion failed (make 'fenc' empty to override)
Press ENTER or type command to continue

そういうことですか。
エンコードがshift_jisの場合には"\"がエラーになるのね。
"\"を使うなら、fencは削除しないといけないか…
(追記:というかutf-8とかeucなら大丈夫なんだろうな)

根本的な解決にはなってないな。


ちなみに、これらの作業ってPoderosaから実行してたんだけど、これをDOS(インストール時に作成されるショートカット)から実行すると
"ファイル名" E513: 書込みエラー, 変換失敗 (上書するには 'fenc' を空にしてください)
続けるにはENTERを押すかコマンドを入力してください

と、日本語でエラーが表示される。


(追記 - 2010/03/02)
久しぶりにコマンドプロンプトでvimを使ったが、エラーにならなかった。
「何故だ!」と思って、TeraTermのcyglaunchとPoderosaで試したけど、問題なく…

ふと.vimrcを見てみたら、こう設定されてた。
set encoding=japan
set fileencodings=sjis,utf-8,iso-2022-jp,euc-jp
set nu
set tabstop=4

fileencodingsの設定が変わってる!?

やべ、全然記憶にないわ。
とりあえずこうやって複数指定すれば回避できるんだな。
修正したときに、ここにも追記すべきだったな。



0 コメント | コメントを書く
Template Design: © 2007 Envy Inc.