読者です 読者をやめる 読者になる 読者になる

tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【linux】viでの文字コードの扱い。文字コード変更したりファイルエンコードを指定して保存したり(fileencoding, fileencodings, encoding)

はじめに

タイトルの通りですがviとかで文字コードをどうこうするときのメモ。
開いたら文字化けってたーとか、違う文字コードで保存しなおしたい!みたいなときですね。

おしながき

  1. viで開いたら文字化けしていた。文字コードを指定して表示を更新する
  2. viでファイルエンコードを指定して保存しなおす
  3. 今開いているファイルの文字コード、ファイルエンコードを確認する
  4. fileencoding、fileencodings、encodingの説明
  5. vi上で打つのは面倒なので、デフォルトの設定をする

1. viで開いたら文字化けしていた。文字コードを指定して表示を更新する

よくありますよね。EUC-JPとかで保存されていてviで開いたら文字化け。
文字コードを指定してファイルの表示を更新するにはコマンドモードで以下のコマンドを打ちます

:e ++enc=文字コード
 
例) 表示をeuc-jpに変えて更新
:e ++enc=euc-jp

やってみたカンジ
※ 開くが文字化け
# 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. 今開いているファイルの文字コード、ファイルエンコードを確認する

今開いている文字コード、ファイルエンコードを確認するには
コマンドモードで下記のように打ちます

文字コードを確認
:set enc?
 
ファイルエンコードを確認
:set fenc?

参考 : 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で開いたファイルが文字化けっていてもその場で表示を更新したりとかできたほーが楽ですよね!