packaddでプラグインを読み込んだ時に、プラグインに含まれるftplugin/以下のスクリプトが最後まで実行されなかったので試行錯誤して調べてみました。
環境
Vim 7.4.1868
Linux
~/dotfiles/.vim/を~/.vim/にシンボリックリンクを貼っています。
サンプルで利用するプラグイン
https://github.com/davidhalter/jedi-vim
https://github.com/fatih/vim-go
プラグインのパスをruntimepathの後方に追加していくパターン
packadd vim-go
packadd jedi-vim
~/.vim
/usr/local/share/vim/vimfiles
/usr/local/share/vim/vim74
/usr/local/share/vim/vimfiles/after
~/.vim/after
~/dotfiles/.vim/pack/plugins/opt/vim-go
~/dotfiles/.vim/pack/plugins/opt/jedi-vim
~/dotfiles/.vim/pack/plugins/opt/jedi-vim/after
packaddを書いた順番通りにvim-goとjedi-vimのパスがruntimepathの後方に追加されました。
このパターンだと/usr/local/share/vim/vim74/ftplugin/以下のスクリプトがプラグインに含まれるftplugin/よりも先に検索されてしまうので、プラグイン側のftplugin/以下のスクリプトを実行する前に変数b:did_ftpluginが定義済みになり、プラグイン側のftplugin/以下のスクリプトが最後まで実行されませんでした。
プラグインのパスをruntimepathの前方に追加、プラグインのafterディレクトリのパスを後方に追加するパターン
setrtp^=~/dotfiles/.vim/xxx
packadd vim-go
packadd jedi-vim
~/dotfiles/.vim/xxxのxxx部分に存在しないディレクトリ名を指定します。
この存在しないxxxの部分を.vim/直下に指定します。
私の環境では~/xxxや~/dotfiles/.vim/yyy/xxxやシンボリックリンクを含むパスを指定すると、runtimepathの後方に全てのプラグインのパスが追加されてしまいました。
この理由から~/.vim/がシンボリックリンクなので~/dotfiles/.vim/の方を書いてます。
~/dotfiles/.vim/xxxの部分はresolve(expand('~/.vim/xxx'))に置き換えられます。
exe 'set rtp^=' . resolve(expand('~/.vim/xxx'))
packadd vim-go
packadd jedi-vim
~/dotfiles/.vim/xxx
~/dotfiles/.vim/pack/plugins/opt/jedi-vim
~/dotfiles/.vim/pack/plugins/opt/vim-go
~/.vim
/usr/local/share/vim/vimfiles
/usr/local/share/vim/vim74
/usr/local/share/vim/vimfiles/after
~/.vim/after
~/dotfiles/.vim/pack/plugins/opt/jedi-vim/after
jedi-vimとvim-goのパスが~/dotfiles/.vim/xxxの直後に追加されています。
jedi-vimがvim-goよりも前方に追加されています。
jedi-vimのafterディレクトリのパスが後ろに追加されています。
存在しない~/dotfiles/.vim/xxxは不要なのでruntimepathから削除するサンプルも載せます。
一応~/.vimと~/.vim/afterを端っこに移動させます。
setrtp-=~/.vimsetrtp-=~/.vim/after
setrtp^=~/dotfiles/.vim/xxx
packadd vim-go
packadd jedi-vimsetrtp^=.vimsetrtp+=~/.vim/after
setrtp-=~/dotfiles/.vim/xxx
.vim
~/dotfiles/.vim/pack/plugins/opt/jedi-vim
~/dotfiles/.vim/pack/plugins/opt/vim-go
/usr/local/share/vim/vimfiles
/usr/local/share/vim/vim74
/usr/local/share/vim/vimfiles/after
~/dotfiles/.vim/pack/plugins/opt/jedi-vim/after
~/.vim/after
最初に挙げたパターンと違ってプラグイン側のftplugin/を先に検索できるようになったのでプラグイン側のftplugin/以下のスクリプトが最後まで実行できるようになりました。