dotfilesをgithubで管理し、Vundleを導入する

環境が新しくなったので、これを機に設定ファイル類の管理を見直してみました。
調べてみると大抵は以下のように管理されているようなので、合わせてやってみます。

  1. dotfilesをgithubで管理する(今回は.zshrcと.vimrcです)
  2. vimプラグインをvundleで管理する

dotfilesをgithubで管理する

毎回設定ファイル等をコピーしたりするのが煩わしいので、githubで管理するようにします。
手順は以下の通りです。

# dotfilesディレクトリを作成
mkdir ~/dotfiles
cd ~/dotfiles

# dotfilesをgit管理する
git init

# 「.」ファイルをdotfilesに移動
mv ~/.zshrc ~/dotfiles/
mv ~/.vimrc ~/dotfiles/
mv ~/.vim ~/dotfiles/

ここまでで、dotfilesをgit管理下にできたと思います。
後は、dotfiles配下のファイルをホームディレクトリに対してシンボリックリンクを張ればOKです。

今回は.zshrcと.vimrcだけですが、今後dotfileが増えてくるとリンクを張るのも大変なので、リンクを張るためのMakefileを作成します。
面倒な場合は、ln -snf ~/dotfiles/.zshrc ~/などでも良いと思います。

Makefile

DOT_FILES = .zshrc .vimrc .vim

all: zsh vim 

zsh: $(foreach f, $(filter .zsh%, $(DOT_FILES)), link-dot-file-$(f))

vim: $(foreach f, $(filter .vim%, $(DOT_FILES)), link-dot-file-$(f))
  
.PHONY: clean
clean: $(foreach f, $(DOT_FILES), unlink-dot-file-$(f))
  

link-dot-file-%: %
  @echo "Create Symlink $< => $(HOME)/$<"
  @ln -snf $(CURDIR)/$< $(HOME)/$<

unlink-dot-file-%: %
  @echo "Remove Symlink $(HOME)/$<"
  @$(RM) $(HOME)/$<

使い方は以下の通りです。

make # .zshrc, .vimrc, .vimのシンボリックリンクを作成
make zsh # .zshrcのシンボリックリンクを作成
make vim # .vimrc, .vimのシンボリックリンクを作成
make clean # .zshrc, .vimrc, .vimのシンボリックリンクを削除

後は、githubにコミットするだけです。

git add ./
git commit -m 'first commit'
git push -u origin master

実際に使用する際は、git pullしてmakeを実行すればいけると思います。


vimプラグインをvundleで管理する

vimプラグインの管理は面倒なので、vundleを使用します。
RailsのBundleにインスパイアされているそう。

dotfilesはすでにgit管理下にあるので、まずvundleをsubmoduleとして追加します。

cd ~/dotfiles
git submodule add git://github.com/gmarik/vundle.git .vim/vundle.git

これでvundleが使えるので、.vimrcにvundleの設定とインストールしたいプラグインを記述します。

set nocompatible
filetype off
set rtp+=~/.vim/vundle.git/
call vundle#rc()

" プラグインを記述する
Bundle 'Shougo/neocomplcache'
Bundle 'Shougo/unite.vim'
Bundle 'pangloss/vim-javascript'
Bundle 'tpope/vim-rails'
Bundle 'vim-ruby/vim-ruby'
Bundle 'vim-scripts/surround.vim'
・・・

" Vundleの処理後、ftpluginとindentを読み込む
filetype plugin indent on

.vimrcを編集したら、vimを開き以下を実行しプラグインをインストールします。

:BundleInstall

ちなみに以下のようなコマンドもあります。

# プラグインの更新
:BundleInstall!

# プラグインの削除
# 削除の場合、.vimrcから削除し、下記コマンドを実行しましょう(bundle配下のディレクトリを削除してくれます)
:BundleClean

インストールが完了すると、~/dotfiles/.vim/bundleにプラグインが格納されます。
プラグインはいちいちgitで管理する必要はないので、.gitignoreに記述し対象外としましょう。

echo '.vim/bundle' > .gitignore

最後にgitに追加して、コミットすれば完了です。

git add ./
git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	new file:   .gitignore
#	new file:   .gitmodules
#	new file:   .vim/vundle.git
#	modified:   .vimrc

git commit -m 'install vundle'
git push -u origin master

.vimrcの細かい設定などは GitHub - tiwakawa/dotfiles: dotfiles を参照頂ければと思います。

実際に使用する際は、git pullしてmakeを実行すればいけると思います。

※ただし以下の点に注意してください。

gitから落とした直後の状態だと、submoduleであるvundleは空の状態になっていますので、
.vimrcに記述されているBundleを認識することができません。
以下のコマンドでvundleをインストールするようにしてください。

cd ~/dotfiles
git submodule init
git submodule update

これで、BundleInstall等のコマンドが実行できるようになります。

最後に困ったこと

今回、vundleを導入するタイミングでneocomplcacheをインストールしました。
これは補完をうまいことやってくれるプラグインです。

ただ、インストール後にちょっと問題が起こりました。
vimを起動し挿入モードにした途端、以下のようなエラーが発生してしまうのです。

Error detected while processing InsertEnter Auto commands for "*":
E117: Unknown function: 52_on_insert_enter

neocomplcacheのバグなのかよく分からなかったのですが、とりあえず下記ファイルの67,68行目を修正することで対応しました。

~/dotfiles/.vim/bundle/neocomplcache/autoload/neocomplcache.vim

  66 "    以下をコメントアウト
  67 "    autocmd neocomplcache InsertEnter *
  68 "          \ call s:on_insert_enter()

メッセージの通り、確かにs:on_insert_enter()関数は存在しないからなぁ。。。
何か詳細が分かる方がいたらコメント頂けると助かります(´・ω・`)

以上です。

追記します

1日で直ってましたww
- Fixed error. · Shougo/neocomplcache.vim@6032f7c · GitHub