確認用に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環境では便利なオプションだなぁ、と、
再認識したわけでした。