rake でなくてもいいんだ。Rakefile を書いてみたかっただけなんだ。
複数の環境(windows(cygwin) × 3 , mac)で vim 環境の同期を取りたい場合に検討が必要なもの。
- vimrc , gvimrc
- vimonline に登録されているフォルダ分割されている plugin
- vimonline に登録されている vba
- そのへんにアップされているフォルダ分割されている plugin
- そのへんにアップされている vba
- github に登録されている plugin
正直、vba がいちばんうざい。github を使ってどう管理するか。今のフォルダ構成。
.vim |-- README |-- Rakefile |-- source.list |-- bin |-- autoload |-- backup |-- colors |-- dict |-- doc |-- ftplugin |-- indent |-- plugin |-- gitplugins | |-- deleteme | |-- fakecygpty | |-- git-vim | |-- hatena-vim | |-- lingr-vim | |-- neocomplcache | |-- quickrun | |-- unite.vim | |-- vim-altercmd | |-- vim-rails | |-- vimfiler | |-- vimproc | `-- vimshell |-- plugins | |-- refe | |-- restart | |-- scratch | |-- vim-fuzzyfinder | `-- vim-l9 |-- proc | |-- cygwin | | `-- proc.dll | |-- mac | | `-- proc.so | `-- windows | `-- proc.dll |-- rc | |-- gvimrc | `-- vimrc |-- snippets |-- swp `-- syntax
.vimrc の runtimepath 設定
set runtimepath+=~/.vim set runtimepath+=~/.vim/plugins/* set runtimepath+=~/.vim/gitplugins/* let g:vimball_home = "~/.vim"
vimrc , gvimrc
rc フォルダに登録して自分のリポジトリで管理。環境ごとに個別の設定が必要な場合は個別の設定ファイルを用意して vimrc から読み込ませる。
if filereadable($HOME . '/.vimrc_secret') source ~/.vimrc_secret endif
.vimrc_local って名前の方がいいと思うけど、もともとパスワードを保存していた名残。
vimonline に登録されているフォルダ分割されているスクリプト
plugins フォルダ配下に登録して自分のリポジトリで管理。最新版があった場合は手動で上書きしてコミット。最新版が出ても検知しづらいのが難点。
vimonline に登録されている vba
正直爆発して欲しい。g:vimball_home に .vim を指定しているので、autoload、plugin、syntax といったフォルダに自動展開される。基本的にそのままコミットして自分のリポジトリで管理。ファイル数が多い場合は plugins フォルダ配下に専用フォルダを作って手動配置。めんどくさい。
そのへんにアップされているフォルダ分割されている plugin
plugins フォルダ配下に登録して自分のリポジトリで管理。最新版があった場合は手動で上書きしてコミット。最新版が出ても検知しづらいのが難点。
そのへんにアップされている vba
爆発してほしい。vimonline の vba と同様
github に登録されている plugin
自分のリポジトリ配下に他人のリポジトリをコミットすることはできないので、gitplugins ディレクトリ配下に github から clone して配置。一個ずつ pull するのがめんどいので 全部 pull してくれるバッチを書いた。
まとめて rake
ここまできて、各環境ごとに入れている github の plugin を同期できないことに気がつく。ある端末に入ってるプラグインが別の端末に入ってなかったり。
解決策として git のリポジトリを書いた source.list を作って、該当の plugin が gitplugins フォルダ配下に無い場合は clone 、有る場合は pull する Rakefile を書いた。ついでに、リポジトリの最新化も入れた。ごりごりの Ruby script だけど・・・。
# -*- coding: utf-8 -*- task :default => "all_update" task :all_update => [:pull_vimfiles , :clone_github , :update_github] do end task :pull_vimfiles do puts "" puts ">>> pull vimfiles ..." puts `git pull` end task :clone_github do puts "" puts ">>> check github repositories ..." f = open("source.list" , "r") f.read.each_line do |line| line.chomp! path = "./gitplugins/#{line.split(/\//)[-1]}".sub(/\.git/ , "") if File.exist?(path) puts "#{path} ... ok" else puts "#{path} ... no" Dir.chdir("gitplugins") `git clone #{line}` Dir.chdir("..") end end f.close end task :update_github do puts "" puts ">>> pull github repositories ..." Dir.chdir("gitplugins") Dir.glob("*") do |d| next unless File.directory? d Dir.chdir(d) puts "" puts "pull #{d} ..." puts `git pull` Dir.chdir("..") end Dir.chdir("..") end
これで、毎朝 rake をするだけで家で作った環境を会社ですぐに同期することができるようになって超便利!
次は vimonline に登録されている plugin の同期をどうにかしたいと思っている。