ホーム‎ > ‎VimとUTF-8‎ > ‎

WindowsのKaoriya版vim/gvimの問題と対処


Windows向け vim/gvimとして Kaoriya(香り屋)版vim/gvimが配布されています。
Kaoriya版では日本語関係で独自設定や機能、スクリプトなどが追加されているようです。

ただ個人的な見解ではパッケージングや設定、同梱プラグインに少し問題があるように思います。
このページではWindowsの Kaoriya版を使用する上で問題と感じた点とその対処について記しています。

このページの内容はKaoriya版の仕様が変更された場合、正しくなくなっている可能性があります。

Kaoriya版をUTF-8化する

Kaoriya版vimは内部エンコーディングが cp932なのでUTF-8固有の文字が含まれている場合などで開くことが出来ないファイルがあります。

それらのファイルは内部エンコーディングをUTF-8に設定することで開くことが出来るようになりますが、 Windowsのshellエンコーディングはcp932なので(主に外部コマンドの日本語がらみで)問題が起きることもあります。
最近のKaorya版では内部エンコーディングをutf-8に変更するファイルが用意されていますので、実際に変更してなにか問題が起きるか試してみてください。
具体的にはKaoriya版Vimのフォルダ内にある /switches/catalog/utf-8.vim を /switches/enabled へコピーすることで内部エンコーディングがutf-8に変更されます。

ただし内部エンコーディングをutf-8に設定した場合は外部コマンドの日本語表示などで問題が起きる事があります。
特に不都合がなければ内部エンコーディングは cp932(Shift_JIS)のままの方が問題は起きません。

Kaoriya版のgvimでプラグインのメニューがおかしくならないようにする

Kaoriya版gvimでメニューにアイテムを登録するプラグインを使用する場合、Kaoriya版ではアイテムが日本語化されずにメニューへ英語で追加されます。
たとえば mru.vimを使うと File(F) と ファイル(F)が出来てしまうため、ファイル(F)メニューをよく使う場合は面倒なことになります。


また以下のようなメッセージが出てツールバーが表示されなくなる場合もあります。
C:\vim73-kaoriya-msvc10_x32j\runtime\menu.vim の処理中にエラーが検出されました:
行 122:
E329: "&Print" というメニューはありません
原因はどちらも同じで Kaoriya版が vimrc_example.vim を vimrc の中で読み込んで filetype plugin indent on を設定しているためです。
mru.vimをpluginフォルダに入れずに gvimrcで読み込むと一応解決はします。
"gvimrcで mru.vimを読み込む
source c:/temp/mru.vim
ただしこれは本質的な対策ではありませんし、 runtimepathを通す必要があるプラグインなどには対処できません 。
また _vimrc(.vimrc)を複数環境で共有している場合はWindowsの Kaoriya版のためだけに特別な処理を行わなければいけないということになります。

vimrc_example.vimは _vimrc の設定例なので、読み込むとしたら  _vimrc で行うファイルであるはずです。
本来は _vimrcで行うべき処理を vimrcで行うように設定しているので、メニューのエンコーディング処理の順番がおかしくなります。

以下は本質的な対処として vimrcではなく _vimrcで vimrc_example.vimを読み込み、その後 filetype plugin indent on を実行するための手順です。

設定手順

  1. vimrc_local.vim」をダウンロードして Kaoriya版vimの実行ファイルと同じフォルダにコピーします。
    vimrc_local.vimをコピーすると Kaoriya版のvimrcでは vimrc_example.vim を読み込まなくなります。
  2. 以下を _vimrcに追加して vimrc_example.vimを _vimrcで読み込むように設定します。
    "----------------------------------------
    " Kaoriya対策
    "----------------------------------------
    """"""""""""""""""""""""""""""
    "g:no_vimrc_exampleを利用してvimrc_example.vimを無効化している時はここで読込
    """"""""""""""""""""""""""""""
    if exists('g:no_vimrc_example') && g:no_vimrc_example == 1
      silent! source $VIMRUNTIME/vimrc_example.vim
    endif

    "プラグインを有効にする
    filetype plugin indent on
    (注意) vimrc_example.vim は _vimrcでの設定を上書きしないように、(内部エンコーディング設定後の)なるべく早い場所で読み込む方がよいかと思います。
