Windowsでポータブルなvim環境を作る

対象

KaoriYa vim

動機

  1. %userprofile%を使いたくない。
  2. USBメモリで持ち運びたい。

どうやって?

$HOMEをどこかで設定すればいい。でもUSBメモリで持ち運びたいので、環境変数を指定する選択肢は無し。ログアウト時に設定が消えるVolatile環境変数という手もあるが、vimを起動する前に設定するのを忘れそう。vimの起動時に設定する方法はないだろうか?

vimの起動

vimのヘルプを見ると、一番最初に読み込まれるファイルは$VIM\vimrcなので、ここで$HOMEを設定できないだろうか?($VIMgvim.exeがある場所)

スタート時に、Vim環境変数とファイルを調べ、然るべく値を設定する。Vimはこの順序で取り掛かる。

  1. オプション 'shell' と 'term' を設定する *SHELL* *COMSPEC* *TERM*
  2. 引数を処理する
  3. 環境変数とファイルのExコマンドを実行する
    → $VIM\vimrc
    → $HOME\_vimrc($HOMEが設定されていないときは、"$VIM\_vimrc" が読み込まれる。)
  4. プラグインスクリプトを読み込む *load-plugins*
  5. 'shellpipe' と 'shellredir' を設定する
  6. "-n" コマンド引数が使用されていたら、'updatecount' を0に設定する
  7. バイナリオプションを設定する
  8. GUIの初期化を行う
    → $VIM/gvimrc
    → $HOME\_gvimrc($HOMEが設定されていないときは、"$VIM\_gvimrc" が読み込まれる。)
  9. viminfoファイルを読み込む
  10. quickfixファイルを読み込む
  11. 全てのウィンドウを開く
  12. スタートアップコマンドが実行される

最初に見つかった vimrc、gvimrc が $MYVIMRC、$MYGVIMRC に設定される。

 $VIM\vimrcを見ると、最初に$VIM\vimrc_local.vimを読み込む作りになっているので、ここで設定すればよいのではないだろうか?

"---------------------------------------------------------------------------
" サイトローカルな設定($VIM/vimrc_local.vim)があれば読み込む。読み込んだ後に
" 変数g:vimrc_local_finishに非0な値が設定されていた場合には、それ以上の設定
" ファイルの読込を中止する。
if 1 && filereadable($VIM . '/vimrc_local.vim')
  unlet! g:vimrc_local_finish
  source $VIM/vimrc_local.vim
  if exists('g:vimrc_local_finish') && g:vimrc_local_finish != 0
    finish
  endif
endif

 $VIMにhomeディレクトリを作成する場合、次の内容の$VIM\vimrc_local.vimを作成する。 

let $HOME=expand('%:p:h').'\home'

 gvimを起動して、$HOMEを確認してみると、ちゃと設定できてた!