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

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

$
0
0

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/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ディレクトリのパスを後方に追加するパターン

~/.vim/vimrc
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'))に置き換えられます。

~/.vim/vimrc
exe 'set rtp^=' . resolve(expand('~/.vim/xxx'))
packadd vim-go
packadd jedi-vim
runtimepathの内容
~/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を端っこに移動させます。

~/.vim/vimrc
setrtp-=~/.vimsetrtp-=~/.vim/after
setrtp^=~/dotfiles/.vim/xxx
packadd vim-go
packadd jedi-vimsetrtp^=.vimsetrtp+=~/.vim/after
setrtp-=~/dotfiles/.vim/xxx
runtimepathの内容
.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/以下のスクリプトが最後まで実行できるようになりました。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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