確認用に1からvimrc書いた時、set shellslash
書き忘れてて、
「何でエラーなるんだああああ」ってなったのでメモ。
問題のvimrc
filetype plugin indent on
let $MY_VIMRUNTIME = $VIM . "/vimfiles"
if &compatible
set nocompatible
endif
let s:dein_dir = expand('$MY_VIMRUNTIME/dein')
let g:dein#install_log_filename = s:dein_dir . '/dein.log'
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
if &runtimepath !~# '/dein.vim'
if !isdirectory(s:dein_repo_dir)
execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_dir
endif
execute 'set runtimepath^=' . fnamemodify(s:dein_repo_dir, ':p')
endif
if dein#load_state(s:dein_dir)
call dein#begin(s:dein_dir)
call dein#add('Shougo/dein.vim')
call dein#add('Shougo/denite.nvim')
call dein#end()
call dein#save_state()
endif
if dein#check_install()
call dein#install()
endif
filetype plugin indent on
発生した問題
dein.vimインストール完了のダイアログが出た後、以下のエラーになる。
_vimrcの処理中にエラーが検出されました:
行 17:
E117: 未知の関数です: dein#load_state
E15: 無効な式です: dein#load_state(s:dein_dir)
行 24:
E117: 未知の関数です: dein#check_install
E15: 無効な式です: dein#check_install()
インストールされたはずのdein.vimが見えてない模様。
原因
多分、パスに、¥
(バックスラッシュ)と/
(スラッシュ)が混在していること。
vimだと¥
なんだけど、ブラウザで見ると\
になるから、くっそ見にくい。
runtimepath=~\Downloads\tmp\vim80-kaoriya-win64\vimfiles\dein/repos/github.com/Shougo/dein.vim\,~/vimfiles
expand()で\vimfiles\dein
まで展開されて、以降は直接文字連結してるから、/
区切りで入る。
let $MY_VIMRUNTIME = $VIM . "/vimfiles"
let s:dein_dir = expand('$MY_VIMRUNTIME/dein')
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
解決手段
set shellslash
を設定する。これにより、¥
がvimによって/
に変換される。
区切り文字に/
を指定している箇所を、全て¥
に変更する。
set runtimepath
してる所を以下の通り変更する。
execute 'set runtimepath^=' . fnamemodify(s:dein_repo_dir, ':p:gs?\\?/?')
要は、使われる区切り文字が統一されてれば大丈夫、と思う。
普段なんとなく設定してたけど、Windows環境では便利なオプションだなぁ、と、
再認識したわけでした。