vimrc_example.vimは必ずしも読み込まなければいけないわけではないので、_vimrcに読込部分を追加しなくてもかまいませんが、 filetype plugin indent on は設定しておいたほうが良いでしょう。
" プラグインを有効にする
filetype plugin indent on

_vimrcのサンプルという本来の意味合いから言えば単純に vimrc_example.vimをコピーして _vimrcへリネームして使うか、vimrc_exmple.vimから必要な部分を _vimrcにコピーする方がよいかもしれません。
たとえば vimでファイルを開き直した場合、前回のカーソル位置にカーソルを戻す機能は、vimrc_example.vimで定義されています。

Kaoriya版プラグインの問題点

Kaoriya版vim/gvimは
「vim.org等で配布されるオリジナルに、日本語を扱う上で便利な設定やスクリプトが追加されています」
ということなのですが具体的な違いや、どういう設定やスクリプトが追加されているかについての公式なドキュメントは存在しないようです。

コマンド名がわからないコマンドは存在しないも同然ですし、動作に問題のあるプラグインもあるので一度無効化しておいてからファイル内容を確認して必要だと思うプラグインのみ有効化するのがよいかと思います。

バグと問題点

 hz_ja.vim  半角/全角変換用のようです。
 set clipboard+=unnamedを設定すると動作しなくなるなど、動作可能な環境は限られています。
 format.vim
 (廃止されました)
 ソースコード専用ならさほど問題にならないかもしれませんが、特定パターンの禁則処理を行えなかったり無限ループに陥るバグがあります。 
 また内部エンコーディングをUTF-8にした場合はきちんと動作しないことがあります。

 autofmt.vim format.vimの代わりに入った日本語対応整形プラグインで gq で使用されます。
 整形結果がデフォルトのgqと異なる場合があります。
 autodate.vim
 ファイル内に特定文字列があったら、保存時に最終変更時刻を追加するプラグインです。
 意図しない文字列の追加がありえるので、動作を理解しないまま有効にしておかないほうがよいかと思います。
 dicwin.vim
 カーソル位置の単語を辞書で検索するプラグインです。
 デフォルトでは辞書がないので使えませんが、その場合でもキーは<C-k>にマップされてしまうので、 <C-k>を独自にマップして使う設定やプラグインで問題になることがあります。
 なお内部エンコーディングをUTF-8にした場合は辞書ファイルの文字エンコーディングをUTF-8に変更する必要があります。

その他のプラグインやスクリプトもコマンドの存在を知らずに有効にしておいても便利というわけではないので、一度動作確認してから有効にした方が良いように思います。

Kaoriya版のプラグインを無効化する

Kaoriya版添付のプラグインはシステムランタイムディレクトリに追加されているので、デフォルトで存在するプラグインなのか Kaoriya版独自のプラグインなのかは runtime/pluginフォルダのファイルを一つずつ開いて確認するしかありません。
(最新版では修正されたようです)

以下を _vimrcに追加するとKaoriya版のプラグインは無効化されます。
コメント行のファイル名にカーソルを合わせて gf を実行すると該当ファイルを開いて確認することが出来ます。
""""""""""""""""""""""""""""""
"Kaoriya版に添付されているプラグインの無効化
"問題があるものもあるので一律に無効化します。
"ファイルを参照(コメント部分で gf を実行)した上で、必要なプラグインは
"let plugin_..._disableの設定行をコメント化(削除)して有効にして下さい。
""""""""""""""""""""""""""""""
"$VIM/plugins/kaoriya/autodate.vim
let plugin_autodate_disable  = 1
"$VIM/plugins/
kaoriya/cmdex.vim
let plugin_cmdex_disable     = 1
"$VIM/plugins/
kaoriya/dicwin.vim
let plugin_dicwin_disable    = 1
"$VIMRUNTIME/plugin/format.vim
let plugin_format_disable    = 1
"$VIM/plugins/
kaoriya/hz_ja.vim
let plugin_hz_ja_disable     = 1
"$VIM/plugins/
kaoriya/scrnmode.vim
let plugin_scrnmode_disable  = 1
"$VIM/plugins/
kaoriya/verifyenc.vim
let plugin_verifyenc_disable = 1
たとえば autodateプラグインを有効化するために let plugin_autodate_disable = 0 としても autodate.vimは有効にならない仕様なので注意してください。
有効にするにはコメント化するか行自体を削除する必要があります。

