Repository navigation
[RFC] Let users write :packadd volt in his/her vimrc #118
Description
Activity
- changed the title
[-]Let users write `:packadd volt` in his/her vimrc[/-][+][RFC] Let users write `:packadd volt` in his/her vimrc[/+]on Dec 19, 2017 ちなみに以前の挙動 (インストール等の度にいちいちファイルをコピーする) も設定ファイル (
$VOLTPATH/config.json) で選択できるようにする予定です。profile機能を使うユーザ向けにはマジックコメント同様に自動で追加してあげればいいんじゃないですかね
ところで、
packadd voltを書くと$VOLTPATH/repos/<repos>がrtpに追加されるってのはvolt側で追加するってことですよね?
.vim/pack/volt/start/system/plugin/bundled_plugconf.vimでその処理をやるってのはだめなんでしょうかbundled_plugconf.vimと書きましたが、もちろん同ディレクトリの別ファイルでいいです.vim/pack/volt/start/system/plugin/bundled_plugconf.vim で rtp に追加したとしてもプラグインが読み込まれないんです。
具体的には以下のような順番みたいです(もしかしたら 2 と 3 逆かもしれませんが、要するに
bundled_plugconf.vim でやっても手遅れ)。- vimrc の読み込み
- プラグインの読み込み
~/.vim/pack/*/start/*の読み込み
profile機能を使うユーザ向けにはマジックコメント同様に自動で追加してあげればいいんじゃないですかね
上述のタイミングの問題があるので、「profile 機能を使うユーザは書かなくてもいい、けど profile 機能を使わないユーザは書かないとダメ」みたいになるので一貫性がないかなーと
@rhysd さんに Twitter で「シンボリックリンク張っちゃダメなんでしょうか?」と言われたので、考えた際のメモを載せておきます。
volt build は現在以下の 1 の方法でプラグインを読み込んでいるが、何もわざわざコピーしなくてもいい。
いくつか方法が考えられるが、以下の 4 をデフォルトの動作としたい。
しかし Vim script のトランスパイルを考えた際にトランスパイルした Vim script を読み込むためにコピーした方が嬉しいこともある。
よって今の挙動も後々設定ファイルで選択できるようにする。$VOLTPATH/repos/<repos>から~/.vim/pack/volt/opt/<repos>にコピーする
- volt build:遅い
- Vim の起動:速い
~/.vim/pack/volt/opt/<repos>に symlink を作る
- volt build:速い
- Vim の起動:速い
- 欠点
- bare リポジトリをサポートできない
- Windows などサポートできない環境がある
$VOLTPATH/repos/<repos>を rtp に加えて直接 :source する
- volt build:速い
- Vim の起動:遅い
- 欠点
- bare リポジトリをサポートできない
- Vim script でわざわざプラグインのファイルを一つずつ
:sourceしてるので遅い (はず)
- vimrc で
:packadd voltと書いてもらう
- volt build:速い
- Vim の起動:速い
~/.vim/pack/volt/start/_volt_started/plugin/started.vimの行う処理let g:volt_source_repos = 1
~/.vim/pack/volt/opt/volt/plugin/startup.vimの行う処理g:volt_source_reposが zero なら以下を行うset rtp+=$VOLTPATH/repos/<repos>autocmd VimEnter * call s:config_xxx()
g:volt_source_reposが non-zero なら以下を行うset rtp+=$VOLTPATH/repos/<repos>:so $VOLTPATH/repos/<repos>/plugin/**/*.vim- 警告を出す (
[WARN] Please write "packadd volt" in your vimrc.[WARN] Load plugins directly... (very slow)) autocmd VimEnter * call s:config_xxx()
「profile 機能を使うユーザは書かなくてもいい、けど profile 機能を使わないユーザは書かないとダメ」みたいになりますが、
volt profile newした後にpackadd voltを書き忘れる事故が発生しそうなので自動で書いといて欲しいと思いますね。ふーむ確かにそれもそうですね…
{マジックコメント} packadd volt {元の }のような内容で
~/.vim/vimrcをインストールした方が良さそうですね。
すでに:packadd voltが$VOLTPATH/rc/<profile>/vimrc.vimに書かれてた場合も考慮して、2回:packadd voltが vimrc に書かれていても何もしないようにします。↑のメモを少しだけ更新しました。
volt build は現在以下の 1 の方法でプラグインを読み込んでいるが、何もわざわざコピーしなくてもいい。
いくつか方法が考えられるが、以下の 4 をデフォルトの動作としたい。
しかし Vim script のトランスパイルを考えた際にトランスパイルした Vim script を読み込むためにコピーした方が嬉しいこともある。
よって今の挙動も後々設定ファイルで選択できるようにする。ref #93
~/.vim/pack/volt/opt/<repos>に symlink を作るとbareリポジトリをサポートできないとのことですが、ディレクトリ階層はvoltで作ってやって、各ファイルのsymlinkをつくるようにしてやればできる気がします。
あと、windowsでもmklinkとかいうsymlinkを作るコマンドがあった気がしますが、それは使えないんですかね?bare リポジトリにはプラグインのファイルはないので、どこかにワークツリーを復元してそこへの symlink を作るという意味でしょうか?
ちなみにもう bare リポジトリをサポートする必要がほぼ無いと思うので、サポートを辞めてもいいかな、とは思っています。確かに Windows でも mklink を使ったり Win32API を直接呼び出すという手もありそうです。
bare リポジトリの意味をあんまりわからずにコメントしてました。コピーする元があるならそこへのsimlink作れば良いかな、と。よく考えてみるとワークツリーを復元する必要がありそうで面倒ですね。
サポート切ってしまってよいなら切るのも一つの手段だと思います。#157 で
~/.vim/pack/volt/optに symlink 貼る実装をしてみて分かったことが2つあります…- なぜか Windows で
os.Symlink()を使えないと思い込んでましたが、普通に Windows でも使えました ~/.vim/pack/volt/opt/以下に symlink を貼っても Vim の package は runtimepath に追加してくれない (無視される)
- なぜか Windows で
良いニュースがあります!
~/.vim/pack/volt/opt/以下に symlink を貼っても Vim の package は runtimepath に追加してくれない (無視される)~/.vim/pack/volt/start/じゃないから自動的に読み込まれないだけでした!!!(アホ)すみません、本件は #157 でデフォルトでシンボリックリンクを貼るようにしてとりあえずは速度改善したことと、なるべくならユーザに必要な設定を書かせたくないという理由から、閉じることにします。
ちなみに
- Windows ではジャンクション、それ以外ではシンボリックリンクを使います。
- @Warashi さんの助言通り
mklinkコマンドを起動するようにしました(Windows API でジャンクションを作るのはちょっと面倒くさい…)
- @Warashi さんの助言通り
- bare リポジトリの場合はシンボリックリンクを作成するのではなく以前通りコピーします。
$VOLTPATH/config.tomlに以下のように書くと以前のシンボリックリンクを貼らない挙動に戻ります。
[build] strategy = "copy"
- Windows ではジャンクション、それ以外ではシンボリックリンクを使います。
TL;DR
Volt の仕様変更で vimrc に
:packadd voltと書いてもらうようにしたいです。理由
これまで Volt はわざわざ vimrc に何も書かなくても使えるように
~/volt/repos/<repos>から~/.vim/pack/opt/<repos>にファイルをコピーしてました。しかしこの方法だと当然 Volt でインストールするたびにファイルコピーが走って少し待たされることになります。
特に Dropbox で
~/.vimをまるごと共有してたり、アンチウイルスソフト等がファイル監視してる環境だと遅くなります。そこでせめてユーザに
:packadd voltを vimrc に書いてもらうことにしました。:packadd voltによりプラグインのパス ($VOLTPATH/repos/<repos>) が rtp に追加され、プラグインの設定 (plugconf) も読み込まれるようになります。