突然消失するかもしれないブログ

”とつきえブログ”

vimで正しく日本語文字コードを自動認識(文字コード、改行コードの自動認識)する方法

Linuxのディストリビューション全般でデフォルトでインストールされるviというと、vimかnviですが、デフォルトの状態だと正しく日本語文字コードを自動認識することができません。

そんなときは、vimの設定ファイル(ホームディレクトリにある.vimrc)を以下の情報を参考に設定すれば、きちんと日本語文字コード、改行コードを自動認識できるようになります。

あっさり解決できてしまったのでめちゃくちゃ感動してしまいました。実に素晴らしいです!

vi最高!

ずんWiki – vim

文字コードの自動認識改行コードの自動認識

.vimrcに以下を記述する。

" 文字コードの自動認識
if &encoding !=# ‘utf-8’
  set encoding=japan
  set fileencoding=japan
endif
if has(‘iconv’)
  let s:enc_euc = ‘euc-jp’
  let s:enc_jis = ‘iso-2022-jp’
  " iconvがeucJP-msに対応しているかをチェック
  if iconv("\x87\x64\x87\x6a", ‘cp932’, ‘eucjp-ms’) ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = ‘eucjp-ms’
    let s:enc_jis = ‘iso-2022-jp-3’
  " iconvがJISX0213に対応しているかをチェック
  elseif iconv("\x87\x64\x87\x6a", ‘cp932’, ‘euc-jisx0213’) ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = ‘euc-jisx0213’
    let s:enc_jis = ‘iso-2022-jp-3’
  endif
  " fileencodingsを構築
  if &encoding ==# ‘utf-8’
    let s:fileencodings_default = &fileencodings
    let &fileencodings = s:enc_jis .’,’. s:enc_euc .’,cp932′
    let &fileencodings = &fileencodings .’,’. s:fileencodings_default
    unlet s:fileencodings_default
  else
    let &fileencodings = &fileencodings .’,’. s:enc_jis
    set fileencodings+=utf-8,ucs-2le,ucs-2
    if &encoding =~# ‘^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$’
      set fileencodings+=cp932
      set fileencodings-=euc-jp
      set fileencodings-=euc-jisx0213
      set fileencodings-=eucjp-ms
      let &encoding = s:enc_euc
      let &fileencoding = s:enc_euc
    else
      let &fileencodings = &fileencodings .’,’. s:enc_euc
    endif
  endif
  " 定数を処分
  unlet s:enc_euc
  unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has(‘autocmd’)
  function! AU_ReCheck_FENC()
    if &fileencoding =~# ‘iso-2022-jp’ && search("[^\x01-\x7e]", ‘n’) == 0
      let &fileencoding=&encoding
    endif
  endfunction
  autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists(‘&ambiwidth’)
  set ambiwidth=double
endif

広告

vimで正しく日本語文字コードを自動認識(文字コード、改行コードの自動認識)する方法」への2件のフィードバック

  1. takaaki024 7月 14, 2009 1:16 am

    ぼくは日本語周りに関しては、こんな風に設定しています。

    set fencs=utf-8,shift-jis,euc-jp,latin1
    set ambw=double

    これでも自動判定されるっぽいですよ。

  2. typex20 7月 14, 2009 8:59 am

    突消ブログの中の人です。

    素晴らしい情報どうもありがとうございます。

    vim version 7.2.148 on Debian Squeeze of 玄箱Proの環境で
    ざっと確認してみたのですが、教えて頂いたわずか2行の設定で
    きちんと日本語表示ができるようになりました!

    後ほど追記させて頂きます。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。