テキストファイルの先頭か末尾に、モードライン (modeline) という特殊なコメントを埋め込んでおくと、そのファイルにだけ適用する Vim の設定を行うことができます。 複数人でフォーマットを揃えて1つのテキストファイルを編集したい場合などに便利です。 例えば C 言語のソースファイルなら以下のようなコメントを書いておくことで、そのファイルのインデント幅やタブ使用の有無を支持することができます。
/* vim: set shiftwidth=4:tabstop=4:expandtabs */
モードライン (modeline) の機能を有効にするには、以下のように設定しておく必要があります。
set modeline "モードラインを有効にする
set modelines=5 "上端、下端から何行までをモードラインと認識するか
ファイルの先頭や末尾に記述するモードラインは、下記のようなフォーマットで記述します。
<任意のテキスト><スペース>vim: set ...:<任意のテキスト>
例えば、一行の文字数を 79 文字に制限して自動的に折り返すようにするには、テキストの最終行などに、以下のように記述しておきます。
# vim: set tw=79 fo=aM:
行頭と行末には任意のテキストを入れられるので、C++ のコメントとして以下のように記述することができます。
/* vim: set tw=79 fo=aM: */
モードラインの行末に任意のテキストを追加しなくてよい場合(行末までを Vim の設定値とみなしてよい場合)は、set
の記載と、最後の :
を省略することができます。
# vim: tw=79 fo=aM
# vim: tw=79 fo=aqwB ai
各オプションの意味は以下のようになっています。
tw=79
(textwidth) – 一行の文字数を 79 文字(+改行)に制限fo=aqwB
(formatoptions)
a
– テキスト入力するごとに textwidth に設定した文字数で自動折り返しq
– gq
コマンドで、選択範囲をフォーマットするw
– 行末にスペースがある場合のみ、自動で行連結しようとするB
– 行を結合したときに日本語の間にはスペースを入れないai
(autoindent) – 改行するときに自動的に現在の行と同じだけインデントするformatoptions で、a
と一緒に m
を指定すると、文字挿入時に日本語などのマルチバイト文字でも自動改行するようになりますが、a
オプションと相性がよくないので、m
は指定しない方がよいです。
例えば、カーソルより後ろの日本語文章が自動改行されると、改行された後ろのテキストに余計なスペースが入ったり、1 文字ごとに改行されてしまったりします。
なので、日本語テキストを整形したい場合は、整形したい領域を選択し、gq
で手動整形するのがよいです。
# vim: tw=76 fo=aqwB ai ts=2 et sw=2 sr
下記は各オプションの概要です。
tw=76
(textwidth) – 一行の文字数fo=aqwB
(formatoptions) – 自動改行の設定ai
(autoindent) – 改行時のオートインデントts=2
(tabstop) – タブの半角スペース数et
(expandtab) – タブを展開sw=2
(shiftwidth) – シフト時のスペース数sr
(shiftround) – シフト時に丸める日本語を自動整形する場合は、Shift-V
で対象範囲を選択して gq
と入力します。