* 公式情報

** [CITE[Vim]]

- [10] [CITE[Vim documentation: options]], [TIME[2025-06-30T18:37:51.000Z]], [TIME[2025-11-04T08:58:33.509Z]] <https://vimdoc.sourceforge.net/htmldoc/options.html#modeline>
-- [11] 
[CITE[options - Vim Documentation]], [TIME[2025-11-03T13:03:34.000Z]], [TIME[2025-11-04T08:59:00.930Z]] <https://vim-jp.org/vimdoc-en/options.html#modeline>
-[7] [CITE@en[vim/src/buffer.c at master · vim/vim · GitHub]], [TIME[2025-11-04T07:56:08.000Z]] <https://github.com/vim/vim/blob/master/src/buffer.c#L5793>

** [CITE[Neovim]]

- [12] [CITE[Options - Neovim docs]], [TIME[2025-11-04T05:24:36.000Z]], [TIME[2025-11-04T08:59:10.574Z]] <https://neovim.io/doc/user/options.html#modeline>


* 構文

[13] 
[CODE[vi:]],
[CODE[vim:]],
[CODE[ex:]]
のいずれかを[[行]]に含めます。
[SRC[>>10]]

[23] 
ただし [CODE[vim]] と [CODE[:]] の間に、
[[空文字列]] ([[≧]] の意味。), [CODE[<]], [CODE[=]], [CODE[>]] のいずれかと、
[[数字]]列を指定できます。
[[数字]]列は、 [CITE[Vim]] の major version × 100 + minor version
を表します。
[CITE[Vim]] の[[版番号]]が指定の条件を満たすときのみ適用されます。
[SRC[>>10]]



[14] 
>>13 の前には1つ[[以上]]の[[空白]] ([CC[U+0009]], [CC[U+0020]]) を置きます。
ただし、[[行頭]]に [CODE[vi:]], [CODE[vim:]]
が続く場合は、[[空白]]を0個とできます。
[SRC[>>10]]

;; [21] [[空白]]の省略は、 [CITE[Vim]] 3.0 との[[互換性]]のため [SRC[>>10]]
とされます。

[15] 
>>13 の後には0個[[以上]]の[[空白]]を置きます。
[SRC[>>10]]

[16] 
第1形では、
>>15 の後には[[空白]]または
[CODE[:]]
で区切られた0個[[以上]]の option setting
の[[並び]]を置きます。
[SRC[>>10]]

[19] 
第1形では、 >>13 の前に0個[[以上]]の[[文字]]を置けます。
[SRC[>>10]]

[17] 
第2形では、
>>15 の後には
[CODE[set ]] または [CODE[se ]] を置きます。
[SRC[>>10]]

[18] 
>>17 の後には[[空白]]で区切られた option の[[並び]]を置きます。
その後に 
[CODE[:]]
を置きます。
[SRC[>>10]]

[20] 
第2形では、  >>13 の前や >>18 の後に0個[[以上]]の[[文字]]を置けます。
[SRC[>>10]]

;; [22] 
第2形は特定の版の [CITE[Vi]] と[[互換性]]がある
[SRC[>>10]]
とされます。

[24] 
[[並び]]の中において [CODE[:]] は [CODE[\:]] と書きます。
[CODE[\:]] は [CODE[\\:]] と書きます。
[SRC[>>10]]

;; [25] それ以外の [CODE[\]] は特別な意味を持っていないようです。

[26] 
[[並び]]の中の値は、 [CODE[:set]] に設定する値とみなされます。
[SRC[>>10]]
[[option]] の名前だけが指定されることもあれば、
[CODE[=]] に続けて値が指定されることもあります。
他にも option のデータ型によっていくつかの指定方法があります。

-*-*-

[27] 
[[モード行]]として解釈されるかどうかは、 option
[CODE[modeline]],
[CODE[modelines]]
に依存します。
[SRC[>>10]]

[32] 
ファイルの先頭か末尾の指定行数が[[モード行]]として解釈されます。
[SRC[>>10]]
最後の[[改行]]の後の末尾の[[行]]をどう数えるのかはドキュメント上明確ではありません。

[39] 
[[モード行]]の区切りとなる[[改行文字]]の違いは option によるものと思われます。
[[モード行]]によるその変更が即座に反映されるのかはドキュメント上明確ではありません。

[40] 
[[文字コード]]の認識は option によるものと思われますが、
[[モード行]]によるその変更が[[モード行]]の処理に即座に反映されるのかはドキュメント上明確ではありません。
[[ASCII互換]]ではない [CODE[utf-16le]] などとの相互作用もドキュメント上明確ではありません。

* option

[28] 
[CITE[Vim]] にはいろいろな option があります。 option はいくつかの方法で設定でき、
そのうちの1つが[[モード行]]です。ただし[[モード行]]では設定できない option もあります。

