自宅でMac、Linux、会社でWinを使うようになって、環境毎に設定や、プラグインを管理したりするのが大変になってきた。前の休みにvimrcのSVNによる集中管理を実施し、今週運用してみて良い感じになってきたので、方法を晒してみる。
メインポリシーは以下のとおり。
- プラグインは基本的にVundleで管理する
- OSの識別、SVNディレクトリは~/.vimrcに書く
- 日本語問題がよくわからないけど回避できるので、香り屋さんのvimrcを使わせてもらう
- ~/.vimにチェックアウトするのではなく、別のディレクトリにチェックアウトする(一部プラグインが~/.vimに書き込みをするため)
まず、リポジトリ構成は以下のとおりである。
- trunk/
- vimrc.vim : GUIとCUIの共通設定が書かれたvimrc
- gvimrc.vim : GUIの設定が書かれたvimrc
- defaultVimrc.vim : ~/.vimrcにコピーするファイル
- defaultGvimrc.vim : ~/.gvimrcにコピーするファイル
- kaoriya.vim : 香り屋さんのにデフォルトで入っているvimrc
- plugins/ : Vundleで管理できないプラグイン、もしくは自作プラグインを入れておくディレクトリ
- kaoriya/ : 香り屋さんの配布物に入っていたプラグインを入れておく
- Vundle/ : Vundleプラグイン。Vundle自体もVundleで管理するといいと言われるが、チェックアウト後にVundleだけダウンロードしに行くのが面倒だったので、リポジトリに混ぜてしまった。
- syntax/ : オリジナルシンタックスを入れておく
これを使うには、defaultVimrc.vimと、defaultGvimrc.vimをまず、~/.vimrc、~/.gvimrcにコピーするのだが、それぞれの内容は以下のとおりである。
- defaultVimrc.vim
"~/.vimrcにこれを上書きしよう! "OS名 let g:j74OsName = 'Mac' "let g:j74OsName = 'Win' "let g:j74OsName = 'Linux' "リポジトリをチェックアウトしたディレクトリ let g:j74VimSvnPath = '~/other/MySettings/vim/' "let g:j74VimSvnPath = 'C:/Documents and Settings/morimoto/My Documents/MySettings/vim/' "ユーザディレクトリの.vimの場所(ほぼVundle用) let g:j74UserDirectory = '~/.vim/' "let g:j74UserDirectory = "C:/Documents\ and\ Settings/morimoto/.vim/" "リポジトリ管理のvimrcを開く execute 'source ' . g:j74VimSvnPath . 'vimrc.vim'
探せばvimrcでOSを識別する方法などもあったのだが、その識別法を洗練させていくよりも、OSくらい書いてしまえとなった。
ユーザディレクトリの~/.vimの取得法がわからず、ここで設定することにしている。
defaultGvimrc.vimは、本当にgvimrc.vimを呼び出すだけ。
- defaultGvimrc.vim
"リポジトリ管理のgvimrcを開く execute 'source ' . g:j74VimSvnPath . 'gvimrc.vim'
次に、集中管理するvimrc.vim。恥ずかしくないだけ晒す。
- vimrc.vim
"----------------------------------------------------------- "SVN管理の.vim的ディレクトリ 2012/01/20 "VimSvnPathをruntimepathへ追加 let &runtimepath = &runtimepath.','.g:j74VimSvnPath "VimSvnPath/plugins下のディレクトリをruntimepathへ追加 for path in split(glob(g:j74VimSvnPath.'plugins/*'), '\n') if isdirectory(path) | let &runtimepath = &runtimepath.','.path | end endfor "----------------------------------------------------------- "Mac以外では、香り屋さんのvimを読み込む if g:j74OsName != 'Mac' execute 'source ' . g:j74VimSvnPath . '/kaoriya.vim' endif "----------------------------------------------------------- " Vundleによるプラグイン管理 2011-11-13 " Vundle管理するvimディレクトリを作る if exists('g:j74UserDirectory') == 1 execute '"set rtp+=' . g:j74UserDirectory . 'bundle/"' else echo 'g:j74UserDirectoryがないじ。エラー出るがいや。' endif call vundle#rc() "インストールコマンド "BundleInstall "インストール/更新 "BundleInstall! "githubの場合、URLにあるのをそのまま書く Bundle 'tpope/vim-pathogen' "不要かもしれないが、"一応入ってる Bundle 'matchit.zip' "%で当たるのを増やしてくれるやつ Bundle 'autofmt' "自動整形。使ってるかわからん。 Bundle 'SQLUtilities' ":SQLUFormat で、SQLを整形する Bundle 'vcscommand.vim' "vim上でSVNコマンドを実行 2012/01/23 "http://blog.blueblack.net/item_144 ":VCSCommitとか。 "plugin追加後は、以下でhelptagsの追加をする。不要かも。 ":call pathogen#helptags() "----------------------------------------------------------- "標準設定系 "標準のタブ幅 set ts=4 set sw=4 "自動改行を抑制 set tw=0 "バックアップを自動作成しない set nobackup "----------------------------------------------------------- "キーマップ "C-Sで保存する 2012/01/23 map <C-S> :w<CR>
では一部ずつ。
"SVN管理の.vim的ディレクトリ 2012/01/20 "VimSvnPathをruntimepathへ追加 let &runtimepath = &runtimepath.','.g:j74VimSvnPath "VimSvnPath/plugins下のディレクトリをruntimepathへ追加 for path in split(glob(g:j74VimSvnPath.'plugins/*'), '\n') if isdirectory(path) | let &runtimepath = &runtimepath.','.path | end endfor
ここでは、リポジトリ内のpluginsディレクトリ内のプラグインに全てパスを通している。これでVundle管理されていないプラグインが使えるようになる。また、Vundleもこれで使えるようになる。
"Mac以外では、香り屋さんのvimを読み込む if g:j74OsName != 'Mac' execute 'source ' . g:j74VimSvnPath . '/kaoriya.vim' endif
日本語対策として香り屋さんのvimを取り込む。自分がVimを使い始めてたのが香り屋さんのVimだったため、これがデフォルトになっている。MacではMacVim.appを使っており、これはMacVim.app内にMac用に改変した香り屋さんのVimが既に入っているため、不要である。
" Vundleによるプラグイン管理 2011-11-13 " Vundle管理するvimディレクトリを作る if exists('g:j74UserDirectory') == 1 execute '"set rtp+=' . g:j74UserDirectory . 'bundle/"' else echo 'g:j74UserDirectoryがないじ。エラー出るがいや。' endif call vundle#rc() "インストールコマンド "BundleInstall "インストール/更新 "BundleInstall! "githubの場合、URLにあるのをそのまま書く Bundle 'tpope/vim-pathogen' "不要かもしれないが、"一応入ってる Bundle 'matchit.zip' "%で当たるのを増やしてくれるやつ Bundle 'autofmt' "自動整形。使ってるかわからん。 Bundle 'SQLUtilities' ":SQLUFormat で、SQLを整形する Bundle 'vcscommand.vim' "vim上でSVNコマンドを実行 2012/01/23 "http://blog.blueblack.net/item_144 ":VCSCommitとか。 "plugin追加後は、以下でhelptagsの追加をする ":call pathogen#helptags()
Vundle用のパスを通す。このおかげで、多くのモジュールは、以下のように書いて、:BundleInstallとコマンドするだけで導入できる。
Bundle 'GitHubのパス' Bundle 'Vim.orgのタイトル'
自分の場合は、Bundle *とか書いたあとに、簡単な使い方をメモしておいたりしている。
残りは、標準のものや、各プラグインの設定につき省略。
これにより、新しいvim環境に自分の設定するには以下の手順だけでよくなった。
- リポジトリを任意のディレクトリにチェックアウトする
- defaultVimrc.vim、defaultGvimrc.vimを~/.vimrc、~/.gvimrcにコピーして、ちょこっと設定を書き換える
- Vimを起動して、":BundleInstall"コマンドを実行
- 必要なプラグイン、環境が整ったvimが完成!
実際にすごく便利になった。よろしければ参考に。