vimでの設定ファイルの考え方
対象者
:結局vimってどうやって設定すりゃいいんよ?って人、あるいは私と同じvim初心者前提知識
:vimrcに関する知識少々必要なパッケージ
:vim終着点
:楽々vim環境整備♪
runtimepathが重要
vimのファイル読込においてruntimepathが重要な役割を果たします。
VimのDocumentationにはruntimepath内の特定のファイルが順繰り読み込まれることが明記されています。
さっそくruntimepath設定を見る
:setruntimepath
私の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
setruntimepath^=~/.vim/>> .vimrc
endif
結局どう設定するか
~/.vim以下に設定したいディレクトリを作成して各種ファイルを配置します。
私はcolors, ftdetect, indentを定義・設定しています。
dotfilesを使った管理を行うとシステム間の同期が更に楽です。
$ 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にするよって感じです。
auBufRead,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\)'|
\ setfiletype=vb|
\ elseif getline(1)=~'^%'|
\ setfiletype=tex |
\ elseif getline(1)[0] =='#'&& getline(1)=~'rexx'|
\ setfiletype=rexx |
\ else|
\ setfiletype=st|
\ endif
- indent
例えばファイルタイプがrubyのインデントを2文字にしたい場合
setlocalexpandtabsetlocalshiftwidth=2setlocalsofttabstop=2setlocaltabstop=2setlocalautoindent
こんな感じです。
実例の他には
がりがりとプラグインを書く人なら
autoload
やplugin
にファイルを追加します。
また私みたいなライトユーザが触るとしたらkeymap
やGVimを使う人でしたらmenu.vim
などでしょうか。
もし、自作したpluginをgithubで公開するような人なら説明文をdoc
に入れておくと親切ですね。