vimでの設定ファイルの考え方
-
対象者
:結局vimってどうやって設定すりゃいいんよ?って人、あるいは私と同じvim初心者 -
前提知識
:vimrcに関する知識少々 -
必要なパッケージ
:vim -
終着点
:楽々vim環境整備♪
runtimepathが重要
vimのファイル読込においてruntimepathが重要な役割を果たします。
VimのDocumentationにはruntimepath内の特定のファイルが順繰り読み込まれることが明記されています。
さっそくruntimepath設定を見る
:set runtimepath
私のruntimepath(※ NeoBundle分は除く,Windows)
:runtimepath=~/.vim/,~/vimfiles,C:\app\Vim/vimfiles,C:\app\Vim,C:\app\Vim/vimfiles/after,~/vimfiles/after
vimやWindows以外の大半のシステムにおいて~(チルダ)はホームディレクトリを指します。
これはWindows7ならC:\Users\user_name
,Linuxなら/home/user_name
を指しているかと思います。
ここから分かるように設定ファイルはホームディレクトリを基準に配置するのが良いといえるでしょう。
検索されるファイルとディレクトリは以下の通りです。
- filetype.vim ファイル名によるfiletypeの決定
- scripts.vim ファイルの内容によるfiletypeの決定
- autoload/ 自動的に読み込まれるスクリプト
- colors/ カラースキーマの定義
- compiler/ コンパイラ定義ファイル
- doc/ ヘルプドキュメント
- ftplugin/ ファイルタイプ別のプラグイン
- ftdetect/ ファイルタイプを判別するファイル
- indent/ インデントの設定
- keymap/ キーマップの定義
- lang/ メニューの翻訳(GVim)
- menu.vim メニューの設定(GVim)
- plugin/ プラグインスクリプト
- print/ 印刷用
- spell/ スペルチェック用
- syntax/ 文法
- tutor/ チュートリアル
Windowsはエクスプローラーから.(ドット)で始まるファイルやフォルダは作れないため、コマンドを使用して.vimrcを作成することをおススメします。
_vimrc
は削除して.vimrc
に追記してね。
> echo ""this is .vimrc >> .vimrc
if has('win32') >> .vimrc
set runtimepath^=~/.vim/ >> .vimrc
endif
結局どう設定するか
~/.vim以下に設定したいディレクトリを作成して各種ファイルを配置します。
私はcolors, ftdetect, indentを定義・設定しています。
dotfilesを使った管理を行うとシステム間の同期が更に楽です。
ただしindentについてはその後に読み込まれるpluginなどのindentディレクトリ内の内容によっては設定が上書きされる可能性があります。
自分で記載したindent/拡張子.vim
での設定が上書きされるのを防ぎたい場合、大抵は~/.vim/after/indent
内にいれることによって解決するかと思います。
Windowsに限って~/.vim
同様runtimepath
に~/.vim/after
を追加する必要があります。
$ cd ~ # windows -> cd %HOMEPATH%
$ mkdir .vim
$ cd .vim
$ mkdir colors ftdetect, indent
-
colors
内には自分でカスタマイズしたカラースキーマ定義ファイルを入れます。 -
ftdetect
内には拡張子.vimファイルを入れて、拡張子ごとのファイルタイプ判別をカスタマイズします。 -
indent
内には拡張子.vimファイルを入れて、ファイルタイプ毎のインデント設定をカスタマイズします。
:echo $VIM
で表示されるディレクトリ以下のファイルを編集することなかれ、vimをインストールするたびにまた設定しなきゃいけなくなりまっせ。
結果的にどうなるのか
ftdetectではcls拡張子の時は判定によってはファイルタイプをvbに変えたいとか。
indentではファイルタイプごとにインデントを変更したいとかが実現できます。
例えば通常時はtabで4文字分のホワイトスペースを入れたいけど、ruby系のファイルを編集する時は 2文字分にするとか。
実例というよりは私の設定
それぞれのディレクトリに置いてね。
- colors
desert.vimを改造したものを使っています。
自分好みにカスタマイズしたい人はこれがオススメです。
- ftdetect
例えば.clsのファイルの内容によってはファイルタイプをvbにしたい場合。(if文の最初の条件をfiletype.vimに更に追加した感じ)
やっている事自体はファイルの内容に特定の文字列が含まれていればファイルタイプはvbにするよって感じです。
au BufRead,BufNewFile *.cls
\ if getline(1).getline(2).getline(3).getline(4).getline(5).getline(6).getline(7).getline(8).getline(9).getline(10) =~? 'VB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)' |
\ set filetype=vb |
\ elseif getline(1) =~ '^%' |
\ set filetype=tex |
\ elseif getline(1)[0] == '#' && getline(1) =~ 'rexx' |
\ set filetype=rexx |
\ else |
\ set filetype=st |
\ endif
- indent
例えばファイルタイプがrubyのインデントを2文字にしたい場合
setlocal expandtab
setlocal shiftwidth=2
setlocal softtabstop=2
setlocal tabstop=2
setlocal autoindent
こんな感じです。
公開されているプラグインのindent
などではb:did_indent
という変数によって、開いているvimバッファ内でインデントについて設定済みかどうかを判定させています。
今回はvimのちょこっとカスタマイズにこのファイルを利用しているだけですのでb:did_indent
の記載がありません。
なおこのファイルはindent
ディレクトリ内の内容としては圧倒的に設定が欠けていますので、(プラグインを公開している方でこのことについて理解が無い方はおそらくいないかと思いますが)プラグインと一緒に公開してしまわないように...。
実例の他には
がりがりとプラグインを書く人なら
autoload
やplugin
にファイルを追加します。
また私みたいなライトユーザが触るとしたらkeymap
やGVimを使う人でしたらmenu.vim
などでしょうか。
もし、自作したpluginをgithubで公開するような人なら説明文をdoc
に入れておくと親切ですね。