vi エディタの modeline

もう長いこと禁断技とされていたので、名前まで忘れてしまってました。どうやって Google で探すかさえ一苦労でした。結局、elvis エディタのマニュアルで見つけました。
modeline といのは、テキストファイルの先頭付近に ex*1 コマンドを書いておくと、vi によるファイルの読み込み時にエディタのモード初期化ができる、という機能です。Emacs 使いの人には、-*- mode: Lisp; -*- みたいなもの、と言えばお分かり頂けますでしょうか? (こっちの Emacs の機能は、マニュアルで File Variables と探せば出てきます。)
閑話休題。長いこと禁断技とされていたので vim にも実装されていないんじゃないか、と思ったらありました。ただしセキュリティ問題のため、ex の set コマンド(モード変更)しかできないようになっているようです。でも、それで十分。どうやって使うか、というと、ファイルの先頭付近にこんな感じで書いておけば OK。

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
# ex:set ts=4 fileencoding=utf-8:
# $Id$

上から順に、

  1. BSD Unix の execve (2) が、これをスクリプトファイルと解釈して、指定のインタプリタに渡せるようにするための指示
  2. EmacsPython への指示*2。ファイルの符号化方式を教えている
  3. これが、vi の modeline。ハードタブを 4桁に指定している (ついでに、vim 用のファイルコーディングも指定)
  4. RCSCVS のための keyword substitution

という訳です。
備忘録、終わり。(← 備忘録だったらしい)

補足

ちなみに、vim で fileencoding を指定すると、ファイルの modified フラグが立ってしまって鬱陶しい。これって仕様なのか? ちなみに、ただの encoding だと問題ない。違いが良く分からない。誰か、良い参考書教えて。

*1:ex というのは、vi のラインエディタ版兄弟。

*2:Python への coding 指示は、Python version 2.3 から利用可能。