Differences between revisions 18 and 19
Revision 18 as of 2007-01-12 16:48:50
Size: 8362
Editor: OsamuAoki
Comment:
Revision 19 as of 2009-03-16 03:30:30
Size: 8366
Editor: anonymous
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
[:UTF8vimE: (English)] [:OsamuAoki: Wiki links] [[UTF8vimE| (English)]] [[OsamuAoki| Wiki links]]
Line 100: Line 100:
[:JapaneseEnvironmentE: (English)] [:JapaneseEnvironment: (日本語)] を例として参照。 [[JapaneseEnvironmentE| (English)]] [[JapaneseEnvironment| (日本語)]] を例として参照。

(English) Wiki links

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

キーボードにない文字の入力

(English) (日本語) を例として参照。