パーソナルツール

モードラインを使って、ファイルごとにvimエディタのオプションを指定する。

作者: 小見 拓 最終変更 2012年01月08日 11時59分

ファイルタイプ別ではなくファイルごとにエディタの設定を変更したい場合、 ファイルにvimエディタ特有の記述をしておくことで、 そのファイルがvimエディタで開かれた時に特定の設定を有効にするモードラインという 機能が役に立ちます。 モードラインの書き方を覚えておくと、 他の方にファイルを読ませたい時、プロジェクト特有のルールがある時、 他の環境にファイルを移す時などに役に立ちます。 (Windows, Mac)

概要

ファイルタイプ別ではなくファイルごとにエディタの設定を変更したい場合、 ファイルにvimエディタ特有の記述をしておくことで、
そのファイルがvimエディタで開かれた時に特定の設定を有効にするモードラインという 機能が役に立ちます。
モードラインの書き方を覚えておくと、 他の方にファイルを読ませたい時、プロジェクト特有のルールがある時、
他の環境にファイルを移す時などに役に立ちます。

モードラインとはどのようなものか

次のような記述を見たことがあるでしょうか。この指定がモードラインです。
このモードラインの指定を、ファイルの上、もしくは下に記述しておくと、
ファイルを開いた時に、モードラインで指定したvimエディタオプションが有効になります。

モードラインの例 その1
/* vim: set ai tw=75: */

モードラインの例 その2
" vim:set ts=8 sts=2 sw=2 tw=0:

モードラインの例 その3
.. vim:set expandtab fenc=cp932 ff=unix ft=rest :
モードラインを記述できるエリア

モードラインの書き方

モードラインのフォーマット

モードラインは、次の2種類のフォーマットの書き方ができます。

モードラインの書き方 その1
[text]{white}{vi:|vim:|ex:}[white]{options}

モードラインの書き方 その2
[text]{white}{vi:|vim:|ex:}[white]se[t] {options}:[text]
表記 説明。表記が何を表しているか。
[text] 何らかのテキスト。省略可能。
{white} 空白文字。
{vi:|vim:|ex:} 「vi:」「vim:」「ex:」のどれか。
[white] 空白文字。省略可能。
{options} モードラインで有効にしたい設定。

モードラインの書き方の具体例

各モードラインの書き方の具体的な例を挙げると、下記のようになります。

「書き方 その1」は「se[t]」を書かかなくても良いのですが、
その行、モードライン以降にvimエディタのオプション以外の余分な文を書くことができません。
「書き方 その2」はモードライン以降に余分な文やコメントを書くことができますが、
「se[t]」と、モードラインを閉じる「:」を書く必要があります。

モードラインの書き方 その1
vim: expandtab fenc=cp932 ff=unix ft=rest

モードラインの書き方 その2
vim: set expandtab fenc=cp932 ff=unix ft=txt :

モードラインの書き方 その2(余分なテキストつき)
vim: set expandtab fenc=cp932 ff=unix ft=txt : # この行はvimエディタのモードラインです。

コメントとモードラインを組み合わせる

プログラムのコードで使用する場合は、次のように、
モードラインはプログラムのコメントと組み合わせて書くことが多くなるでしょう。

シェル風のコメントと組み合わせる
# vim: expandtab fenc=cp932 ff=unix ft=rest

C言語風のコメントと組み合わせる
/* vim: set expandtab fenc=cp932 ff=unix ft=txt : */

モードラインのルール

モードラインの機能を有効にする

モードラインを使用するには、vimエディタの「modeline」オプションがオンに なっている必要があります。
vimエディタの「modeline」オプションをオンにするには、 次のコードをvimエディタの設定ファイルに追加してください。

" モードラインを有効にする
:set modeline

モードラインの検索行数

vimエディタは、ファイルの上下端から「modelines」オプションで設定された行数だけ、 モードラインを探しに行きます。(デフォルトは5行)
「modelines」オプションを変更するには、vimエディタの設定ファイルで 次の例のように設定してください。

" モードラインの検索行数を設定
:set modelines=5

モードラインで指定できるvimエディタオプション

モードラインで指定できるオプションは、 vimエディタの「:set」コマンドで設定できるオプションのみです。
一部、モードラインで使用できないオプションもあります。

モードラインとよく組み合わされるオプション

下の表は、モードラインと組み合わせて使用できそうなオプションの例です。
インデント、タブなど、見た目にかかわるvimエディタオプションの指定に使用すると良いでしょう。

オプション オプション(省略形) 説明 オプション指定例
tabstop ts タブを画面で表示する際の幅。 ts=4
shiftwidth sw インデント時に使用されるスペースの数。 sw=4
softtabstop sts 0でないなら、タブを入力時、その数値分だけ半角スペースを挿入する。 sts=4
textwidth tw 0でないなら、このオプションで設定された幅で行を改行する。 tw=70
expandtab et 有効にすると、タブを挿入する時、そのタブを半角スペースとして挿入します。 noexpandtab
wrap   有効にすると、画面端で行を折り返して表示します。 nowrap
fileformat ff ファイルの改行の種類。dos、mac、unixのどれかを指定します。 ff=dos
filetype ft ファイルタイプ。 ft=html
fileencoding fenc ファイルのエンコーディング。 fenc=utf-8

Note

モードラインで「fileencoding」オプションを指定する場合は注意してください。
現在のファイルのエンコーディングと異なるエンコーディングをモードラインで指定すると、
ファイルを破壊してしまうことがあります。

ドキュメントアクション
コメント
blog comments powered by Disqus