読者です 読者をやめる 読者になる 読者になる

ITは遊び

毎日パソコンのことばかり考えてる

Mac、Linux、Winでvimrcを共通管理してみた

vim

自宅でMac、Linux、会社でWinを使うようになって、環境毎に設定や、プラグインを管理したりするのが大変になってきた。前の休みにvimrcのSVNによる集中管理を実施し、今週運用してみて良い感じになってきたので、方法を晒してみる。

メインポリシーは以下のとおり。

  • プラグインは基本的にVundleで管理する
  • OSの識別、SVNディレクトリは~/.vimrcに書く
  • 日本語問題がよくわからないけど回避できるので、香り屋さんのvimrcを使わせてもらう
  • ~/.vimにチェックアウトするのではなく、別のディレクトリにチェックアウトする(一部プラグインが~/.vimに書き込みをするため)

まず、リポジトリ構成は以下のとおりである。

  • trunk/
    • vimrc.vim : GUICUIの共通設定が書かれた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。恥ずかしくないだけ晒す。

"-----------------------------------------------------------
"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環境に自分の設定するには以下の手順だけでよくなった。

  1. リポジトリを任意のディレクトリにチェックアウトする
  2. defaultVimrc.vim、defaultGvimrc.vimを~/.vimrc、~/.gvimrcにコピーして、ちょこっと設定を書き換える
  3. Vimを起動して、":BundleInstall"コマンドを実行
  4. 必要なプラグイン、環境が整ったvimが完成!

実際にすごく便利になった。よろしければ参考に。