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 コメント | コメントを書く | コメントの表示
2007年10月28日日曜日
vi で複数のファイルを編集する。 - つづき

前回のエントリの続き。

複数のファイルをviで開いた場合、

:n[ENTER]

で次のファイルに移動して、
:e#[ENTER]

で一つ前のファイルに戻る…

…らしいのだが、e#で戻った場合、nで先に進めないことがあった。

例えば
> vi test01 test02[ENTER]

とした場合、最初に開いているのはtest01ファイルということになる。
そこで
:n[ENTER]

としてtest02というファイルを開く。
そこから
:e#[ENTER]

でtest01に戻るが、そこから
:n[ENTER]

を使うと、これ以上先はないとエラーになる。

そもそもこの「:n」と「:e#」はコマンドとしては別の意味を持ってるんだということに気が付いた。
移動することと、編集することはあくまでも別のことであり、「:n」で移動して「e#」で前に編集していたファイルを開いたというのであれば、現在の場所は「:n」で移動した先のファイルということか。そして「:e#」で編集中のファイルを再定義したことになるのか…

で、戻るコマンドは以下。
:rew[ENTER]


rewind ね…



0 コメント | コメントを書く | コメントの表示
2007年10月25日木曜日
vi で複数のファイルを編集する。

久しぶりに、viでファイル編集中、ふと思い出したのだが、結局使い方をちゃんと思い出せませんでした。

> vi test01.txt test02.txt

とかやって、複数のファイル(この場合2つ)を編集する場合、ひとつの画面にはひとつのファイルしか表示できないので、どうやって切り替える(移動する)かというと…
:n[ENTER]

で次に指定したファイルへ移動する。

じゃ、戻るのは?
:e#[ENTER]

って書いてあるサイトが多いんだけど、これは正確には「一つ前に編集していたファイル」ってことでは?
ここから「:n」で先に進もうとすると、エラーになってしまう。ってことは編集しているのはひとつ前のファイルだけど、今いる場所はさっき「:n」で開いたファイルだよ、と?

実際には
:rew[ENTER]

が正解みたいだね。

あとはバッファへの格納の方法だな。
UNIXコマンド本に僕が書いたメモでは
"名前yy

となっていたんだけど、これ上手く動かなかったんだよね。
viのバージョンとかに依存すんのかな?

明日、もう少し試してみよう。



0 コメント | コメントを書く | コメントの表示
2007年9月12日水曜日
恥ずかしながら、vi の置換

すーぐ忘れるんですよ、コレ。

:%s/置換前/置換後/

これだと一箇所だけで、
:%s/置換前/置換後/g

で、全体を置換するんだけど、viのバージョン?設定?によっては、前者でも全て置換されてしまうみたいね。

:n,Ns/置換前/置換後/

これでn行目からN行目までの置換を行う、と。



0 コメント | コメントを書く | コメントの表示
2007年8月30日木曜日
vi で対応する括弧にジャンプする

単純にモノ忘れの世界。

対応する括弧にジャンプするのは、

%

です。



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