いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

モードライン

Vimには、モードラインという概念があります。
詳しくは、

:he modeline

とすれば、ヘルプが出てきますが、これをよく使うのは
ソースコードを記述するときや、ドキュメントを記述しているときです。
ソースを書いた後、他のVIMで見たときにそのときに使用していたオプションと
同じ設定を必ず適用して編集したいときがあります。(タブ数など)
そういう時は、文書の先頭あたりで以下のように記述します。

vim:set ts=4 sw=4 et ws is nowrap ft=java fenc=cp932 ff=dos:

この部分がモードラインです。これを書いておくと設定内容が違う
別々のVIMで見ても常に上で指定したオプションがそのドキュメントを
開いた際に上書き設定されます。

ちなみに、上記のモードラインは以下の設定を行います。

  1. タブは4(ts=4)(tabstop)
  2. シフト幅も4(sw=4)(shiftwidth)
  3. タブ文字はスペースに展開(et)(extendtab)
  4. 循環検索をON(ws)(wrapscan)
  5. インクリメンタルサーチをON(is)(incsearch)
  6. 一行が長い場合でも折り返さない(nowrap)
  7. ファイルタイプはjava(ft)(filetype)
  8. ファイルのエンコーディングはCP932(ShiftJIS) (fenc)(fileencoding)
  9. 改行コードはwindows形式(CRLF) (ff)(fileformat)

実際にソースにモードラインを記述する際は、そのままだと構文エラーに
なるので、その言語のコメントで囲みます。

[java]

// vim:set ts=4 sw=4 et ws is nowrap ft=java fenc=cp932 ff=dos:
もしくは
/* vim:set ts=4 sw=4 et ws is nowrap ft=java fenc=cp932 ff=dos: */

[html, xml]

<!-- vim:set ts=4 sw=4 et ws is nowrap ft=java fenc=cp932 ff=dos: -->

[perl, python, ruby]

# vim:set ts=4 sw=4 et ws is nowrap ft=java fenc=cp932 ff=dos:

また、モードラインはmodelineオプションが設定されている場合
効果を持ちます。たいていは、デフォルトでONになっているでしょう。

さらに、VIMはドキュメントがオープンされた際にmodelinesオプションで設定された
行数分モードラインを探しにいきます。デフォルトでは5などの値になっているはずです。