Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Windows+gVim+dein.vim環境導入時「未知の関数です」と言われた

$
0
0

症状

新しくwinタブを買ったのでvimを入れようと、 http://www.vim.org/からWindows版gvim80.exeをダウンロードした。(いつ間にかver8.0が出てた)
その時NeoBundleが非推奨になってdein.vimと言うものが出ていると知ったので、それを入れようとした。
NeoBundle から dein.vim に乗り換えたら爆速だった話
この記事を参考にして導入。


あれ、うまくいかない。
未知の関数です:dein#load_state

ちょっとRaspbian1にも入れて試してみるか。→すんなり入った。
じゃあ、Windowsかgvimか、そこらへんの環境とうまく合わないんだろうか。

調査

未知ってなんやねん。
プラグインのひとつとしてdein.vimが読み込まれていないみたい。確かに、ちょっと変な場所にdein.vim本体が入ってて、そこをruntimepathに追加しているんだけど、それがうまくいかないのかな。

_vimrc
" プラグインが実際にインストールされるディレクトリlets:dein_dir = expand('~\.cache\dein')" dein.vim 本体lets:dein_repo_dir =s:dein_dir . '\repos\github.com\Shougo\dein.vim'" dein.vim がなければ github から落としてくる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(後略)

gvim -V2オプションで起動すると、抜粋して以下の感じ。2

gvim -V2(抜粋)
C:\Users\fuman\_vimrc の実行を継続中です
"autoload/dein.vim""C:\Users\fuman\.cache\dein\repos\github.com\Shougo\dein.vim\,C:\Users\fuman/vimfiles,C:\Program Files (x86)\Vim/vimfiles,C:\Program Files (x86)\Vim\vim80,C:\Program Files (x86)\Vim/vimfiles/after,C:\Users\fuman/vimfiles/after"から検索中
'runtimepath'の中にはありません: "autoload/dein.vim""autoload/dein.vim""C:\Users\fuman\.cache\dein\repos\github.com\Shougo\dein.vim\,C:\Users\fuman/vimfiles,C:\Program Files (x86)\Vim/vimfiles,C:\Program Files (x86)\Vim\vim80,C:\Program Files (x86)\Vim/vimfiles/after,C:\Users\fuman/vimfiles/after"から検索中
'runtimepath'の中にはありません: "autoload/dein.vim"
                                                     C:\Users\fuman\_vimrc の処理中にエラーが検出されました:
行  133:
E117: 未知の関数です: dein#load_state
E15: 無効な式です: dein#load_state(s:dein_dir)
"autoload/dein.vim""C:\Users\fuman\.cache\dein\repos\github.com\Shougo\dein.vim\,C:\Users\fuman/vimfiles,C:\Program Files (x86)\Vim/vimfiles,C:\Program Files (x86)\Vim\vim80,C:\Program Files (x86)\Vim/vimfiles/after,C:\Users\fuman/vimfiles/after"から検索中
'runtimepath'の中にはありません: "autoload/dein.vim"148:
E117: 未知の関数です: dein#check_install
E15: 無効な式です: dein#check_install()
$HOME\_vimrc の取込を完了

runtimepathにはパスC:\Users\fuman\.cache\dein\repos\github.com\Shougo\dein.vim\が追加されてて、そこにちゃんとautoload\dein.vimも入ってる。なぜ認識しないんだろう?

ちょっとruntimepathの設定する文を変えてみる。

_vimrcその2
" プラグインが実際にインストールされるディレクトリlets:dein_dir = expand('~\.cache\dein')" dein.vim 本体lets:dein_repo_dir =s:dein_dir . '\repos\github.com\Shougo\dein.vim'" dein.vim がなければ github から落としてくる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')        "いったんコメントアウト!setruntimepath^=~/.cache/dein/repos/github.com/Shougo/dein.vim/         "追加。endif(後略)
gvim -V2その2
C:\Users\fuman\_vimrc の実行を継続中です
"autoload/dein.vim""C:\Users\fuman/.cache/dein/repos/github.com/Shougo/dein.vim/,C:\Users\fuman/vimfiles,C:\Program Files (x86)\Vim/vimfiles,C:\Program Files (x86)\Vim\vim80,C:\Program Files (x86)\Vim/vimfiles/after,C:\Users\fuman/vimfiles/after"から検索中
行 134: C:\Users\fuman\.cache\dein\repos\github.com\Shougo\dein.vim\autoload\dein.vim を取込中
C:\Users\fuman\.cache\dein\repos\github.com\Shougo\dein.vim\autoload\dein.vim の取込を完了

C:\Users\fuman/.cache/dein/repos/github.com/Shougo/dein.vim/は良いのか。途中から\/になってるくらいしか違わないんだが


そんな感じで何パターンか試していると、
C:\Users\fuman\.cache\dein\repos\github.com\Shougo\dein.vim\→ NG
C:\Users\fuman\.cache\dein\repos\github.com\Shougo\dein.vim→ OK
C:\Users\fuman\.cache\dein\repos\github.com\Shougo\dein.vim/→ OK
となり、どうやら末尾が\だとruntimepathとしてうまく認識しないっぽい。\,とつながるところがエスケープ文字になっちゃうのか。
でも、fnamemodify():pオプションでそんな文字が自動的に追加されてしまうのってどうなの…

最終的に

fnamemodify()をまんま抜く形でうまくいきました。
フルパスに展開しなくていいのか?と思ったけど、読めてるからいいや。
たぶん見る人が見たら汚いんだろうなあ。

_vimrc
"""" Dein TOML" プラグインが実際にインストールされるディレクトリlets:dein_dir = expand('~\.cache\dein')" dein.vim 本体lets:dein_repo_dir =s:dein_dir . '\repos\github.com\Shougo\dein.vim'" dein.vim がなければ github から落としてくる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')
    execute 'set runtimepath^=' . s:dein_repo_dir   "変更点endif" 設定開始if dein#load_state(s:dein_dir)call dein#begin(s:dein_dir)  " プラグインリストを収めた TOML ファイル  " 予め TOML ファイル(後述)を用意しておくletg:rc_dir    = expand('~/vimfiles/rc')"ここも .vim → vimfiles に変えたlets:toml      =g:rc_dir . '/dein.toml'lets:lazy_toml =g:rc_dir . '/dein_lazy.toml'  " TOML を読み込み、キャッシュしておくcall dein#load_toml(s:toml,      {'lazy': 0})call dein#load_toml(s:lazy_toml, {'lazy': 1})  " 設定終了call dein#end()call dein#save_state()endif" もし、未インストールものものがあったらインストールif dein#check_install()call dein#install()endif

fnamemodify()使ってwindows環境でruntimepathに書く、っていう組み合わせが相性悪いんですかねえ。なんかdein.vimに限らず色んな所で起こりそうな気がする。


  1. そのとき一番身近なlinux環境だったというだけです 

  2. ちなみに-V2だけだとgvimではダイアログにログが出る。不便なので、-V2log.txtみたいにファイル出力した。 


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>