1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

vimのmodelineオプションについて日本語で書いてみる

Last updated at Posted at 2018-02-16

初めに

やっぱり公式の:help modelineが一番わかりやすいです。
が英語苦手な人のために日本語に翻訳されたのがあるのでリンク貼っときます・
http://vim-jp.org/vimdoc-ja/options.html#modeline

概要

modelineはvimで自動設定をするためのオプションの一つです。
同じように設定を自動化する機能にautocommandがありますが、autocommandが指定イベントが起きた時にコマンドを実行するのにし、modelinemodelineの書かれたファイルが読み込まれた時にコマンドが実行されます
autocommandでは全てのファイルに対して指定イベントが起きればコマンドが実行されるのに対し、modelineファイル単位で実行するコマンドを定義できます。 (二度いってる気がする
以下個人的な解釈です。実際とは異なる可能性があります(特にautocommandはよくわからない)

メリット デメリット
autocommand ファイルごとに設定しなくていい 他の人にファイルを渡した時に設定が反映されない
modeline ファイル単体でも大体コマンドを実行してくれる 共通してるものでも一個一個ファイルに書かなきゃいけない

modelineのデメリット -セキュリティ的なお話

一応、セキュリティの観点から、set以外のコマンドを指定することはできなくなっています。
又、setのオプションにしても、いくつかのものはsandboxが動いている時のみ利用可能となります。
しかし、それでもまだ注意が必要です。
例えば、textwidth5などに設定されてしまうと、全ての行が変更される可能性があります。
なので、信頼していない文章を読む際には、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の略な様で、その行は無視される様です。 1
[white] こちらのWhiteはオプションなのでなくても大丈夫
{options} setコマンドのオプションを書きます。上の方の書き方では区切り文字に:も使えますが、両方共通として<space>が使えます

{options}内にて:を使いたい場合、\でエスケープすることができます。 => \:

modelineヘルプから引用
"一つ目の例
   vi:noai:sw=3 ts=6 ~
   vim: tw=77 ~
"二つ目の例
   /* vim: set ai tw=75: */ ~
   /* Vim: set ai tw=75: */ ~

まあこんな感じです、一応僕の使ってる例:
Cj-bc/slackerの、docs/about_sourcefiles.txt
一行しかないのですが、

Cj-bc/slacker/docs/about_sourcefiles.txtの下の方
Vim: set filetype=help:

ファイルタイプをhelpに指定するmodelineを書いてあります。(これについて詳しくは -> Vimで折角tagsファイルを作成したドキュメントに色をつけたい!)

おまけ: Vimのバージョンを指定してmodelineを実行する

おまけというほどでもない様な気はします。普通にhelpに乗ってます。
ある特定のバージョンのVimの時だけmodelineを使うには、
先ほどのVim: vim::の前にバージョンを記載します。
以下vim helpから拝借してきました。

vim{vers}:      version {vers} or later
vim<{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

となります。

  1. ex:exampleとして解釈されるのは、ex:が行頭にきた場合のみなようです。@tenmyoさんありがとうございました。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?