初めに
やっぱり公式の:help modeline
が一番わかりやすいです。
が英語苦手な人のために日本語に翻訳されたのがあるのでリンク貼っときます・
http://vim-jp.org/vimdoc-ja/options.html#modeline
概要
modelineはvimで自動設定をするためのオプションの一つです。
同じように設定を自動化する機能にautocommand
がありますが、autocommand
が指定イベントが起きた時にコマンドを実行するのにし、modelineはmodelineの書かれたファイルが読み込まれた時にコマンドが実行されます。autocommand
では全てのファイルに対して指定イベントが起きればコマンドが実行されるのに対し、modelineはファイル単位で実行するコマンドを定義できます。(二度いってる気がする
以下個人的な解釈です。実際とは異なる可能性があります(特にautocommand
はよくわからない)
メリット | デメリット | |
---|---|---|
autocommand | ファイルごとに設定しなくていい | 他の人にファイルを渡した時に設定が反映されない |
modeline | ファイル単体でも大体コマンドを実行してくれる | 共通してるものでも一個一個ファイルに書かなきゃいけない |
modelineのデメリット -セキュリティ的なお話
一応、セキュリティの観点から、set
以外のコマンドを指定することはできなくなっています。
又、set
のオプションにしても、いくつかのものはsandbox
が動いている時のみ利用可能となります。
しかし、それでもまだ注意が必要です。
例えば、textwidth
を5
などに設定されてしまうと、全ての行が変更される可能性があります。
なので、信頼していない文章を読む際には、modeline
をoffにしておくことをお勧めします。(ってhelpに書いてあった)
もしも、set
コマンド以外のことがしたければ、autocommand
を使用するといいみたいです。
事前準備 -設定
modelineを使得るようにするには、いくつかオプションをセットする必要があります。
.vimrcに追加してください。(デフォルトでは以下の設定になっていると書かれていましたが、自分の環境だとそうはなっていなかったため、念のためというやつです。)
modeline
オプションをonに -->:set modeline
modelines
(sがついた複数形です)を0以外の整数に -->:set modelines=5
など
modeline
がoff、もしくはmodelines
が0になっているとmodeline機能を使えないので注意してください。
modeline
を記述する場所
ファイルの先頭、若しくは末尾です。modelines
で設定された行数分、先頭と末尾から探索されます。
書式
2通りの書き方があります。
- [text]{white}{vi:|vim:|ex:}[white]{options}
- [text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text]
後者はViに互換性があるようです。又、後者はset
又はse
がが必須です。
[text] | 前に文字があっても大丈夫だよってことです。何もなくても勿論いいです。 |
{White} | 一つ以上の<space> または<tab> |
{vi:|vim:|Vim:|ex:} | 文字列。ex: は:example の略な様で、その行は無視される様です。 |
[white] | こちらのWhiteはオプションなのでなくても大丈夫 |
{options} | set コマンドのオプションを書きます。上の方の書き方では区切り文字に: も使えますが、両方共通として<space> が使えます |
{options}内にて:
を使いたい場合、\
でエスケープすることができます。 => \:
例
"一つ目の例vi:noai:sw=3ts=6~vim: tw=77~"二つ目の例/* vim: set ai tw=75: */~/* Vim: set ai tw=75: */~
まあこんな感じです、一応僕の使ってる例:
Cj-bc/slackerの、docs/about_sourcefiles.txt
一行しかないのですが、
Vim:setfiletype=help:
ファイルタイプをhelp
に指定するmodelineを書いてあります。(これについて詳しくは -> Vimで折角tagsファイルを作成したドキュメントに色をつけたい!)
おまけ: Vimのバージョンを指定してmodelineを実行する
おまけというほどでもない様な気はします。普通にhelpに乗ってます。
ある特定のバージョンのVimの時だけmodeline
を使うには、
先ほどのVim:
vim:
の:
の前にバージョンを記載します。
以下vim helpから拝借してきました。
vim{vers}: version {vers} or latervim<{vers}: version before {vers}vim={vers}: version {vers}vim>{vers}: version after {vers}
はい、まあ書いてある通りですね。一応日本語化してみると
vim{vers}:{vers}もしくはそれよりも新しいバージョン
vim<{vers}:{vers}よりも古いバージョン
vim={vers}:{vers}のバージョンのみ
vim>{vers}:{vers}よりも新しいバージョン
特に難しいこともないですね。ただし、ここで気をつけるべきは{vers}
の値です。{vers}
は、メジャーバージョンを100倍しマイナーバージョンを足した数です。
つまり、
version 7 -> 700
version 7.2 -> 702
となります。