UTF-8環境のvimで、非UTF-8エンコーディングのファイルを扱う方法
vimをUTF-8環境で動かしていれば、内部ではありとあらゆる文字をテキストデーターとして扱えます。ただ、テキストデーターは必ずしもUTF-8では保存されていません。そこで非UTF-8エンコーディングのファイルを扱う際には、iconvでファイルのエンコーディングを往復で変換してやる必要があります。変換できるエンコーディングの選択肢はiconv -lコマンドをすると一覧できます。(エンコーディング名の処理は大文字・小文字区別ありませんが、ハイホン、アンダースコアは区別されます。)ただ、一々マニュアルで往復変換するのは面倒ですので、vimから簡単にエンコード変換にアクセスする方法を以下に記します。
ちなみにUTF-8環境下での標準的なvimはfileencodings=ucs-bom,utf-8,default,latin1という設定なので、読み込み時にはこの順にエラーなく読めるかが試されます。最後は自動的にlatin1として読み込まれますが、エンコーディングが違うと当然文字化けします。その際には再読み込みをすることで正しく読めます。
コマンドラインから非UTF-8エンコーディングのファイルを扱う方法
- latain1 == isoO8859-1 は自動的に処理できる。 西欧(英仏独伊西葡蘭)
その他はvim "+e ++enc=... filename" 等で編集開始。
vim "+e ++enc=cp932 filename" 日本(Windows3.1J、SHIFT_JIS)
vim "+e ++enc=eucjp filename" 日本(Unix)
vim "+e ++enc=iso-2002-jp filename" 日本(電子メール)
vim "+e ++enc=latin2 filename" ポーランド語 (latin2 == iso08859-2)
vim "+e ++enc=koi8-r filename" ロシア語
vim "+e ++enc=big5 filename" 中国語(zh_TW, 繁体用)
vim "+e ++enc=gb2312 filename" 中国語(zh_CN, 簡体用)
vim "+e ++enc=euckr filename" 韓国語(Unix)
読み込んだファイルが文字化けした場合には、[Esc]を押して:e ++enc=newencoding で再読み込み。
元のエンコーディングで書き込む際に、通常どおり[Esc]を押して:w とすれば元のファイル名で保存。
UTF-8エンコーディングにして書き込む際には、[Esc]を押して:w ++enc=utf-8 newfilename.txt とすれば新ファイル名で保存。
GUIメニューを介して非UTF-8エンコーディングのファイルを扱う方法
gvimへメニューを追加し、て非UTF-8エンコーディングに対応するには、以下に示すようなスクリプトを ~/.vimrcに追加します。各自必要なエンコーディングにあわせて適当にこれはカスタマイズしてください。
ここで、再読み込みではReload with ++enc...、エンコード変換しての保存はSave with ++enc...をファイルメニューから選択してください。
" " Menu: Access to old encodings and conversion " Translated By: Osamu AOKI <osamu@debian.org> " Last Change: 30-Dec-2006. if has('iconv') " Check iconv version let support_jisx0213 = (iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb") ? 1 : 0 " an 10.328.100.100 &File.&Reload\ with\ ++enc\.\.\..&SJIS<Tab>fenc=cp932 :e ++enc=cp932<CR> if !support_jisx0213 an 10.328.100.110 &File.&Reload\ with\ ++enc\.\.\..EUC&JP<Tab>fenc=euc-jp :e ++enc=euc-jp<CR> an 10.328.100.120 &File.&Reload\ with\ ++enc\.\.\..J&IS<Tab>fenc=iso-2022-jp :e ++enc=iso-2022-jp<CR> else an 10.328.100.110 &File.&Reload\ with\ ++enc\.\.\..EUC&JP<Tab>fenc=euc-jisx0213 :e ++enc=euc-jisx0213<CR> an 10.328.100.120 &File.&Reload\ with\ ++enc\.\.\..J&IS<Tab>fenc=iso-2022-jp-3 :e ++enc=iso-2022-jp-3<CR> endif an 10.328.100.130 &File.&Reload\ with\ ++enc\.\.\..EUC&KR<Tab>fenc=euckr :e ++enc=euckr<CR> an 10.328.100.140 &File.&Reload\ with\ ++enc\.\.\..&GB2312(zh_CN)<Tab>fenc=gb2312 :e ++enc=gb<CR> an 10.328.100.150 &File.&Reload\ with\ ++enc\.\.\..&BIG5(zh_TW)<Tab>fenc=big5 :e ++enc=big5<CR> an 10.328.100.200 &File.&Reload\ with\ ++enc\.\.\..-SEPRELOAD1- <Nop> an 10.328.100.201 &File.&Reload\ with\ ++enc\.\.\..latin&1<Tab>fenc=latin1 :e ++enc=latin1<CR> an 10.328.100.202 &File.&Reload\ with\ ++enc\.\.\..latin&2<Tab>fenc=latin2 :e ++enc=latin2<CR> an 10.328.100.203 &File.&Reload\ with\ ++enc\.\.\..latin&3<Tab>fenc=latin3 :e ++enc=latin3<CR> an 10.328.100.204 &File.&Reload\ with\ ++enc\.\.\..latin&4<Tab>fenc=latin4 :e ++enc=latin4<CR> an 10.328.100.205 &File.&Reload\ with\ ++enc\.\.\..latin&5<Tab>fenc=latin5 :e ++enc=latin5<CR> an 10.328.100.206 &File.&Reload\ with\ ++enc\.\.\..latin&6<Tab>fenc=latin6 :e ++enc=latin6<CR> an 10.328.100.207 &File.&Reload\ with\ ++enc\.\.\..latin&7<Tab>fenc=latin7 :e ++enc=latin7<CR> an 10.328.100.208 &File.&Reload\ with\ ++enc\.\.\..latin&8<Tab>fenc=latin8 :e ++enc=latin8<CR> an 10.328.100.209 &File.&Reload\ with\ ++enc\.\.\..latin&9<Tab>fenc=latin9 :e ++enc=latin9<CR> an 10.328.100.210 &File.&Reload\ with\ ++enc\.\.\..latin1&0<Tab>fenc=latin10 :e ++enc=latin10<CR> an 10.328.100.800 &File.&Reload\ with\ ++enc\.\.\..-SEPRELOAD2- <Nop> an 10.328.100.900 &File.&Reload\ with\ ++enc\.\.\..&UTF-8<Tab>fenc=utf-8 :e ++enc=utf-8<CR> " Save with ++enc as ... an 10.360.120.100 &File.&Save\ with\ ++enc\.\.\..&SJIS<Tab>fenc=cp932 :browse confirm saveas ++enc=cp932<CR> if !support_jisx0213 an 10.360.120.110 &File.&Save\ with\ ++enc\.\.\..EUC&JP<Tab>fenc=euc-jp :browse confirm saveas ++enc=euc-jp<CR> an 10.360.120.120 &File.&Save\ with\ ++enc\.\.\..J&IS<Tab>fenc=iso-2022-jp :browse confirm saveas ++enc=iso-2022-jp<CR> else an 10.360.120.110 &File.&Save\ with\ ++enc\.\.\..EUC&JP<Tab>fenc=euc-jisx0213 :browse confirm saveas ++enc=euc-jisx0213<CR> an 10.360.120.120 &File.&Save\ with\ ++enc\.\.\..J&IS<Tab>fenc=iso-2022-jp-3 :browse confirm saveas ++enc=iso-2022-jp-3<CR> endif an 10.360.120.130 &File.&Save\ with\ ++enc\.\.\..EUC&KR<Tab>fenc=euckr :browse confirm saveas ++enc=euck<CR> an 10.360.120.140 &File.&Save\ with\ ++enc\.\.\..&GB(zh_CN)<Tab>fenc=gb :browse confirm saveas ++enc=gb<CR> an 10.360.120.150 &File.&Save\ with\ ++enc\.\.\..&BIG5(zh_TW)<Tab>fenc=big5 :browse confirm saveas ++enc=big5<CR> an 10.360.120.200 &File.&Save\ with\ ++enc\.\.\..-SEPSAVE1- <Nop> an 10.360.120.201 &File.&Save\ with\ ++enc\.\.\..latin&1<Tab>fenc=latin1 :browse confirm saveas ++enc=latin1<CR> an 10.360.120.202 &File.&Save\ with\ ++enc\.\.\..latin&2<Tab>fenc=latin2 :browse confirm saveas ++enc=latin2<CR> an 10.360.120.203 &File.&Save\ with\ ++enc\.\.\..latin&3<Tab>fenc=latin3 :browse confirm saveas ++enc=latin3<CR> an 10.360.120.204 &File.&Save\ with\ ++enc\.\.\..latin&4<Tab>fenc=latin4 :browse confirm saveas ++enc=latin4<CR> an 10.360.120.205 &File.&Save\ with\ ++enc\.\.\..latin&5<Tab>fenc=latin5 :browse confirm saveas ++enc=latin5<CR> an 10.360.120.206 &File.&Save\ with\ ++enc\.\.\..latin&6<Tab>fenc=latin6 :browse confirm saveas ++enc=latin6<CR> an 10.360.120.207 &File.&Save\ with\ ++enc\.\.\..latin&7<Tab>fenc=latin7 :browse confirm saveas ++enc=latin7<CR> an 10.360.120.208 &File.&Save\ with\ ++enc\.\.\..latin&8<Tab>fenc=latin8 :browse confirm saveas ++enc=latin8<CR> an 10.360.120.209 &File.&Save\ with\ ++enc\.\.\..latin&9<Tab>fenc=latin9 :browse confirm saveas ++enc=latin9<CR> an 10.360.120.210 &File.&Save\ with\ ++enc\.\.\..latin1&0<Tab>fenc=latin10 :browse confirm saveas ++enc=latin10<CR> an 10.360.120.800 &File.&Save\ with\ ++enc\.\.\..-SEPSAVE2- <Nop> an 10.360.120.900 &File.&Save\ with\ ++enc\.\.\..&UTF-8<Tab>fenc=utf-8 :browse confirm saveas ++enc=utf-8<CR> endif " filler to avoid the line above being recognized as a modeline " filler " filler " filler