[29] 
[DFN[[CODE[modeline]]]] = [DFN[[CODE[ml]]]]
option
は、 [[boolean]] であり、既定値は [CITE[Vim]] 通常[[利用者]]で [[on]]、
[CODE[root]] で [[off]]、 [CITE[Vi]] で [[off]] です
([CODE[compatible]] = [CODE[cp]] が [[on]] のときこちらの既定値となります)。 
[CODE[modeline]]
が
[[off]] だと、[[モード行]]は検査されなくなります。
[SRC[>>10]]

[30] 
[DFN[[CODE[modelines]]]] = [DFN[[CODE[mls]]]]
option
は、 [[number]] であり、既定値は [N[5]] です。
[CODE[modeline]] が [[on]] のとき、
[CODE[modelines]] で指定された[[行]]数分、
[[モード行]]が検査されます。
[SRC[>>10]]

[31] 
[CODE[binary]] = [CODE[bin]] option (= 起動時の[[引数]] [CODE[-b]])
の副作用の1つとして、 [CODE[modeline]] は [[off]] に設定されます。
[SRC[>>10]]

[33] 
[[モード行]]が複数あるときの処理順はドキュメント上明確ではありません。
[CODE[modeline]], [CODE[modelines]] 等が即座に反映されるのかはドキュメント上明確ではありません。

[34] 
[CODE[fileencoding]] = [CODE[fenc]] 
option
は[[文字コード]]を指定します。
古い版では [CODE[fe]] がありましたが、既に廃止されていて実装されていないようです。
[SRC[>>10]]

[35] 
[CODE[fileencodings]] = [CODE[fencs]] 
option
は[[文字コード]]の候補を指定します。

[36] 
[CODE[fileformat]] = [CODE[ff]] 
option
は[[改行コード]]を指定します。
[CODE[fileformats]] = [CODE[ffs]] 
option
は[[改行コード]]の候補を指定します。
[SRC[>>10]]

[37] 
[CODE[filetype]] = [CODE[ft]]
option
は[[ファイル形式]]を指定します。
[CODE[.]] 区切りでいくつか指定できます。
[SRC[>>10]]

[38] 
[CODE[syntax]] = [CODE[syn]]
option
は[[構文ハイライト]]のための[[ファイル形式]]を指定します。
[CODE[.]] 区切りでいくつか指定できます。
[SRC[>>10]]

* 実利用例

[42] 
[CITE[null]], [TIME[2011-11-15T09:54:07.000Z]], [TIME[2026-01-18T15:28:31.922Z]] <http://metanest.jp/squipper/squipper.js>

* 関連

[SEE[ [[sniffing]] ]]

[41] 
他の[[エディター]]の同様の機能も[[モード行]]と呼ばれることがあります。
[SEE[ [[-*-]], [[Kate Modelines]] ]]

[SEE[ [[コメントの中身が意味を持ってしまう]] ]]

* メモ

[9] 
[CITE@en[Modeline magic | Vim Tips Wiki | Fandom]], [TIME[2025-11-03T06:36:53.000Z]], [TIME[2025-11-04T07:57:06.749Z]] <https://vim.fandom.com/wiki/Modeline_magic>

[8] 
[CITE@en[ファイル内にex:: が入っているとError detected while processing modelinesが表示される · Issue #1281 · vim-jp/issues]], [TIME[2025-11-04T07:56:31.000Z]] <https://github.com/vim-jp/issues/issues/1281>

[6] [CITE@ja[Xユーザーのドッグさん: 「最近 Vim のモードライン判定が地味に誤爆する… 例えば { vim: true } というオブジェクトをつくるとそこで vim: をモードラインだと思ってしまう」 / X]], [TIME[午後3:50 · 2019年7月1日][2019-07-01T06:50:22.000Z]], [TIME[2025-11-04T06:01:13.000Z]] <https://x.com/Linda_pp/status/1145585417896353792>








[1] [CITE@en[PEP 263 -- Defining Python Source Code Encodings | Python.org]]
([TIME[2017-02-22 15:10:00 +09:00]])
<https://www.python.org/dev/peps/pep-0263/>

[2] [[Ruby]] も [CODE[vim:]] を解釈するようです。

[5] [CITE@en[Modeline magic | Vim Tips Wiki | Fandom]], [TIME[2025-11-02T15:51:45.000Z]], [TIME[2025-11-03T15:52:32.334Z]] <https://vim.fandom.com/wiki/Modeline_magic>


- [4] [CITE@en[GitHub - cinsk/emacs-vim-modeline: Handle VIM modeline in Emacs]], [TIME[2025-11-03T15:50:45.000Z]] <https://github.com/cinsk/emacs-vim-modeline>
- [3] [CITE@en[GitHub - abougouffa/emacs-vim-file-locals: Set Emacs editor options from Vim modeline]], [TIME[2025-11-03T15:50:19.000Z]] <https://github.com/abougouffa/emacs-vim-file-locals>