なお verifyenc.vimについては有効なままにしておいた方が良いかもしれません。

Kaoriya版のランタイムディレクトリ名をトラブルが起きないようにリネームする

(最新版では修正されたようです)

Kaoriya版を解凍すると 「vim73-kaoriya-w32j」 のような名前(バージョンによって数値部分は変わります)のディレクトリが作成されます。
これはついつい 「vim73」 にリネームしたくなることもあるかと思います。
しかし、「vim73-kaoriya-w32j」 を 「vim73」 にリネームしてしまうと vimrc等の設定ファイルを読み込むことは出来なくなり、vi互換モードの無設定状態で起動します。
これはvimの実行ファイルが 「vim73」 ディレクトリに存在すると、一階層上から各種設定ファイルを探すためです。

この問題はKaoriya版の 「runtime」フォルダを 「vim73」 (バージョンによって数値部分は変わります)にリネームしておくと起きなくなります。
なお 「runtime」 と 「vim73」 が混在する場合は 「vim73」 の方が優先されます。
ちなみに vim/gvimを公式のインストーラでインストールするとランタイムディレクトリ名は vim73になっています。

後述しますが Windowsの環境変数 HOME が示す場所に設定ファイルを置いている場合は、先に $HOMEから vimfilesを探すのでリネームしなくても基本的には問題になりません。

ユーザーランタイムディレクトリを作成する

わかっている人には問題ないのですが、Kaoriya版をそのまま使用するとプラグイン等は runtimeフォルダ(前節のリネームを実行している場合は vim73)へ追加することになります。
しかし個人的なファイルとシステムファイルはごちゃ混ぜにするべきではありません。
システムランタイムディレクトリの中身はバージョンアップなどでいつ初期化されてもかまわないようにしておくべきです。

Windowsの場合はWindowsの環境変数 HOME で指定したフォルダか、vimの実行ファイルと同じフォルダに _vimrc、_gvimrc、vimfilesを作成してプラグイン等は vimfilesに追加/設定します。
ただ Windowsの場合は環境変数 HOMEを設定しにくい場合もあるので vimの実行ファイルと同じフォルダに_vimrc、_gvimrc、vimfilesを作る方が面倒がないと思います。

本来なら環境変数 HOME を Windowsに設定して、そのホームディレクトリに設定ファイル(_vimrc, _gvimrc, vimfiles)を置きます。
なお Windowsの ~ は環境変数 HOME を設定していないと C:\Documents and Settings 以下の個人フォルダになります。
~ ($HOME)がどのディレクトリを指しているかは、コマンドモードから確認してください。
:echo $HOME
ちなみに HOMEに設定ファイルがあれば HOMEの設定ファイルが一番優先されます。
読込場所の順番は :versionでも確認できます。

vimfilesに置いたファイルはシステムのランタイムディレクトリと置いたものと同じに扱われます。
vimfilesの中には空でかまわないので runtimeと同じフォルダを作成しておくと良いかもしれません。

Kaoriya版の独自部分

その他、同梱スクリプト以外の Kaoriya版と公式なvim/gvimとのソースレベルでの大きな違いとして以下のようなものがあります。
  • 背景の透過(半透明)表示
  • Migemoのサポート
  • 独自の文字エンコーディング判定


Comments