← Vim研究所

Vimで文字コードを変更して保存する(fileencoding/fenc)

2019-09-22 公開 ・ 更新: 2026-08-05

Shift-JISで書かれたファイルをUTF-8で保存し直したいだけなのに、どのオプションをいじればいいのか毎回忘れます。保存時の文字コードを決めるのはfileencoding(短縮形fenc)オプションです。

目次(5項目)
コマンドこれだけ覚える
:set fileencoding=utf-8 / :set fenc=utf-8保存時の文字コードを指定
:w指定した文字コードで実際に保存(これを忘れると反映されない)
:set fileencoding?現在の設定を確認

保存する文字コードを指定する

:set fileencoding=utf-8
:w

短縮形を使えばこう書けます。

:set fenc=utf-8
:w

よく使う指定はこのあたりになります。

文字コード指定例
UTF-8fenc=utf-8
Shift-JISfenc=shift-jis
EUC-JPfenc=euc-jp
Windows(CP932)fenc=cp932

指定しただけでは保存されない

ここが引っかかりやすい点です。:set fenc=を実行した時点では、バッファ内のエンコーディング指定が変わるだけで、ディスク上のファイルはまだ書き換わっていません。必ず続けて:wを実行して初めてファイルに反映されます。エンコーディングを変えたのに保存を忘れて閉じてしまい、変更が消えたと勘違いすることがあるので注意が必要です。

文字コードごとに保存を分けたいとき

同じディレクトリ内に複数の文字コードのファイルが混在するプロジェクトでは、ファイルタイプやディレクトリごとに保存時の文字コードを自動で切り替えたくなることがあります。autocmdと組み合わせれば、特定の拡張子やパスパターンに応じてfileencodingをあらかじめ設定しておけます。

autocmd BufReadPost *.csv setlocal fenc=cp932

毎回手動で:set fenc=を打つより、こうしたルールを決めておくほうがミスを減らせます。

fileencodingとencodingの違い

名前が似ていますが、指しているものが違います。

fileencodingencoding
対象 そのバッファを保存するときの文字コード Vim内部でテキストを処理する文字コード
変更の影響範囲 そのファイルの保存形式だけ 表示・内部処理全体
通常の運用 ファイルごとに調整する utf-8で固定しておく

encodingを変更すると表示や内部処理全体に影響するため、通常はutf-8のまま固定しておき、ファイルごとの保存形式だけをfileencodingで調整するのが安全な運用になります。現在の設定を確認する方法は別記事で扱っています。

要点:保存時の文字コードはfencで指定し、必ず:wまでセットで実行します。内部処理用のencodingとは役割が違うので混同しないよう注意してください。
使ってみて

古いシステムの設定ファイルがShift-JISで、UTF-8のまま保存して文字化けさせてしまったことがあります。それ以来、既存ファイルを編集する前に必ず現在の文字コードを確認する癖がつきました。fencで変換した直後に:wを忘れて「反映されない」と焦ったことも一度や二度ではありません。

まとめ

fileencodingfenc)は保存時の文字コードを制御するオプションで、変更後は必ず保存操作とセットで使います。読み込み時の文字コードを変えたい場合は別の方法が必要になります。

← Vim研究所 トップへ戻る