vimでファイルのエンコーディングを変更するにはどうすればよいですか?


235

私はvimを使用してファイルの行末を変更することに慣れています。

$ file file
file: ASCII text, with CRLF line terminators
$ vim file
:set ff=mac
:wq
$ file file
file: ASCII text, with CR line terminators

同様のプロセスを使用してファイルのUnicodeエンコーディングを変更することは可能ですか?私は次のことを試していますが、うまくいきません:

$ file file.xml
file.xml: Unicode text, UTF-16, little-endian
$ vim file
:set encoding=utf-8
:wq
$ file file.xml
file.xml: Unicode text, UTF-16, little-endian

「fileencoding = utf-8を設定してから、ファイルを更新して書き込むとうまくいく」と誰かが言っているのを見ました、何かが足りないようです。彼が「その後更新する」の意味を知りません。

回答:



163

違いがあることに注意してください

エンコーディングを設定する

そして

ファイルエンコーディングを設定する

最初のケースでは、ターミナルに表示される出力エンコーディングを変更します。2番目のケースでは、書き込まれるファイルの出力エンコーディングを変更します。


1
ありがとうございました!Apacheはutf-8を出力していたので、phpもそうだったので、ブラウザーはそう言ったので、vimはと言ったがset encoding、それでもページには、iso-8859-1として問題のない文字が表示されていた。を使用しset fileencodingてかなり 'Latin1' を示した
アドリアーノVaroli Piazza

77

vimを使用してそれを行うことは完全に可能ですが、なぜiconvを使用しないのですか?つまり、エンコーディング変換を行うためだけにテキストエディタをロードすると、小さすぎる爪に大きすぎるハンマーを使用しているように見えます。

ただ:

iconv -f utf-16 -t utf-8 file.xml > file.utf8.xml

これで完了です。


19
欠点として、iconvはWindowsでは簡単に利用できない場合があります。
Adriano Varoli Piazza

2
@AdrianoVaroliPiazzaどちらもvim。

1
複数の「ジャストインストール」ダウンロード、さらにはポータブル版も「簡単に入手できる」と言えます
Adriano Varoli Piazza

2
@ adriano-varoli-piazzaいいえ、@ coder-timが指摘したように、iconvはCygwinおよびMingWがインストールされたWindowsで使用できます。
t0r0X

1
@marioいいえ、VimはWindowsで非常に簡単に利用できます:vim.org/download.php#pc
t0r0X

52

手順と同様に、ファイルエンコーディングの設定は機能するはずです。ただし、編集者がファイルをUTF8と見なすのに役立つように、「set bomb」を1つ追加したいと思います。

$ vim file
:set bomb
:set fileencoding=utf-8
:wq

8
あなたの答えをありがとう、それは私にUTFバイトオーダーマークについてもっと学ぶようにさせました。ただし参考までに、BOMの設定はUTF-8の場合、16や32などの固定バイト長形式ではないため、不要/推奨できないように見えます。説明と参照については、こちらを参照してください。それはvimの問題ではなく(さらには役立ちます)、他の場所で互換性の問題が発生する可能性があることを人々が認識しているだけでよいと思っていました。
joelhardi

2
それbombbom、それともそうunsetですか?編集:はい、あなたはそれを経由して削除することができますset nobomb
icedwater 14

6
はい、VImはbomb(abを使用して)私たちをセットアップしました。
ruffin 2014年

ドキュメントごとに、次の:set bomb場合にオンになり:set fenc=utf-8ます..参照:he bomb
Evan Carroll

12
すべての私達のベースエンコーディングはUTF-8に属し今ある
roblogic

6

ファイルを読み取る前に、コマンドラインでエンコーディングを変更すると便利です。

rem On MicroSoft Windows
vim --cmd "set encoding=utf-8" file.ext
# In *nix shell
vim --cmd 'set encoding=utf-8' file.ext

参照してください開始--cmd


3
最初のバリエーションは* nixシェルでも動作するはずです。'single quotes'すべてのメタ文字をエスケープするためにのみ必要ですが、これは通常必要なことではありません。
jpaugh 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.