1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

packaddを使うとruntimepathにどのようにパスが登録されるのか

Last updated at Posted at 2016-06-02

packaddでプラグインを読み込んだ時に、プラグインに含まれるftplugin/以下のスクリプトが最後まで実行されなかったので試行錯誤して調べてみました。

環境

Vim 7.4.1868
Linux
~/dotfiles/.vimを~/.vimにシンボリックリンクを貼っています。

サンプルで利用するプラグイン
https://github.com/davidhalter/jedi-vim
https://github.com/fatih/vim-go

プラグインのパスをruntimepathの後方に追加していくパターン

~/.vim/vimrc
packadd! vim-go
packadd! jedi-vim
runtimepathの内容
~/.vim
/usr/local/share/vim/vimfiles
/usr/local/share/vim/vim74
/usr/local/share/vim/vimfiles/after
~/.vim/after
~/dotfiles/.vim/pack/dist/opt/vim-go
~/dotfiles/.vim/pack/dist/opt/jedi-vim
~/dotfiles/.vim/pack/dist/opt/jedi-vim/after

packaddを書いた順番通りにvim-goとjedi-vimのパスがruntimepathの後方に追加されました。
このパターンだと/usr/local/share/vim/vim74/ftplugin/以下のスクリプトがプラグインに含まれるftplugin/よりも先に検索されてしまうので、プラグイン側のftplugin/以下のスクリプトを実行する前に変数b:did_ftpluginが定義済みになり、プラグイン側のftplugin/以下のスクリプトが最後まで実行されませんでした。

プラグインのパスをruntimepathの前方に追加するパターン

~/.vimがシンボリックリンクなので、runtimepathから~/.vimを削除し、シンボリックリンクの参照先である~/dotfiles/.vimをruntimepathの先頭に追加します。

~/.vim/vimrc
set rtp-=~/.vim
set rtp^=~/dotfiles/.vim
packadd! vim-go
packadd! jedi-vim

または

~/.vim/vimrc
let s:vimhome = split(&rtp, ',')[0]
execute 'set rtp-=' . s:vimhome
execute 'set rtp^=' . resolve(expand(s:vimhome))
packadd! vim-go
packadd! jedi-vim
unlet s:vimhome
runtimepathの内容
~/dotfiles/.vim
~/dotfiles/.vim/pack/dist/opt/jedi-vim
~/dotfiles/.vim/pack/dist/opt/vim-go
/opt/vim74/share/vim/vimfiles
/opt/vim74/share/vim/vim74
/opt/vim74/share/vim/vimfiles/after
~ /.vim/after
~/dotfiles/.vim/pack/dist/opt/jedi-vim/after

jedi-vimとvim-goのパスが~/dotfiles/.vimの直後に追加されています。
jedi-vimがvim-goよりも前方に追加されています。
jedi-vimのafterディレクトリのパスが後ろに追加されています。

最初に挙げたパターンと違ってプラグイン側のftplugin/を先に検索できるようになったのでプラグイン側のftplugin/以下のスクリプトが最後まで実行できるようになりました。

2017/02/06 追記

~/.vimがシンボリックリンクではない場合は今回の問題は発生しません。
Vim 8.0.308でこの不具合が修正されました。
vim-jpで報告したらh-eastさんが直してくださいました。
ありがとうございます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?