WindowsでVundleを使うときにはまったこと

Vundleのインストールについてはhttps://github.com/gmarik/vundleのREADME.mdを見れば大体わかるので、そちらを参照してください。

以下、自分がWindows環境でVundleを使おうとしてはまったことをメモしておく。

curl云々のところ

以下のスクリプト?をC:\Program Files\Git\cmd\curl.cmdに作ってなかった。
説明はちゃんと読みましょう!

curl.cmd

@rem Do not use "echo off" to not affect any child calls.
@setlocal

@rem Get the abolute path to the parent directory, which is assumed to be the
@rem Git installation root.
@for /F "delims=" %%I in ("%~dp0..") do @set git_install_root=%%~fI
@set PATH=%git_install_root%\bin;%git_install_root%\mingw\bin;%PATH%

@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH%
@if not exist "%HOME%" @set HOME=%USERPROFILE%

@curl.exe %*

set shellslashをしていた

これを設定していると、「\」と「/」の関係でパスがうまくいかないのでインストールなどに失敗していた。


プラグインのインストール先が ~/.vim/bundle 以下になっていた

これでインストールできるようになったかと思えば、インストールされるプラグインの場所が、~/.vim/bundle 以下になっていた。
で、いろいろ調べていくと、.vimrc で呼んでいるVundleの関数 vundle#rc() に解決の糸口があった。この関数は以下のようになっている。

vundle.vim

func! vundle#rc(...) abort
  let g:bundle_dir = len(a:000) > 0 ? expand(a:1) : expand('$HOME/.vim/bundle')
  call vundle#config#init()
endf

let g:bundle_dir〜のところでインストールするプラグインディレクトリを定義している。
ここで何をしているかというと、(見ればわかるか…)
もし、a:000(可変長引数)の長さが0より大きいとき、a:1(可変長引数の1個目)の絶対パスを展開しそれをインストール先のディレクトリに、そうでないとき$HOME/.vim/buncle以下をインストール先にするというものである。Windowsではプラグインなどはvimfiles以下に置かなければならず*1、vundle#rc()関数を引数なしで呼ぶと$HOME/.vim/bundleがインストールディレクトリなってしまう。

解決策

.vimrcに

call vundle#rc('~/vimfiles/bundle')

と書く。
でも、これではLinuxなど他の環境と.vimrcを共有している場合だめなので、

if has('win32') || has('win64')
  let $DOTVIM = expand('~/vimfiles')
else
  let $DOTVIM = expand('~/.vim')
endif

としておいて

call vundle#rc('$DOTVIM/bundle')

とかにしておくといいかも。


これで自分の環境ではうまくVundleを使えるようになりました。

*1:Windowsでも.vimプラグインなどのインストールディレクトリにできるかもしれないが、自分の環境ではcolorschemeを読み込んでくれなかったのでvimfilesにしておいた