netupvim で Windows でも最新の Vim を追いかけよう
これは Vim Advent Calendar 2017 その2 の21日目の記事です。
内容は上記リポジトリの README.md のパクリです。 netupvim 便利だよ!って事が言いたかった。
序文
Windows で Vim を使っているとふと最新の Vim を欲しい時があります。 そんな時 netupvim があればダブルクリックで最新の Vim を取得できます。
最新の Vim をサクッと持ってくる
リリースから以下のファイルを含むフォルダを解凍し、そのまま UPDATE.bat を実行するだけです。
- netupvim.exe
- UPDATE.bat
- RESTORE.bat
…が、ちょっと待ってください。 今回は最新版の Vim が欲しいのでしたが、普通に実行すると少し古めの Kaoriya の安定版がダウンロードされてきてしまいます。
netupvim は
- Kaoriya 安定版
- Kaoriya 開発版
- Kaoriya 人柱版
- 本家版 (vim/vim-win32-installer)
のいずれかに対応しています。 このうち 2~4 を使いたい場合は netupvim.ini を作り、それぞれ以下のように記述します(README からの引用です)。
# 開発版 source = "develop"
# 人柱版 source = "canary"
# vim/vim-win32-installer 版 source = "vim.org"
2つ注意点としては
- これらの版はあくまでも開発・実験用であり、予告なく不安定な動作の Vim が配信され る可能性があることに留意してください。
- また、一度 netupvim を実行した後で
source
プロパティを変更した場合の動作は未 定義です。直近でサポートする予定はありません。
なので先ほど実行してしまいましたが、実行後に変更はしないようにしましょう。
例えば
- Kaoriya 安定版
- Kaoriya 開発版
- Kaoriya 人柱版
- 本家版 (vim/vim-win32-installer)
みたいな感じでそれぞれのフォルダを分けて置いとくと良さそうです。
すでにダウンロードした Kaoriya Vim や本家 Vim を最新化したい
安心してください。 netupvim はダウンロードだけでなくアップデートにも対応しています。 というか記事の都合上ダウンロードを先に紹介してしまいましたが、名前からも分かる通り本来アップデートのためのツールです。
先ほど解凍した以下のファイルを vim.exe と同じフォルダにぶち込みます。
- netupvim.exe
- UPDATE.bat
- RESTORE.bat
Kaoriya 安定版ならそのまま実行するだけですが、その他のバージョンの場合先ほど書いた netupvim.ini を作るのを忘れずに。 作ったら UPDATE.bat で一発更新。簡単ですね。
netupvim の更新
先ほどの GIF で気づいた方もいるでしょうが、勝手に更新されます。やっぱり本当にダブルクリックだけで全てが最新化されます。便利。
Vim 8 時代のがんばらないプラグイン管理のすすめ
これは Vim Advent Calendar 2017 の20日目の記事です。
皆さん Vim しておられるでしょうか。 Yes と答えた方、プラグインマネージャーは使っていますか?
巷では Vim のプラグイン管理にはプラグインマネージャーを入れる必要があるかのような勢いで「まずプラグインマネージャーを入れる」といった記事が沢山ありますが、 個人的にはプラグインマネージャーより Vim 標準で使える パッケージ機能 をまず試してみてほしいです。
この機能はざっくり言うと「ディレクトリ以下に置いたプラグインを読み込む」ほぼそれだけですが、必要十分な機能は揃っていると思います。 またちょっとの工夫であなたの使っているプラグインマネージャーの機能も代替できるかもしれません。 もしかしたらプラグインマネージャーほどの多機能さは必要ないことに気付くかもしれませんよ?
本記事ではそんな多機能は求めてない方やミニマリストの方におすすめなパッケージ機能に関して、Vim 8 リリースから1年経った今だからこそ紹介します。
必須環境
- Vim 8
Vim 8 リリースは 2016年9月12日なので、もしかしたらすでにインストール済みの Vim が 8 だったという方もいるでしょう。 Vim 8 は Vim プラグイン開発に便利な機能がかなり沢山追加されました。 そのためすでに Vim 8 以降でしか使えない機能を使ったプラグインが多数公開されていますので、 ぜひアップグレードすることをお勧めします。
パッケージ機能のススメ
まずはパッケージ機能について解説します。 と思ったのですが既に id:thinca さんがパッケージ機能についての解説記事を書いてくれているのでそちらをご参照ください。
Vim 8.0 Advent Calendar 6 日目 パッケージ - Qiita
要約すると
~/.vim/pack/mypackage/start/myplugin/
等にプラグインのディレクトリを置くと、起動時に runtimepath に追加されロードされる (mypackage
,myplugin
は任意のディレクトリ名)~/.vim/pack/mypackage/opt/myplugin/
にプラグインのディレクトリを置くと、:packadd myplugin
とすることでプラグインをロードできる- このディレクトリは起動時に runtimepath に追加されないので、任意のタイミングでロードできる
このようにパッケージ機能はとても基本的な機能しか提供しません。 しかしこれだけでプラグイン管理に必要な大体の機能は揃っています。
例えば上記のディレクトリを作ってプラグインを git clone
等でダウンロードすれば
それだけでプラグインが起動時に読み込まれるということです。
$ mkdir -p ~/.vim/pack/mypackage/start/ $ cd ~/.vim/pack/mypackage/start/ $ git clone ...
そう、Vim 8 なら無理にプラグインマネージャーを使わずとも簡単にプラグインを読み込めるのです。
更新するのだって簡単で、プラグインのリポジトリで git pull
すればいいだけです。
私が既存のプラグインマネージャーで疑問に感じている点として、yum や apt といった OS のパッケージマネージャではコマンドラインからコマンド一発でインストールできるのに、なぜ現在多くの Vim プラグインマネージャではわざわざインストールするのに vimrc を変更してインストール、という2ステップが必要なのか?というのがあります。 それにプラグインを削除する時は vimrc の記述や、(もし書いてたら)プラグインの設定も同時に削除しなければなりません。 なんだか管理を余計に複雑にしていませんか?
パッケージ機能で不十分な点
ここまで読んで「自分にとってはパッケージ機能で十分だ」と感じた人もいるでしょう。 しかしパッケージ機能だけでは足りない点がいくつかあります。 例えば次のような機能です。
- プラグインのバージョンを固定したい
- 別 PC で全く同じ環境を手間なく復元したい
- 一括アップデートしたい
- 遅延ロードしたい
- 特定のファイルタイプ設定時や Ex コマンドを実行したタイミングでプラグインをロードしたい
これらの問題を解消するためにはプラグインマネージャーを使う必要があるでしょう。 私は現在 Volt と呼ばれるコマンドラインから扱う Go 製の Vim プラグインマネージャー *1 を開発中で、上記の問題点はもちろん全て解決されています。
しかし本記事では引き続きプラグインマネージャーではなく、あえて Vim 標準のパッケージ機能と運用の工夫のみ で上記の問題を解消する方法について解説します。
Git で設定ファイルとプラグインを管理する
まず、vimrc とプラグインを Git submodule で管理する方法を解説します。
これにより Vim プラグインを特定のバージョンにロックすることができ、いつでもどこからでも git clone --recursive
で .vim ディレクトリを持ってこれるようになります。
~/.vim
を Git で管理する
既に管理してる方も多いとは思いますが、まずは ~/.vim
ディレクトリを Git で管理します。
今回は ~/.vim
ディレクトリそのものを Git リポジトリ化してしまいましょう。
ちなみに私は dotfiles というディレクトリにホームディレクトリの設定ファイル・ディレクトリを突っ込んで管理しています (~/.vim
には symlink を貼っています)。
$ cd ~/.vim $ git init 以下はお好みで管理対象を変えてください。 今回は手抜きで全部突っ込みます。 $ curl -L https://raw.githubusercontent.com/github/gitignore/master/Global/Vim.gitignore -o .gitignore $ git add -A $ git commit -m 'Initial commit'
プラグインを git submodule で管理する
submodule として Vim プラグインを追加します。
以下は caw.vim を追加する例です。
pack/mypackage/start/caw.vim
の mypackage
や caw.vim
は自由に変えて構いません。
$ cd ~/.vim $ mkdir -p pack/mypackage/start $ git submodule add https://github.com/tyru/caw.vim pack/mypackage/start/caw.vim $ git commit -m 'Add caw.vim plugin'
リポジトリを GitHub で公開する
リポジトリを作成する方法については沢山記事があるのでググってください。
一括アップデート
管理している Vim プラグインをリモートの最新版に更新するには、
$ git submodule foreach git pull $ git commit -a -m 'Update all vim plugins'
とします。
git commit
しないと次回 git clone --recursive
でリポジトリを持ってきた時に古いバージョンのままなので、ちゃんとコミットしておきましょう。
filetype や Ex コマンド実行時に初めてプラグインをロードする (遅延ロード)
本項ではプラグインの遅延ロードをパッケージ機能で実現する方法を解説します。
遅延ロードとは?
dein.vim などのプラグインマネージャーには特定のファイルタイプになった時や特定の Ex コマンドを実行した時に初めてプラグインをロードする機能があります。 これによって
が期待できます。
パッケージ機能での遅延ロード
パッケージ機能でこれを行うには
~/.vim/pack/mypackage/opt/
ディレクトリに入れ、- 任意の
FileType
イベントやCmdUndefined
イベントで:packadd
を実行しますFileType
イベント:ファイルタイプ設定時CmdUndefined
イベント:Ex コマンド実行時にコマンドが見つからなかった場合
すると :packadd
によりプラグインがロードされます。
例がないと分かりにくいと思うので、例を載せます。 以下は vimrc に記載する例です。
function! s:config_fugitive() " プラグインの設定 " プラグインのロード packadd vim-fugitive endfunction augroup lazy-load autocmd! autocmd FileType vim call s:config_xxx() augroup END
冒頭で言ったプラグインと vimrc を二重管理しなきゃならないという負担は増えますが、標準のパッケージ機能でできるという点は強みでしょう。
ちなみに Volt では上記と同じような設定を自動的にインストールすることで遅延ロードを実現しています(~/.vim/pack/volt/
以下のファイルを見てみると仕組みが分かると思います)。
【未承諾広告】Volt の紹介
ちなみにここで紹介した方法をもっと手軽にやりたい方はぜひ Volt を試してみてください。
プラグインの管理はもちろん、プラグインの設定を個別のファイルに書けたり(一時的に無効化したりアンインストールする時に楽です)、プロファイルと呼ばれる機能により複数の ~/.vim
の環境を使い分ける事が驚くほど簡単になったり、他にも様々な機能があります。
後ほどまた記事を書く予定ですが、興味があったらぜひ使ってみてください。
GitHub や BitBucket で強制的に https:// の代わりに ssh の URL を使う
git config --global url.ssh://git@github.com/.insteadOf https://github.com/
- BitBucket
git config --global url.ssh://git@bitbucket.org/.insteadOf https://bitbucket.org/
特定のユーザだけ ssh の URL を使う (2018/12/08 追記)
Any URL that starts with this value will be rewritten to start, instead, with <base>
と書いてあるので試してみたらいけたやつ。 URL のパス部分まで含めて指定もできるので、
git config --global url.git@github.com:tyru/.insteadOf https://github.com/tyru/
みたいに特定のユーザだけ ssh の URL に変えるというのもできます。
自分の場合は Vim プラグインをプラグインマネージャーで管理しているため、リポジトリをダウンロードする時に https の URL で clone される。 それをいちいち書き換えるのも面倒だなと思ってたのだけど、上記の設定で一括で指定できる。