Vimのプラグイン管理プラグインdin.vimを使っていて、 新たなプラグインを入れようとしたところプラグインのコピーに失敗して 上手くセットアップできなかったときに対する対処法。
起こった問題
というプラグインを入れようと
call dein#add('sheerun/vim-polyglot')
を.vimrcに追加して
:call dein#recache_runtimepath()
を実行したところ
[dein] copy command failed.
[dein] could not make way for new regular file: test
[dein] rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.
c(1196) [sender=3.1.2]
[dein] cmdline: rsync -a -q --exclude '/.git/' '/home/user/.vim/dein/repos/github.com/mattn/weba
pi-vim/' '/home/user/.vim/dein/repos/github.com/sheerun/vim-polyglot/' '/home/user/.vim/dein/.
cache/init.vim/.dein'
というエラーが出てしまいました。
sheerun/vim-polyglotを外すと出ません。
原因
上で起こった問題は、 sheerun/vim-polyglotにはtestというファイルが トップディレクトリにあり、 一方で、Shougo/dein.vim含め、複数のプラグインがtestという ディレクトリをトップディレクトリ下に持っていることが原因でした。
deinではdeinのインストールディレクトリを~/.vim/deinとすると
~/.vim/dein/.cache/init.vim/.dein/というディレクトリに
各プラグインの中身をコピーしてruntimepath
に指定して読み込んでいます。
この際に、他のプラグインからtestディレクトリがコピーされた後に、 そこにファイルとしてtestをコピーしようとしてエラーを出している状態。
解決法
sheerun/vim-polyglotを加える際に
call dein#add('sheerun/vim-polyglot', {'merged': 0})
とすることで解決できます。
merged
オプションを0
にすることでconflictが起きたときに無視してくれるのでエラーを回避できます。
testファイル自体はプラグイン動作には直接関係ないのでこれでOK。
問題内容はちょっと違いますが以下も同じ様な問題。
Copy fails when file and folder with same name · Issue #362 · Shougo/dein.vim