Edited at

vimで読み込まれるファイルについて

More than 5 years have passed since last update.


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に追記してね。



.vimrcがある人は不要

> echo ""this is .vimrc >> .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にするよって感じです。



cls.vim

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文字にしたい場合



ruby.vim

setlocal expandtab

setlocal shiftwidth=2
setlocal softtabstop=2
setlocal tabstop=2
setlocal autoindent


こんな感じです。

公開されているプラグインのindentなどではb:did_indentという変数によって、開いているvimバッファ内でインデントについて設定済みかどうかを判定させています。

今回はvimのちょこっとカスタマイズにこのファイルを利用しているだけですのでb:did_indentの記載がありません。

なおこのファイルはindentディレクトリ内の内容としては圧倒的に設定が欠けていますので、(プラグインを公開している方でこのことについて理解が無い方はおそらくいないかと思いますが)プラグインと一緒に公開してしまわないように...。



実例の他には


がりがりとプラグインを書く人ならautoloadpluginにファイルを追加します。

また私みたいなライトユーザが触るとしたらkeymapやGVimを使う人でしたらmenu.vimなどでしょうか。

もし、自作したpluginをgithubで公開するような人なら説明文をdocに入れておくと親切ですね。