目的と方針
これまではサクラエディタとかSublime Textを使ってきたけど、仕事でLinuxをCUIベースで使うことが多くなってきたので、色んな環境で使えるVimに慣れていきたい。
設定ファイルをGitHubで管理して、どこでもgit clone
と少しの手間だけで同じ環境が使えるようになるといいな。
利用環境
Mac
自宅用。MacVim KaoriYa版を使用。
設定は基本的にここで作って、他で流用する感じ。
Windows
自宅用サブ・職場用。gVim KaoriYa版を使用。
職場がシンボリックリンクを使えない環境なので、どうしてやろうか検討中。
Linux
職場のサーバー様お世話用。どれを使うべきかよく分からないので、yum
とかで落ちてくるものをそのまま使う予定。
色んな環境を行ったり来たりするので、最初にgit clone
するだけで済ませたい。
ディレクトリ構成
~/dotfiles
├── .git
├── .gitignore
├── .vim
│ ├── bundle
│ └── userautoload
│ ├── basic.vim
│ └── neobundle.vim
└── .vimrc
- HOME配下にdotfilesディレクトリを作り、そこをGitHubと同期する。
- .vim/bundleは同期しないように.gitignoreに書いておく。
- Vimから見つけられるように、HOME直下にシンボリックリンクを作る。
$ ln -s ~/dotfiles/.vim
$ ln -s ~/dotfiles/.vimrc
Windows版のみ
Windows版はドットファイルが扱いづらい関係で、「.vimrc」の代わりに「_vimrc」になっていたりする。
シンボリックリンクに「_vimrc」って名前を付けてもいいんだけど、今のところは両方のファイルを使い分ける方針に。
「.vimrc」を機能ごとに分割するので、「.vimrc」そのものにはほとんど設定が残らない予定だし、だったらWindowsの機種依存な部分を「_vimrc」に切り出してしまえという考え。
.vimrcの分割
「.vim/userautoload」に、「.vimrc」を機能ごとに分割したファイルを入れていく。拡張子は.vim。
set runtimepath+=~/.vim/
runtime! userautoload/*.vim
プラグイン管理
Shougo / neobundle.vim
NeoBundleの導入
vimのプラグイン管理はNeoBundleで行う。
.vim/bundle配下にプラグインを入れる。
他のプラグインはNeoBundleが管理してくれるけど、NeoBundle自身はさすがに無理なのでGitHubからCloneしてくる。
$ mkdir -p ~/.vim/bundle
$ git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
neobundle.vimに設定を入れて、.vimrc分割の動作確認も兼ねる。
とりあえず最初に、見た目にも分かりやすいNERD-treeを入れてみる。
Vimの基本設定
基本というか、Vim本体の設定。
vimrcの種類
一番よく使う「.vimrc」以外にも、設定ファイルと呼べるものはある。
- .vimrc ユーザー用設定。HOME直下に配置。
- .gvimrc ユーザー用設定その2。GUI版を使うときは、こちらも読み込まれる。
- vimrc 全ユーザー共通設定。あまり触らない。
- gvimrc 全ユーザー共通設定その2。あまり触らない。
大事なのが「.vimrc」と「.gvimrc」の使い分け。
CUI版は「.vimrc」だけ、GUI版は両方読み込むので、「.gvimrc」にはGUI版のみに該当する項目を書く。
逆に、CUIとGUIの両方に該当するような設定は、必ず「.vimrc」の方に書くようにする。
両方に該当して、かつプラットフォームに依存しないような設定は、分割先の「basic.vim」に書く。
basic.vim
可能なかぎりVim本体の設定はここへ。
vimエディタ・スターターマニュアル #8 (設定ファイル)
このページのサンプル設定を使って作成。
あとで見ても自分が理解できるように、コメントは消さない。
また、自分が使わない設定であっても、行全体を消すのではなく、コメントアウトして残しておく。
NeoBundleの使い方
NeoBundleの初期設定
「.vimrc」を分割しているので、「neobundle.vim」に書く。
if has('vim_starting')
set nocompatible " Be iMproved
" Required:
set runtimepath+=~/.vim/bundle/neobundle.vim/
endif
" Required:
call neobundle#rc(expand('~/.vim/bundle/'))
" Let NeoBundle manage NeoBundle
" Required:
NeoBundleFetch 'Shougo/neobundle.vim'
" My Bundles here:
NeoBundle 'scrooloose/nerdtree'
" Required:
filetype plugin indent on
" If there are uninstalled bundles found on startup,
" this will conveniently prompt you to install them.
NeoBundleCheck
基本的なところはNeoBundleのREADMEに書いてあるものをそのまま利用。
プラグインの追加
「neobundle.vim」上にNeoBundle 'プラグインのパス'
の形で列挙していく。
設定の一番最後にあるNeoBundleCheck
で、追加したプラグインがあればインストールされる。
一時的に使わなくなったやつは、行頭に"
つけてコメントアウトしておく。
プラグインの削除
↑でコメントアウトしたプラグインは無効になるけど、実体のファイルは残ったままになってしまう。
Vim上で:NeoBundleClean
を実行すると完全にアンインストールできる。
プラグインの更新
Vim上で:NeoBundleUpdate
。
NeoBundleの状況確認
Vim上で:NeoBundleList
とか:NeoBundleLog
とか。
ちゃんとプラグインが入っているか不安になったときに。
その他
分割vimrcのロード順
その後いろいろプラグインを入れたり設定をいじったりしているうちに、一部でエラーが出るようになってしまった。
honeniq$ vim
Error detected while processing /Users/honeniq/dotfiles/.vim/userautoload/keybind.vim:
line 34:
E117: Unknown function: submode#enter_with
line 35:
E117: Unknown function: submode#enter_with
line 36:
E117: Unknown function: submode#enter_with
line 37:
E117: Unknown function: submode#enter_with
line 38:
E117: Unknown function: submode#map
line 39:
E117: Unknown function: submode#map
line 40:
E117: Unknown function: submode#map
line 41:
E117: Unknown function: submode#map
Press ENTER or type command to continue
Vimの便利な画面分割&タブページと、それを更に便利にする方法
この記事のキーバインドを真似してたら出たエラー。
原因は、*.vimのロード順だった模様。
NeoBundle関係を「neobundle.vim」に、キーバインド関係を「keybind.vim」に書いてたんだけど、ファイル名的に「keybind.vim」の方が「neobundle.vim」よりも先に読み込まれるので、プラグインのロード前にプラグイン内のメソッドを使うキーバインドを指定することになっていた。ただ、エラーが出ても該当のキーバインド自体は効いていたので、エラー箇所が弾かれるわけではないのかな?
「neobundle.vim」の頭にアンダーバーをつけて「_neobundle.vim」にすることで解決。
インストールスクリプトを入れた
新しい環境でVimを使うようになったので、.vimrc等のシンボリックリンクを作る作業が面倒になってきた。のでスクリプト化した。
*nix用
OSXもこれでOK。
#!/bin/sh
ln -sf ~/dotfiles/.vimrc ~/.vimrc
ln -sf ~/dotfiles/.gvimrc ~/.gvimrc
ln -sf ~/dotfiles/.vim ~/.vim
mkdir ~/.vim/tmp
git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
Windows用
mklink %HOMEPATH%"\.vimrc" %HOMEPATH%"\dotfiles\.vimrc"
mklink %HOMEPATH%"\.gvimrc" %HOMEPATH%"\dotfiles\.gvimrc"
mklink /D %HOMEPATH%"\.vim" %HOMEPATH%"\dotfiles\.vim"
mkdir %HOMEPATH%"\.vimrc\tmp"
git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
exit 0
スワップ・バックアップファイルの置き場所
デフォルトでは編集中ファイルと同じ場所に置かれて鬱陶しいので、~/.vim/tmp/
を新しく作ってそこにまとめるようにした。
set directory=~/.vim/tmp
set backupdir=~/.vim/tmp
set undodir=~/.vim/tmp