ホーム > Vim > Vimにおける文字化け解消プラグイン

Vimにおける文字化け解消プラグイン

最近、毎回というわけではないけれど、ちょこちょことVimで開くファイルが文字化けていてストレスだったので、それを以下の記事を参考にして解消した。

原因は、自分が設定内容(文字コード判定の部分)をまるまるコピーして使わせてもらっていた『文字コードの自動認識-ずんWiki』にあったようで、それを修正した記事を参考に、またこれをプラグイン化して外部ファイルにしたという『vimの文字化け対策プラグイン』記事を参考にした。

ユーザーのホームディレクトリ(.vimrcとかも置いてある)に.vimというディレクトリを作り、その中にpluginというディレクトリを作る。その中に、以下の内容を記述した「recognize_charcode.vim」を置く。

プラグインはディレクトリごとにロードされるタイミングやケースが異なるらしいが、今回のこれはどの場合でも共通のことなので「Vimの起動時に自動的に読み込まれる」というこの/.vim/plugin/ディレクトリに配置した。

“==============================================================
” 文字コードの自動認識プラグイン
” recognize_charcode.vim
“==============================================================
” [参考] (感謝)
” ・コードのほぼ全てを、ずんWikiさんの「文字コードの自動認識」
” (http://www.kawaz.jp/pukiwiki/?vim#cb691f26)を使用させて頂いている
” ・ずんWikiさんのコードに対する修正は、Heavens hellさんの「vim でたまに文字化け」
” (http://d.hatena.ne.jp/heavenshell/20080105/1199536148)
” ・プラグインの作り方は、KaoriYa.netさんの「Vim日本語ドキュメント」
” (http://www.kaoriya.net/vimdoc_j/)からダウンロードしたスナップショット内の
” runtime/doc/usr_41.jax 41.11節「プラグインを書く」、
” 及び、名無しのVIM使いさんの「1ファイルで構成されるプラグインのテンプレート」
” (http://nanasi.jp/articles/code/stdplugin/template.html)を参考にした

” [このプラグインの実行例]
” (1) このファイルを 任意ディレクトリ/recognize_charcode.vim に保存する
” (2) ~/.vimrc に
” source 任意ディレクトリ/recognize_charcode.vim
” を加える
” 「任意ディレクトリ」 は 「~/.vim」 とするのが標準らしい

“————————————————————–

” プラグイン設定
” プラグインが2回読み込まれることを防止
if exists(“loaded_recognize_charcode”)
finish
endif
let loaded_recognize_charcode = 1

” ユーザ設定を逃す
let s:save_cpo = &cpo
set cpo&vim

“——————– 文字コード認識部 開始 ——————–

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(“x87x64x87x6a”, ‘cp932′, ‘eucjp-ms’) ==# “xadxc5xadxcb”
let s:enc_euc = ‘eucjp-ms’
let s:enc_jis = ‘iso-2022-jp-3′
” iconvがJISX0213に対応しているかをチェック
elseif iconv(“x87x64x87x6a”, ‘cp932′, ‘euc-jisx0213′) ==# “xadxc5xadxcb”
let s:enc_euc = ‘euc-jisx0213′
let s:enc_jis = ‘iso-2022-jp-3′
endif

” fileencodingsを構築
if &encoding ==# ‘utf-8′

“(A)
let s:fileencodings_default = &fileencodings
let &fileencodings = s:enc_jis .’,’. s:enc_euc

if s:fileencodings_default =~ ‘utf-8′
let &fileencodings = &fileencodings .’,’. s:fileencodings_default
let &fileencodings = substitute(&fileencodings, “utf-8″, “utf-8,cp932″, “g”)
else
let &fileencodings = &fileencodings .’,cp932,’. s:fileencodings_default
endif
unlet s:fileencodings_default
“(B)

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

“——————– 文字コード認識部 終了 ——————–

” 逃がしていたユーザの設定を修復
let &cpo = s:save_cpo

文字化けは解消、.vimrcもスッキリしました。
ありがとうございました。

コメント:0

コメントフォーム
入力した情報を記憶する

トラックバック:0

この記事のトラックバック URL
http://showzine.info/blog/2009/08/vim%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8b%e6%96%87%e5%ad%97%e5%8c%96%e3%81%91%e8%a7%a3%e6%b6%88%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3.html/trackback
トラックバックの送信元リスト
Vimにおける文字化け解消プラグイン - SHOWJIN*BLOG より

ホーム > Vim > Vimにおける文字化け解消プラグイン

検索
フィード

ページの上部に戻る