はじめに
タイトルの通りですがviとかで文字コードをどうこうするときのメモ。
開いたら文字化けってたーとか、違う文字コードで保存しなおしたい!みたいなときですね。
おしながき
1. viで開いたら文字化けしていた。文字コードを指定して表示を更新する
よくありますよね。EUC-JPとかで保存されていてviで開いたら文字化け。
文字コードを指定してファイルの表示を更新するにはコマンドモードで以下のコマンドを打ちます
やってみたカンジ
※ 開くが文字化け # vi sample.pl ---- vi コマンドモード ---- # ¤³¤ó¤Ê¥«¥ó¥¸¤Î¥³¥á¥ó¥È¤¬¤Ï¤¤¤Ã¤Æ¤ë¤Ã¥Ý¥¤¤«¤ó¤¸ for ( my $i=0; $i<10, $i++ ) { print "$i\n"; } ------------------------- ※ コマンドモードのまんま`:e ++enc=euc-jp`と打つ。 ---- 打った後 ---- # こんなカンジのコメントがはいってるっポイかんじ for ( my $i=0; $i<10, $i++ ) { print "$i\n"; } ----------------- ※ viを開いたまま表示文字コードを変更してちゃんとコメントが見えるようになりました
ただし、これは表示をEUC-JPに切り替えただけなのでそのまま保存しても保存する文字コードは変わりません。
保存時に文字コード変えるのは下で。
2. viでファイルエンコードを指定して保存しなおす
こちらもよくあります。
エディタやらで編集してるうちに違う文字コードで保存してしまったので保存し直す的な。
変更するときはコマンドモードで以下のように打ちます
:set fileencoding=文字コード
もしくは
:set fenc=文字コード
例) 保存形式をeuc-jpに変える
:set fenc=euc-jp
注意
一点注意。これは保存時のファイルエンコードを指定しただけで同時に保存はしません。
指定した後にちゃんと:wq
とかで保存しましょう
3. 今開いているファイルの文字コード、ファイルエンコードを確認する
今開いている文字コード、ファイルエンコードを確認するには
コマンドモードで下記のように打ちます
参考 : Vimで文字コードを確認・設定する方法
4. fileencoding、fileencodings、encodingの説明
パラメータ | 説明 |
---|---|
fileencoding | 保存するときの文字コード |
fileencodings | 開くときの文字コード。複数指定しておくと先頭からマッチしたもので開こうとする。なければfileencodingの値を使う。さらになければencoding。たぶん。。※1 |
encoding | 上記が設定されてないときのデフォルト文字コード |
※1
補足ですが、linuxでは複数指定できる文字コードのうち、euc-jpが最初のほうにあると文字化けするらしい
参考 : [Mac][Vim][Leopard] vim でたまに文字化け
vi上で打つのは面倒なので、デフォルトの設定をする
viコマンドモードで
とやってみましたが、毎回これやるには面倒なので設定ファイルに書いておきます。
viの設定ファイルは~/.vimrc
なので開いて後はお好きなところに。
ついでにファイルフォーマットも指定しておきます。(改行コードの判別)
※ vi追記 # vi ~/.vimrc ---- vi追記 ---- set encoding=utf-8 set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8 set fileformats=unix,dos,mac --------------- ※ 設定を反映 # source ~/.vimrc
補足
ファイルの文字コードの判定、変換、一括変換を行いたいときはこちらを参考に
→【linux】ファイルの文字コードを変換する。vi、iconv、nkf (nkfの文字コード判定とか一括変換は便利)
まとめ
viやvimで開いたファイルが文字化けっていてもその場で表示を更新したりとかできたほーが楽ですよね!