Merge branch 'KaoriYa'
[MacVim/KaoriYa.git] / runtime / doc / syntax.jax
blob4b1253ef4b7eae34bd33cba75623f90cc8b6e21d
1 *syntax.txt*    For Vim バージョン 7.1.  Last change: 2007 May 11
4                 VIMリファレンスマニュアル    by Bram Moolenaar
7 構文ハイライト                 *syntax* *syntax-highlighting* *coloring*
9 Vimは構文ハイライトによってテキストの一部を別のフォントや色で表示することがで
10 きる。ハイライトするキーワードやテキストは、正規表現パターンによって指定する。
11 動作を速く保つため、ファイル全体を構文解析するわけではないから、このハイライト
12 方法には限界が存在する。単語(レキシカル)ハイライトと呼ぶのがより正しいが、皆が
13 構文ハイライトと呼ぶのでそう呼び続けている。
15 Vimは全ての端末で構文ハイライトをサポートしている。しかし、多くの普通の端末に
16 はごく限られたハイライト手段しか提供されていないので、GUI版のgvimで動作させた
17 ときに見栄えが最もよくなる。
19 ユーザマニュアルにおける記述:
20 |usr_06.txt| 構文ハイライトの紹介。
21 |usr_44.txt| 構文ファイルの記述方法の紹介。
23 1.  クイックスタート                    |:syn-qstart|
24 2.  構文ファイル                      |:syn-files|
25 3.  構文ファイル読込の手順         |syntax-loading|
26 4.  構文ファイルの覚書                   |:syn-file-remarks|
27 5.  構文を定義する                     |:syn-define|
28 6.  :syntaxの引数                  |:syn-arguments|
29 7.  syntaxのパターン                 |:syn-pattern|
30 8.  クラスタ                                |:syn-cluster|
31 9.  構文ファイルのインクルード               |:syn-include|
32 10. 表示のシンクロナイズ          |:syn-sync|
33 11. 構文アイテムのリストを表示する     |:syntax|
34 12. ハイライトコマンド                   |:highlight|
35 13. グループのリンク                    |:highlight-link|
36 14. 構文の消去                               |:syn-clear|
37 15. 関数名などのハイライト         |tag-highlight|
38 16. カラー対応xterm                  |xterm-color|
40 {これらのコマンドはViには存在しない}
42 コンパイル時に|+syntax|機能を無効にした場合には構文ハイライトは利用することは
43 できない。
45 ==============================================================================
46 1. クイックスタート                                     *:syn-qstart*
48                                                 *:syn-enable* *:syntax-enable*
49 次のコマンドで構文ハイライトが有効になる: >
51         :syntax enable
53 このコマンドにより実際には次のコマンドが実行される  >
54         :source $VIMRUNTIME/syntax/syntax.vim
56 環境変数VIMが設定されていない場合は、Vimは別の方法(|$VIMRUNTIME|参照)でパスの
57 検索を試みる。通常はこれでうまくいく。うまく動作しない場合は、環境変数VIMにVim
58 の構成ファイルが置いてあるディレクトリの設定を試みる。例えば、構文ファイルがディ
59 レクトリ"/usr/vim/vim50/syntax"にあるならば、$VIMRUNTIMEに"/usr/vim/vim50"を設
60 定する。これはVimを起動する前に、シェルで設定しておかなければならない。
62                                                         *:syn-on* *:syntax-on*
63 コマンド":syntax enable"は現在の色設定を変更しない。そのため、このコマンドを使
64 用する前後にコマンド":highlight"で好みの色を設定することができる。現在の設定を
65 破棄して、デフォルトの色を設定させたい場合は次のコマンドを使用する: >
66         :syntax on
68                                         *:hi-normal* *:highlight-normal*
69 GUIを使用している場合は、次のコマンドで黒地に白文字を設定できる: >
70         :highlight Normal guibg=Black guifg=White
71 カラー端末については|:hi-normal-cterm|を参照。
72 自分自身で色を設定する方法については|syncolor|を参照。
74 NOTE: MS-DOSとWindowsの構文ファイルは改行コードが<CR><NL>である。UNIXでは<NL>
75 である。自分のシステムに合った改行コードのファイルを使わなければならない。しか
76 し、MS-DOSとWindowsではオプション'fileformats'が空でなければ正しい形式が自動的
77 に選択される。
79 NOTE: 反転表示("gvim -fg white -bg black")を使用する場合、|gvimrc|が読込まれた
80 後、GUIウィンドウが開かれるまでは'background'のデフォルト値が設定されない。そ
81 のせいで誤ったデフォルトのハイライトが使用されてしまう。ハイライト表示を有効化
82 する前に'background'のデフォルト値を設定するには、|gvimrc|にコマンド":gui"を含
83 めればよい: >
85    :gui         " ウィンドウを開き、'background'にデフォルト値を設定する
86    :syntax on   " ハイライトを有効化し、'background'にもとづいて色を設定する
88 NOTE: |.gvimrc|の中で":gui"を使用すると"gvim -f"によりフォアグラウンドで開始す
89 ることができなくなる。その際は":gui -f"を使用すること。
92 次のコマンドで構文ハイライトの有効・無効を切換えることができる >
93    :if exists("syntax_on") | syntax off | else | syntax enable | endif
95 これをキーマップに設定するには、以下のように書く: >
96    :map <F7> :if exists("syntax_on") <Bar>
97         \   syntax off <Bar>
98         \ else <Bar>
99         \   syntax enable <Bar>
100         \ endif <CR>
101 [全ての文字をそのまま入力すること]
103 詳細
104 コマンド":syntax"はファイルをsourceすることで実装されている。その際にsourceさ
105 れるファイルの中身を見れば、このコマンドがどのように動作しているのか正確に知る
106 ことができる。
107     コマンド                ファイル ~
108     :syntax enable      $VIMRUNTIME/syntax/syntax.vim
109     :syntax on          $VIMRUNTIME/syntax/syntax.vim
110     :syntax manual      $VIMRUNTIME/syntax/manual.vim
111     :syntax off         $VIMRUNTIME/syntax/nosyntax.vim
112 |syntax-loading|も参照。
114 ==============================================================================
115 2. 構文ハイライトファイル                                  *:syn-files*
117 ある1つの言語用の構文とハイライト色定義コマンドは通常1つのファイル(以下構文ファ
118 イル)に格納される。名前は"{name}.vim"と付ける慣習になっている。{name}はその言
119 語の名前か短縮名となる(DOSファイルシステムで要求される、8.3文字の形式にあわせ
120 ることが望ましい)。
121 例:
122         c.vim           perl.vim        java.vim        html.vim
123         cpp.vim         sh.vim          csh.vim
125 構文ファイルには、vimrcファイルと同様にExコマンドを記述できる。しかし1つのファ
126 イルには、1つの言語のためのコマンドだけを記述するよう取り決めている。ある言語
127 が別の言語のスーパーセットである時には、他のファイルを内包していても良く、例え
128 ば、ファイルcpp.vimはファイルc.vimを取り込むようになっている: >
129    :so $VIMRUNTIME/syntax/c.vim
131 通常これらの構文ファイルはオートコマンドにより読込まれる。例: >
132    :au Syntax c     source $VIMRUNTIME/syntax/c.vim
133    :au Syntax cpp   source $VIMRUNTIME/syntax/cpp.vim
134 このようなコマンドはファイル$VIMRUNTIME/syntax/synload.vimに書かれている。
138 独自構文ファイルの作成                                     *mysyntaxfile*
140 独自の構文ファイルを作成し、":syntax enable"をしたとき自動的にそのファイルが使
141 われるようにするには、以下のようにする:
143 1. ユーザランタイムディレクトリを作成する。通常はオプション'runtimepath'に示さ
144    れる最初のディレクトリを使用する。UNIXの例では: >
145         mkdir ~/.vim
147 2. "syntax"という名のディレクトリを作成する。UNIXでは: >
148         mkdir ~/.vim/syntax
150 3. Vimの構文ファイルを作成する。もしくはインターネットからダウンロードする。そ
151    のファイルはディレクトリsyntaxに置く。構文"mine"の例では: >
152         :w ~/.vim/syntax/mine.vim
154 これで独自構文ファイルを手動で使うことはできるようになっている: >
155         :set syntax=mine
156 このコマンドを実行するためにVimを再起動する必要はない。
158 このファイルタイプが認識されるようにするには、|new-filetype|を参照。
160 システム管理者としてユーザ全てに独自構文ファイルを使わせるには、各ユーザに同じ
161 構文ファイルをインストールさせる必要はなく、全ユーザ共通の'runtimepath'ディレ
162 クトリにインストールすればよい。
165 既存の構文ファイルに設定を追加する               *mysyntaxfile-add*
167 既存の構文ファイルでほぼ満足だが、いくつかの設定を追加したりハイライト手法を変
168 更したい場合には、以下の手順に従う:
170 1. 上同様、'runtimepath'に示されるユーザディレクトリを作成する。
172 2. "after/syntax"というディレクトリを作成する。UNIXの例: >
173         mkdir ~/.vim/after
174         mkdir ~/.vim/after/syntax
176 3. 追加設定を行なうコマンドを含むVimスクリプトファイルを作成する。例として、C
177    言語のコメントの色を変更するには: >
178         highlight cComment ctermfg=Green guifg=Green
180 4. その設定ファイルをディレクトリ"after/syntax"に置く。名前には構文名に".vim"
181    を追加して使用する。Cの構文を拡張するならば: >
182         :w ~/.vim/after/syntax/c.vim
184 以上。次回Cのファイルを編集する時にはコメントが異なった色で表示される。Vimを再
185 起動する必要はない。
187 構文ファイルが複数になるときは、ファイルタイプの名前のディレクトリに置くとよい。
188 そのディレクトリの中の全ての "*.vim" ファイルが読み込まれるようになる。例: >
189         ~/.vim/after/syntax/c/one.vim
190         ~/.vim/after/syntax/c/two.vim
192 既存の構文ファイルを置き換える                         *mysyntaxfile-replace*
194 標準の構文ファイルが気に入らない場合や、新しいバージョンをダウンロードした際に
195 は、上で述べた|mysyntaxfile|に従えば良い。ただ'runtimepath'で、前の方に記され
196 たディレクトリに構文ファイルを置くように気を付ければ良い。Vimは適合する構文ファ
197 イルのうち最初に見つけた1つだけを読込む。
200 名前付けの慣習
201                                                         *group-name*
202 ハイライトや構文グループの名前はアスキー文字、数字、アンダースコアだけでつけな
203 ければならない。正規表現では: "[a-zA-Z0-9_]*"
205 各ユーザが好みの色セットを使用できるように、多くの言語に共通するハイライトグルー
206 プには優先名が与えられている。推奨されているグループ名は以下のとおり(構文ハイ
207 ライトがちゃんと機能していれば、"Ignore"以外はそのグループに設定された色で表示
208 されるだろう):
210         *Comment        o コメント
212         *Constant       o 定数
213          String         o 文字列定数: "これは文字列です"
214          Character      o 文字定数: 'c', '\n'
215          Number         o 数値定数: 234, 0xff
216          Boolean        o ブール値の定数: TRUE, false
217          Float          o 不動小数点数の定数: 2.3e10
219         *Identifier     o 変数名
220          Function       o 関数名(クラスメソッドを含む)
222         *Statement      o 命令文
223          Conditional    o if, then, else, endif, switch, その他
224          Repeat         o for, do, while, その他
225          Label          o case, default, その他
226          Operator       o "sizeof", "+", "*", その他
227          Keyword        o その他のキーワード
228          Exception      o try, catch, throw
230         *PreProc        o 一般的なプリプロセッサ命令
231          Include        o #include プリプロセッサ
232          Define         o #define プリプロセッサ
233          Macro          o Defineと同値
234          PreCondit      o プリプロセッサの #if, #else, #endif, その他
236         *Type           o int, long, char, その他
237          StorageClass   o static, register, volatile, その他
238          Structure      o struct, union, enum, その他
239          Typedef        o typedef宣言
241         *Special        o 特殊なシンボル
242          SpecialChar    o 特殊な文字定数
243          Tag            o この上で CTRL-] を使うことができる
244          Delimiter      o 注意が必要な文字
245          SpecialComment o コメント内の特記事項
246          Debug          o デバッグ命令
248         *Underlined     o 目立つ文章, HTMLリンク
250         *Ignore         o (見た目上)空白, 不可視
252         *Error          o エラーなど、なんらかの誤った構造
254         *Todo           o 特別な注意がひつようなもの; 大抵はTODO FIXME XXXなど
255                           のキーワード
257 マーク(*)されている名前が優先グループ、その他はマイナーグループである。優先グ
258 ループには、"syntax.vim"によりデフォルトのハイライト手法が定義されている。マイ
259 ナーグループは優先グループにリンクされ、リンクした先と同じハイライト手法になる。
260 ファイル"syntax.vim"が読込まれた後でコマンド":highlight"を使えば、そのデフォル
261 トを上書することができる。
263 ハイライトグループ名には大文字小文字の区別がないことに注意。"String" と
264 "string"はどちらも同じグループを意味する。
266 以下の名前は予約されているのでグループ名として使用することはできない:
267         NONE   ALL   ALLBUT   contains   contained
269 ==============================================================================
270 3. 構文ファイル読込の手順                          *syntax-loading*
272 ここではコマンド":syntax enable"を実行した時に何が起こるかの詳細を説明する。
273 Vimは初期化の時に、ランタイムファイルの在り処を自動的に発見する。ここでは変数
274 |$VIMRUNTIME|にその場所が格納されているとする。
276 ":syntax enable" と ":syntax on"では以下のことが起こる:
278     $VIMRUNTIME/syntax/syntax.vimを読込む
279     |
280     +-  $VIMRUNTIME/syntax/nosyntax.vimを読込んで古い構文を削除する
281     |
282     +-  'runtimepath'から$VIMRUNTIME/syntax/synload.vimを読込む
283     |   |
284     |   +-  構文ハイライトの色を設定する。
285     |   |   カラースキームが定義されている場合は":colors {name}"で再度読込む。
286     |   |   そうでない場合は":runtime! syntax/syncolor.vim"が使用される。
287     |   |   ":syntax on"は既存の色設定を上書設定し、":syntax enable"はまだ設定
288     |   |   されていないグループのみを設定する。
289     |   |
290     |   +-  適切な構文ファイルをオプション'syntax'が設定される時に読込む自動実
291     |   |   行コマンドを設定する。 *synload-1*
292     |   |
293     |   +-  ユーザによる追加ファイルを変数|mysyntaxfile|から読込む。これは
294     |       Vim 5.xとの互換性のためだけに存在する。 *synload-2*
295     |
296     +-  ":filetype on"を実行し":runtime! filetype.vim"が実行される。これは見つ
297     |   けることのできる全てのfiletype.vimを読込む。$VIMRUNTIME/filetype.vimは
298     |   常に読込まれ、以下のことが実行される。
299     |   |
300     |   +-  拡張子に基づいてオプション'filetype'を設定するオートコマンドをイン
301     |   |   ストールする。これにより既知のファイル形式に付いて、ファイル名と
302     |   |   当該形式との関連付けが成される。 *synload-3*
303     |   |
304     |   +-  ユーザによる追加ファイルを変数 *myfiletypefile* から読込む。これは
305     |   |   Vim 5.xとの互換性のためだけに存在する。 *synload-4*
306     |   |
307     |   +-  ファイル形式が検出されなかった時にscripts.vimを読込むための自動実
308     |   |   行コマンドをインストールする。 *synload-5*
309     |   |
310     |   +-  構文メニュー設定のため$VIMRUNTIME/menu.vimを読込む。 |menu.vim|
311     |
312     +-  ファイル形式が検出された時にオプション'syntax'を設定するためのFileType
313     |   オートコマンドを設定する。 *synload-6*
314     |
315     +-  既に読込まれているバッファに対して構文ハイライトを行なうために、関連し
316         たオートコマンドを実行する。
319 ファイルを読込む時には、Vimは以下のように関連した構文ファイルを見つける:
321     ファイルを読込むとBufReadPostオートコマンドが起動する。
322     |
323     +-  |synload-3|(既知ファイル形式)か|synload-4|(ユーザ定義ファイル形式)の自
324     |   動実行コマンドがヒットした場合、オプション'filetype'にそのファイル形式
325     |   名が設定される。
326     |
327     +-  |synload-5|のオートコマンドが実行される。まだファイル形式が決定され
328     |   ていない場合は、'runtimepath'からscripts.vimが検索される。これは常に以
329     |   下のことを行なう$VIMRUNTIME/scripts.vimを読込む。
330     |   |
331     |   +-  ユーザによる追加ファイルを変数 *myscriptsfile* から読込む。これは
332     |   |   Vim 5.xとの互換性のためだけに存在する。
333     |   |
334     |   +-  未だにファイル形式が決定できない場合、ファイルの内容を検査する。検
335     |       査は"getline(1) =~ pattern"のように認識できるファイル形式かどうか
336     |       行なわれ、認識できるならば'filetype'を設定する。
337     |
338     +-  ファイル形式が決定されて'filetype'が設定された時に、上記|synload-6|の
339     |   FileTypeオートコマンドが実行される。決定したファイル形式名がそれによ
340     |   り'syntax'へ設定される。
341     |
342     +-  上記でオプション'syntax'が設定されると、|synload-1|(と|synload-2|)の自
343     |   動実行コマンドが実行される。これにより次のコマンドでメインとなる構文
344     |   ファイルが'runtimepath'から読込まれる。
345     |           runtime! syntax/<name>.vim
346     |
347     +-  ユーザがインストールしたその他のFileTypeおよびSyntaxオートコマンドが
348         実行される。これは特定の構文のハイライトを変更するのに使うことができる。
350 ==============================================================================
351 4. 構文ファイルの覚書                                    *:syn-file-remarks*
353                                                 *b:current_syntax-variable*
354 Vimはロードした構文の名前を変数"b:current_syntax"に記憶している。ある構文が有
355 効な場合だけある設定を行うにはこの変数が利用できる。例: >
356    :au BufReadPost * if b:current_syntax == "csh"
357    :au BufReadPost *   do-some-things
358    :au BufReadPost * endif
361 2HTML                                           *2html.vim* *convert-to-HTML*
363 これは構文ファイルではなくて、現在のウィンドウの内容をHTMLに変換するスクリプト
364 である。Vimは新しいウィンドウを作成しそこにHTMLファイルを構築する。
366 使う際にはオプション'filetype'や'syntax'に"2html"を設定してはならない!
367 現在のファイルをコンバートするためにはこのスクリプトを読込む: >
369         :runtime! syntax/2html.vim
371         警告: この処理には時間がかかる!
373                                                         *:TOhtml*
374 またはユーザコマンド":TOhtml"を使ってもよい。これは標準プラグイン中で定義され
375 ている。":TOhtml"は範囲指定やビジュアルモードにも対応している: >
377         :10,40TOhtml
379 出力結果をファイルに保存すれば、あらゆるNetscapeのようなHTML Viewerでそれを観
380 ることができる。Vimで表示されるのと寸分たがわぬ色が再現される。
382 変換の範囲を指定するには、"html_start_line"と"html_end_line"をその範囲の最初と
383 最後に設定すること。例えば、最後に選択された範囲だけを変換するには: >
385         :let html_start_line = line("'<")
386         :let html_end_line = line("'>")
388 オプション'number'が設定されている場合には、各行にNumberでハイライトされた行番
389 号が付加される。"html_number_lines"に非0の値を設定すれば、HTMLの出力へ強制的に
390 行番号を付加することができる: >
391    :let html_number_lines = 1
392 この変数に0を設定すれば行番号を強制的に省略できる: >
393    :let html_number_lines = 0
394 この変数を削除すれば元通り'number'に従うように戻すことができる: >
395    :unlet html_number_lines
397 閉じた折り畳みは、画面表示通りに HTML に出力される。これが好ましくないなら、
398 2html を呼ぶ前にコマンド |zR| を使うか、または次のようにする: >
399    :let html_ignore_folding = 1
401 デフォルトでは、古いブラウザ用に最適化されたHTMLが生成される。属性を表現するの
402 にカスケードスタイルシートを使用したい場合には次の設定を使用する(結果的にかな
403 り短いHTML 4に準拠したファイルが得られる): >
404    :let html_use_css = 1
406 デフォルトでは、テキストの周りに"<pre>"と"</pre>"がつけられる。これによって、
407 ブラウザでも折り返しをせずに、Vimで表示される通りになる。一部が少々変わっても
408 いいから折り返しをさせたいなら、次のようにする: >
409    :let html_no_pre = 1
410 こうすると、各行末に<br>を使い、連続するスペースに"&nbsp;"を使うようになる。
412 HTMLファイルの文字集合の指定には現在の'encoding'の値が使われる。ただしこれは
413 'encoding'の値が同値なHTML文字集合名を持つ場合だけ機能する。これを上書きするに
414 は、g:html_use_encodingを使用したい文字集合名にセットすればよい: >
415    :let html_use_encoding = "foobar"
416 文字集合指定の行を省略するには、g:html_use_encodingを空文字列にする: >
417    :let html_use_encoding = ""
418 自動的に判断する設定に戻したいなら、変数g:html_use_encodingを削除する: >
419    :unlet html_use_encoding
421 差分モードにおいて、3行以上連続した削除行(訳注:他方のファイルに行が挿入されて
422 いることを示す行)は3行で表示され、そこに何行挿入されているかが真ん中の行に表示
423 される。挿入された行数分の空行を表示させたい場合は、次のようにする: >
424     :let html_whole_filler = 1
425 3行で表示するように戻すにはこうする: >
426     :unlet html_whole_filler
428                                             *convert-to-XML* *convert-to-XHTML*
429 代わりにXHTML(XML準拠のHTML)を生成するスクリプトを使うこともできる。そうするに
430 は変数"use_xhtml"をセットする: > :let use_xhtml = 1
431 これを無効にするにはこの変数を削除する: >
432     :unlet use_xhtml
433 生成されたXHTMLファイルはDocBook XMLドキュメントで使用できる。次を参照:
434         http://people.mech.kuleuven.ac.be/~pissaris/howto/src2db.html
436 覚書き:
437 - この機能はGUIをサポートしたバージョンでしか動作しない。(X11などの)GUIが実際
438   に機能していない状況でも動作はするが、良い結果は得られない(色が異なってしま
439   う)。
440 - 古いブラウザでは背景色が表示されないことがある。
441 - 大半のブラウザでは(なんとカラーで)印刷することができる!
443 ここではUNIXのシェル上で全ての.cと.hをコンバートする方法を例として示す: >
444    for f in *.[ch]; do gvim -f +"syn on" +"run! syntax/2html.vim" +"wq" +"q" $f; done
447 ABEL                                            *abel.vim* *ft-abel-syntax*
449 ABELのハイライトにはユーザが定義できるオプションが幾つかある。それらを有効化す
450 るにはそれぞれの変数に何か値を設定すれば良い。例: >
451         :let abel_obsolete_ok=1
452 無効化するには":unlet"を使用する。例: >
453         :unlet abel_obsolete_ok
455 変数                              ハイライト ~
456 abel_obsolete_ok                古いキーワードをエラーでなく命令文として扱う
457 abel_cpp_comments_illegal       '//'をインラインコメントリーダとして扱わない
462 |ft-ada-syntax|を参照。
465 ANT                                             *ant.vim* *ft-ant-syntax*
467 ANTの構文ファイルにはデフォルトでJavaScriptとPythonの構文ハイライトが含まれて
468 いる。関数AntSyntaxScript()の第1引数にタグ名を、第2引数にファイル名を指定する
469 ことでその他のスクリプト言語用構文ハイライトをインストールすることができる。
470 例: >
472         :call AntSyntaxScript('perl', 'perl.vim')
474 これは次のようなANTのコードにPerlの構文ハイライトをインストールするものである >
476         <script language = 'perl'><![CDATA[
477             # everything inside is highlighted as perl
478         ]]></script>
480 スクリプト言語を永続的にインストールするには|mysyntaxfile-add|を参照。
483 APACHE                                          *apache.vim* *ft-apache-syntax*
485 apacheの構文ファイルはApache HTTPサーバのバージョンに基づいた構文ハイライトを
486 提供する(デフォルトでは1.3.x)。他のバージョン用の構文ハイライトを利用するには
487 "apache_version"にApacheのバージョンを文字列としてセットする。例: >
489         :let apache_version = "2.0"
492                 *asm.vim* *asmh8300.vim* *nasm.vim* *masm.vim* *asm68k*
493 アセンブリ言語 *ft-asm-syntax* *ft-asmh8300-syntax* *ft-nasm-syntax*
494                 *ft-masm-syntax* *ft-asm68k-syntax* *fasm.vim*
496 "*.i"にマッチする名前のファイルのタイプはProgressかアセンブリである。自動検出
497 が動作しない場合や、Progressを編集しないことが判っている場合には、起動設定ファ
498 イルvimrcに次のコマンドを書くことができる: >
499    :let filetype_i = "asm"
500 "asm"には使用するアセンブリ言語の種類を指定する。
502 ファイル名の同じ拡張子を使用しているアセンブリ言語には沢山の種類がある。従って
503 ユーザは自分が使用する種類を選択するか、もしくはアセンブリファイルそのものに
504 Vimがそれと判断できるような行を追加しなければならない。現在は以下の構文ファイ
505 ルが利用可能:
506         asm             GNUアセンブラ(デフォルト)
507         asm68k          モトローラ680x0アセンブラ
508         asmh8300        日立H-8300用GNUアセンブラ
509         ia64            インテルItanium 64
510         fasm            Flat アセンブラ (http://flatassembler.net)
511         masm            マイクロソフトアセンブラ(たぶん80x86汎用)
512         nasm            ネットワイドアセンブラ
513         tasm            ターボアセンブラ(80x86,Pentium,MMXの命令コードを含む)
514         pic             PICアセンブラ(現在はPIC16F84用)
516 アセンブリファイルに次のような行を書き加えるのが一番柔軟である: >
517         :asmsyntax=nasm
518 "nasm"は実際に使用するアセンブリ構文の名前に置き換える。このような記述はファイ
519 ルの先頭5行以内に書いてなければならない。
521 構文の種類はバッファ変数b:asmsyntaxを設定することで常にそちらが優先される: >
522         :let b:asmsyntax=nasm
524 自動にしろ手動にしろb:asmsyntaxが設定されていないときには、グローバル変数
525 asmsyntaxが使用される。これによりデフォルトのアセンブリ言語を設定することがで
526 きる: >
527         :let asmsyntax=nasm
529 最後の手段として、何も設定されていない場合には、"asm"構文が使用される。
532 ネットワイドアセンブラ(nasm.vim)の補助ハイライト ~
534 機能を有効化するには: >
535         :let   {variable}=1|set syntax=nasm
536 無効化するには: >
537         :unlet {variable}  |set syntax=nasm
539 変数                      ハイライト内容 ~
540 nasm_loose_syntax       非オフィシャルな拡張構文をエラーとしない
541                           (パーザ依存; 非推奨)
542 nasm_ctx_outside_macro  マクロ外のコンテキストをエラーとしない
543 nasm_no_warn            潜在的に危険な構文をToDoとしてハイライトしない
546 ASPPERL and ASPVBS                      *ft-aspperl-syntax* *ft-aspvbs-syntax*
548 *.aspと*.aspという名のファイルはどちらもPerlもしくはVisual Basicのスクリプトた
549 りえる。Vimにとってこれを判別するのは難しいので、グローバル変数を設定すること
550 でどちらを使用するのか宣言することができる。どちらでもPerlスクリプトを使用する
551 なら: >
552         :let g:filetype_asa = "aspperl"
553         :let g:filetype_asp = "aspperl"
554 Visual Basicを使用するなら次のように設定する: >
555         :let g:filetype_asa = "aspvbs"
556         :let g:filetype_asp = "aspvbs"
559 BAAN                                                *baan.vim* *baan-syntax*
561 baan.vim は リリース BaanIV から SSA ERP LN まで、3 GL と 4 GL プログラミング
562 両方に対応した構文を定義している。たくさんの標準的な定義/定数がサポートされて
563 いる。
565 次を |.vimrc| に書いておくと、ある種のコーディング標準違反を教えてくれる: >
566         let baan_code_stds=1
568 *baan-folding*
570 以下の変数によって、様々なレベルで構文折り畳みを有効にできる (これらはユーザの
571 |.vimrc| で設定すること)。ソースブロックと SQL についてより複雑な折り畳みを行
572 うと CPU に負荷がかかる。
574 折り畳みを有効にし、関数レベルで折り畳みをするにはこうする: >
575         let baan_fold=1
576 次の設定を行うと、if, while, for ... のようなソースブロックレベルの折り畳みが
577 有効になる。キーワード begin/end の前のインデントが等しくなければならない (ス
578 ペースとタブは異なるとみなされる)。 >
579         let baan_fold_block=1
580 次を設定すると SELECT, SELECTDO, SELECTEMPTY ... のような埋め込み SQL ブロック
581 の折り畳みが有効になる。キーワード begin/end の前のインデントが等しくなければ
582 ならない (スペースとタブは異なるとみなされる)。 >
583         let baan_fold_sql=1
584 Note: ブロック折り畳みを有効にすると、小さな折り畳みがたくさんできるかもしれな
585 い。|.vimrc| でオプション 'foldminlines' と 'foldnestmax' を |:set| するか、...
586 /after/syntax/baan.vim 内で |:setlocal| をする (|after-directory| を参照) とよ
587 いかもしれない。例: >
588         set foldminlines=5
589         set foldnestmax=6
592 BASIC                   *basic.vim* *vb.vim* *ft-basic-syntax* *ft-vb-syntax*
594 Visual Basicも「通常の」BASICも、どちらも拡張子には".bas"が使用される。どちら
595 が使用されているか判別するのに、Vimはファイルの先頭5行以内に"VB_Name"という文
596 字列が存在するかどうかを検査する。存在しなければ、ファイル形式は"basic"とな
597 り、そうでなければ"vb"となる。拡張子が".frm"のファイルは常にVisual Basicとして
598 扱われる。
601 C                                                       *c.vim* *ft-c-syntax*
603 Cには幾つかの補助的なハイライト方法がある。それらを有効化するには対応した変数
604 に値を設定する。例: >
605         :let c_comment_strings=1
606 これを無効化するには":unlet"を使う。例: >
607         :unlet c_comment_strings
609 変数                      ハイライト内容 ~
610 c_gnu                   GNU gcc固有の要素
611 c_comment_strings       コメント内の文字列と数値
612 c_space_errors          行末の空白文字とタブ文字前のスペース文字
613 c_no_trail_space_error   ... 但し行末の空白文字は除外
614 c_no_tab_space_error     ... 但しタブ文字前のスペース文字は除外
615 c_no_bracket_error      []の中の{}をエラーとして表示しない
616 c_no_curly_error        { と } が第1桁にあるときを除き、[] と () の内側の {}
617                         をエラーとして表示しない。
618 c_no_ansi               ANSI標準の型と定数をハイライトしない
619 c_ansi_typedefs          ... 但し標準ANSI型はハイライトする
620 c_ansi_constants         ... 但し標準ANSI定数はハイライトする
621 c_no_utf                文字列中の\uと\Uをハイライトしない
622 c_syntax_for_h          ファイル*.hにC++ではなくCの構文を適用する
623 c_no_if0                "#if 0"のブロックをコメントとしてハイライトしない
624 c_no_cformat            文字列中の"%"によるフォーマットをハイライトしない
625 c_no_c99                C99の標準アイテムをハイライトしない
627 'foldmethod' が "syntax" に設定されていると、/* */ のコメントと { } のブロック
628 が折り畳まれる。コメントを折り畳みたくなければこのようにする: >
629         :let c_no_comment_fold = 1
630 "#if 0" のブロックも同様に折り畳まれる。折り畳みたくなければこのようにする: >
631         :let c_no_if0_fold = 1
633 上方向にスクロールしているときにハイライト表示がおかしくなり、それが<CTRL-L>で
634 再描画すると直るようなら、内部変数"c_minlines"にもっと大きな値を設定すれば解決
635 できるかもしれない: >
636         :let c_minlines = 100
637 これにより構文判定のシンクロナイズ位置が表示開始行の100行手前に設定される。初
638 期設定の値は50行(c_no_if0を使用した場合は15行)である。ただしこれには、大きな値
639 を設定すると再描画が遅くなるという短所がある。
641 "#if 0" / "#endif"のブロックをコメントとしてハイライトしている場合には、
642 "#if 0"がウィンドウのトップから"c_minlines"以内にある時にしか正しく動作しない
643 ことに注意する。長い"#if 0"のブロックを使用した場合には、それは正しくハイライ
644 トされない。
646 コメント内で追加要素にマッチを行なうには、クラスタcCommentGroupを使用する。
647 例: >
648    :au Syntax c call MyCadd()
649    :function MyCadd()
650    :  syn keyword cMyItem contained Ni
651    :  syn cluster cCommentGroup add=cMyItem
652    :  hi link cMyItem Title
653    :endfun
655 ANSIの定数はグループ"cConstant"でハイライトされる。これには"NULL", "SIG_IGN"や
656 その他のものが含まれる。しかしANSI標準でないもの、例えば"TRUE"は含まれない。も
657 しもこれが紛らわしいならば、cConstant用のハイライトを削除する: >
658         :hi link cConstant NONE
660 文法上エラーではないはずの'{'と'}'がエラーとしてハイライトされてしまう場合には、
661 cErrInParen及びcErrInBracketのハイライトをリセットする。
663 Cファイルで折り畳みをするには、以下の行を'runtimepath'中の"after"ディレクトリ
664 内のファイルに加えるとよい。Unixなら~/.vim/after/syntax/c.vimに加えるとよいだ
665 ろう: >
666     syn region myFold start="{" end="}" transparent fold
667     syn sync fromstart
668     set foldmethod=syntax
670 CH                                              *ch.vim* *ft-ch-syntax*
672 C/C++ インタープリタ。Ch は C に似た構文ハイライトを持ち、C の構文ファイルに基
673 づいている。C で利用できる設定については |c.vim| を参照。
675 変数を設定すれば、*.h ファイルに対して C, C++ でなく Ch の構文を使うようにする
676 ことができる: >
677         :let ch_syntax_for_h = 1
680 CHILL                                           *chill.vim* *ft-chill-syntax*
682 Chillの構文ハイライトはCに似ている。設定に関しては|c.vim|を参照。それに加えて
683 次のものがある:
685 chill_space_errors      c_space_errors と同様
686 chill_comment_string    c_comment_strings と同様
687 chill_minlines          c_minlines と同様
690 CHANGELOG                               *changelog.vim* *ft-changelog-syntax*
692 ChangeLogでは行頭のスペースのハイライトできる。これをオフにしたいなら、次の行を
693 .vimrcに加える: >
694         let g:changelog_spacing_errors = 0
695 これは次にchangelogファイルを編集するときから有効になる。バッファごとに設定す
696 るには"b:changelog_spacing_errors"を使う(構文ファイルを読み込む前に設定するこ
697 と)。
699 例えばスペースをエラーとするかどうかなどのハイライト方法を変えることができる: >
700         :hi link ChangelogError Error
701 ハイライトをやめるには: >
702         :hi link ChangelogError NONE
703 これは即座に有効になる。
706 COBOL                                           *cobol.vim* *ft-cobol-syntax*
708 既存のCOBOLコードに要求されるハイライト方法と、新規に開発されるコードに要求さ
709 れるそれには違いがある。この違いはコードのおかれている状況(保守 vs 開発)やその
710 他の要素によって決定する。既存コードのハイライトを行なうには.vimrcに次の行を加
711 える: >
712         :let cobol_legacy_code=1
713 これを再び無効にするには次のようにする: >
714         :unlet cobol_legacy_code
717 COLD FUSION                     *coldfusion.vim* *ft-coldfusion-syntax*
719 ColdFusionには独自版のHTMLコメントが存在する。ColdFusionのコメントハイライトを
720 有効化するには、次の行を起動設定ファイルに加える: >
722         :let html_wrong_comments=1
724 ColdFusionの構文ファイルはHTML用構文ファイルに基づいている。
727 CSH                                             *csh.vim* *ft-csh-syntax*
729 これは"csh"という名前のシェルに対応している。システムによっては実際に使われて
730 いるのがtcshである場合もあることに注意。
732 ファイルがcshかtcshかを判定するのは難しいことがよく知られている。いくつかのシ
733 ステムでは/bin/cshを/bin/tcshにシンボリックリンクしていることが、この判別をほ
734 ぼ不可能にしている。Vimが間違った判定をする場合には変数"filetype_csh"を設定す
735 ることが出来る。cshを使うには: >
737         :let filetype_csh = "csh"
739 tcshを使うには: >
741         :let filetype_csh = "tcsh"
743 拡張子がtcshであるか標準的なtcshファイル名(.tcshrc, tcsh.tcshrc, tcsh.login)を
744 持つスクリプトはすべてtcshファイル形式とされる。他のtcsh/cshスクリプトは、
745 "filetype_csh"変数が存在しない限り、すべてtcshとみなされる。変数"filetype_csh"
746 が存在するならファイル形式はその値にセットされる。
749 CYNLIB                                          *cynlib.vim* *ft-cynlib-syntax*
751 Cynlibファイルは、ハードウェアのモデリングとシミュレーションを行なうCynlibクラ
752 スライブラリを使用したC++ファイルである。通常Cynlibのファイルは.ccや.cppという
753 拡張子を持つので、CynlibではないC++ファイルと区別するのは非常に困難である。だ
754 から.ccファイルをCynlibでハイライトする際には、ファイル.vimrcに次の行を加える:
757         :let cynlib_cyntax_for_cc=1
759 cppファイルについても同様(この拡張子は通常Windowsだけで使用される) >
761         :let cynlib_cyntax_for_cpp=1
763 これらを再び無効にするには次のコマンドを使用する: >
765         :unlet cynlib_cyntax_for_cc
766         :unlet cynlib_cyntax_for_cpp
769 CWEB                                            *cweb.vim* *ft-cweb-syntax*
771 "*.w"にマッチする名前のファイルのタイプはProgressかCWEBである。自動検出が動作
772 しない場合や、Progressを編集しないことが判っている場合には、起動設定ファイル
773 vimrcに次のコマンドを書くとよい: >
774    :let filetype_w = "cweb"
777 DESKTOP                                    *desktop.vim* *ft-desktop-syntax*
779 この構文ファイルの本来の目的は、freedesktop.org標準
780 (http://pdx.freedesktop.org/Standards/参照) の.desktopと.directoryファイルを
781 構文ハイライトすることである。しかし実際にはこの標準を完全に実装したものはほと
782 んどない。なのでこれは全てのiniファイルをハイライトする。ただし次をvimrcファイ
783 ルに書くことによって厳格に標準に準拠したハイライトをさせることもできる: >
784         :let enforce_freedesktop_standard = 1
787 DIRCOLORS                              *dircolors.vim* *ft-dircolors-syntax*
789 dircolorsユーティリティ用のハイライト定義には、Slackware GNU/Linuxディストリ
790 ビューション版のdircolorsに対応するためのオプションがある。このオプションはほ
791 とんどのバージョンでは無視されるいくつかのキーワードを付け加える。しかし
792 Slackwareシステムではdircolorsはこれらのキーワードを認め、処理に用いる。
793 Slackwareキーワードを有効化するには次を起動設定ファイルに付け加えればよい: >
794         let dircolors_is_slackware = 1
797 DOCBOOK                                 *docbk.vim* *ft-docbk-syntax* *docbook*
798 DOCBOOK XML                             *docbkxml.vim* *ft-docbkxml-syntax*
799 DOCBOOK SGML                            *docbksgml.vim* *ft-docbksgml-syntax*
801 DocBookファイルには2つの種類: SGMLとXMLがある。どちらのタイプを使用するのかを
802 指定するには変数"b:docbk_type"をセットする。Vimがそのタイプを認識できた場合に
803 はこれを自動的に行う。認識できなかった場合にはデフォルトはXMLになる。
804 これを手動で設定するには: >
805         :let docbk_type = "sgml"
806 または: >
807         :let docbk_type = "xml"
808 これは構文ファイルを読み込む前に行う必要がある。しかし構文ファイルの読み込みは
809 込み入っている。より単純な方法はファイル形式を"docbkxml"または"docbksgml"にセ
810 ットすることである: >
811         :set filetype=docbksgml
812 または: >
813         :set filetype=docbkxml
816 DOSバッチファイル                      *dosbatch.vim* *ft-dosbatch-syntax*
818 DOSバッチファイルのハイライトにはオプションが1つある。このオプションにより
819 Windows 2000で導入されたコマンドインタプリタの新しい拡張機能がサポートされ、変
820 数dosbatch_cmdextversionによりその有効/無効が制御される。Windows NTでは値1を設
821 定し、Windows 2000では2を設定するのが良い。次のようにすれば使用するバージョン
822 を選択できる: >
824   :let dosbatch_cmdextversion = 1
826 変数が定義されていない際のデフォルトはWindows 2000をサポートする2となる。
828 2番目のオプションは、*.btm ファイルを "dosbatch" (MS-DOS バッチファイル) タイ
829 プか "btm" (4DOS バッチファイル) タイプのどちらと判定するかを指定する。デフォ
830 ルトでは後者が使われる。前者を使うには、次のようにする: >
832    :let g:dosbatch_syntax_for_btm = 1
834 この変数が定義されていない、または0であると btm の構文が使われる。
836 DOXYGEN                                         *doxygen.vim* *doxygen-syntax*
838 Doxygen は JavaDoc に似た特殊なフォーマットからコードのドキュメントを生成する。
839 この構文スクリプトは c, cpp, idl のファイルに対して Doxygen のハイライトを追加
840 する。また、Java に対しても使える。
842 Doxygen のフォーマットを有効にするにはいくつかの方法がある。手動、またはモード
843 ラインでそのファイルの syntax に '.doxygen' を追加する。例: >
844         :set syntax=c.doxygen
845 または  >
846         // vim:syntax=c.doxygen
848 c, cpp, idl のファイルに対しては、グローバルまたはバッファローカルな変数
849 load_doxygen_syntax を設定すれば自動的にこれが行われる。次の行を .vimrc に加え
850 る。 >
851         :let g:load_doxygen_syntax=1
853 構文ハイライトに影響を与える変数がいくつかある。また、これらは標準でないハイラ
854 イトオプションに関係している。
856 変数                              既定値     効果 ~
857 g:doxygen_enhanced_color
858 g:doxygen_enhanced_colour       0       Doxygen コメントに対して標準でないハイ
859                                         ライトを行う。
861 doxygen_my_rendering            0       HTML の太字、斜体、html_my_rendering
862                                         に対する下線の描画を無効にする。
864 doxygen_javadoc_autobrief       1       0にすると JavaDoc の autobrief に対す
865                                         るハイライトを無効にする。
867 doxygen_end_punctuation         '[.]'   brief の終わりを示す句読点にマッチする
868                                         正規表現。
870 また、次のハイライトグループを設定すると便利である。
872 ハイライト                           効果 ~
873 doxygenErrorComment             code, verbatim, dot セクション中で句読点が抜け
874                                 ている終了コメントの色
875 doxygenLinkError                \link セクションで \endlink が抜けているときの
876                                 終了コメントの色。
879 DTD                                             *dtd.vim* *ft-dtd-syntax*
881 初期状態ではDTD構文ハイライトは大/小文字を区別する。区別しないようにするには、
882 起動設定ファイルに次の行を書き足す: >
884         :let dtd_ignore_case=1
886 DTD構文ファイルでは未知のタグをエラーとしてハイライトする。これが煩わしいなら
887 ば、構文ファイルdtd.vimが読込まれる前に: >
889         :let dtd_no_tag_errors=1
891 と設定することで無効化することができる。定義部内のパラメータのエンティティ名は
892 ハイライトグループ'Type'、句読点と'%'は'Comment'を使用してハイライトされる。パ
893 ラメータエンティティの実体はハイライトグループ'Constant'を、区切り文字の%と;は
894 ハイライトグループ'Type'を使用してハイライトされる。以下を設定するとこれを無効
895 化できる: >
897         :let dtd_no_param_entities=1
899 XML内の埋め込みDTDをハイライト表示するために、DTDの構文ファイルはxml.vimからも
900 参照される。
903 EIFFEL                                  *eiffel.vim* *ft-eiffel-syntax*
905 Eiffelは大小文字の区別をしないけれども、スタイルガイドラインが示すように、構文
906 ハイライトではそれらが区別される。これにより大小文字が違えば違うクラス名として
907 ハイライト表示することが可能になっている。大小文字の違いを無視してハイライトを
908 行なうならば、起動設定ファイルに次の行を書き足す: >
910         :let eiffel_ignore_case=1
912 これを行なってもコメント内のクラス名とTODOの印には大小文字の区別がなされる。
914 逆に、もっと厳密に検査するには、次の行のいずれかを書き足す: >
916         :let eiffel_strict=1
917         :let eiffel_pedantic=1
919 eiffel_strictを設定すると"Current", "Void", "Result", "Precursor"そして"NONE"
920 の5つの既定単語について、不正な大小文字の使用を捕捉し、機能やクラス名としてそ
921 れらが使用されれば警告を与えるようになる。
923 eiffel_pedanticを設定すると、Eiffelのスタイルガイドラインを相当に厳格に強制す
924 る。(キーワードを大文字で書く時代遅れの方法と同様に、大小文字を任意にミックス
925 したようなものが補足される)
927 "Current", "Void", "Result"そして"Precursor"の小文字版を使用するには、大小文字
928 を区別するハイライト方法を無効化する代わりに: >
930         :let eiffel_lower_case_predef=1
932 という方法を使うことができる。
934 ISEが提案し、実験的に幾つかのコンパイラでは取り扱うことのできる、新しい生成構
935 文は次のコマンドで使用できるようになる: >
937         :let eiffel_ise=1
939 最後に幾つかのベンダは16進数定数値をサポートしている。それを取り扱うには: >
941         :let eiffel_hex_constants=1
943 この行を起動設定ファイルに書き足す。
946 ERLANG                                          *erlang.vim* *ft-erlang-syntax*
948 これはErlang(ERicsson LANGuage: エリクソン言語)をサポートする構文ハイライトファ
949 イルである。Erlangは大小文字を区別しデフォルトの拡張子は".erl"である。
951 キーワードハイライトを無効化するには、これを.vimrcに書き足す: >
952         :let erlang_keywords = 1
953 組み込み関数ハイライトを無効化するには、これを.vimrcに書き足す: >
954         :let erlang_functions = 1
955 特殊文字のハイライトを無効化するには、これを.vimrcに書き足す: >
956         :let erlang_characters = 1
959 FLEXWIKI                                *flexwiki.vim* *ft-flexwiki-syntax*
962 FlexWiki は http://www.flexwiki.com で入手できる ASP.NET ベースの wiki パッケ
963 ージである。
965 FlexWiki の構文のほとんどの一般的な要素に対して構文ハイライトができる。
966 FlexWiki のtplugin スクリプトはバッファローカルなオプションを設定し、FlexWiki
967 ページの編集をより便利にする。FlexWiki は改行を新しい段落の開始とみなすので、
968 このftplugin は 'tw' を0に設定し (行の長さを制限しない)、'wrap' をオンにし (長
969 い行を水平スクロールさせるのでなく、折り返す)、'linebreak' をオンにする (画面
970 上の最後の文字でなく 'breakat' の文字で折り返す)、などを行う。また、デフォルト
971 では無効にされているキーマップも含んでいる。
973 "j"、"k"、カーソルキーで表示行単位で移動するようにするキーマップを有効にするに
974 は次を .vimrc に追加する: >
975         :let flexwiki_maps = 1
978 FORM                                            *form.vim* *ft-form-syntax*
980 FORMファイルの構文要素に使用するカラースキームには、Conditional, Number,
981 Statement, Comment, PreProc, Type, そしてStringが、次の文献で定義される言語仕
982 様に沿って行なわれる。
983 文献: 'Symbolic Manipulation with FORM' by J.A.M. Vermaseren, CAN,
984       Netherlands, 1991.
986 初期設定の色に変更を加えるには、次の構文グループを再定義すれば良い:
988     - formConditional
989     - formNumber
990     - formStatement
991     - formHeaderStatement
992     - formComment
993     - formPreProc
994     - formDirective
995     - formType
996     - formString
998 構文ファイルform.vimではFORMプリプロセッサコマンドとディレクティブをそれぞれ、
999 デフォルトでは同じ構文グループにしていることに注意。
1001 FORM用の既定の拡張カラーモードではヘッダ命令とFORMプログラム本体での命令を区別
1002 できるような色設定が利用可能である。拡張カラーモードを使用可能にするには、ファ
1003 イルvimrcに次の設定を書き足す: >
1005         :let form_enhanced_color=1
1007 拡張モードを使うことは、gvimで暗いディスプレイを使用した場合にも利点がある。命
1008 令文は黄色ではなく明るい黄色で表示され、条件文は視認性のため明るい青で表示され
1009 る。
1012 FORTRAN                                 *fortran.vim* *ft-fortran-syntax*
1014 デフォルトのハイライトと方言 ~
1015 デフォルトではf95(Fortran 95)に相当するハイライトが行なわれる。Fortran 95は
1016 Fortran 90のスーパーセットであり、かつFortran 77のほぼスーパーセットであるから、
1017 多くのユーザの多くのケースにとって適切な選択である。
1019 Fortranソースコードの形式 ~
1020 Fortran 9xのソースコードには固定形式と自由形式が有る。形式が誤って設定されてい
1021 ると構文ハイライトが正しくされないことに注意。
1023 新規にFortranのファイルを作成する場合には、構文ファイルは固定形式であると仮定
1024 する。常に自由形式を使う場合には >
1025     :let fortran_free_source=1
1026 これを.vimrcでコマンド:syntaxを実行する前に行なう必要がある。常に固定形式を使
1027 うには >
1028     :let fortran_fixed_source=1
1029 これも.vimrcでコマンド:syntaxを実行する前に行う必要がある。
1031 ソースコードの形式がファイル拡張子によって決定できる場合には、ftpluginファイル
1032 の1つでfortran_free_sourceを設定すると便利になる。ftpluginファイルについての詳
1033 細は|ftplugin|を参照のこと。例えば、拡張子.f90を持つファイルについては全て自由
1034 形式として扱い、それ以外のものは固定形式とする場合には、次のコードをftpluginフ
1035 ァイルに記述すれば良い。 >
1036     let s:extfname = expand("%:e")
1037     if s:extfname ==? "f90"
1038         let fortran_free_source=1
1039         unlet! fortran_fixed_source
1040     else
1041         let fortran_fixed_source=1
1042         unlet! fortran_free_source
1043     endif
1044 これは.vimrcで"syntax on"より前に"filetype plugin indent on"が書かれていないと
1045 機能しないことに注意。
1047 既存のFortranファイルを編集する時には、変数fortran_free_sourceが設定されていれ
1048 ば構文ファイルは自由形式のソースであると仮定し、変数fortran_fixed_sourceが設定
1049 されていれば固定形式のソースであると仮定する。どちらも設定されていないときには
1050 、ファイルの先頭250行の行頭5カラムを調べて、その形式が固定なのか自由なのかを決
1051 定しようと試みる。自由形式コードの兆候が見られない場合には、ファイルは固定形式
1052 コードとして取り扱われる。このアルゴリズムはほとんどのケースにおいて有効に機能
1053 する。しかしいくつかのケース、例えば先頭250行以上が行コメントで占められている
1054 ようなファイルでは、構文ファイルが固定形式コードであると誤った判断をしてしまう
1055 だろう。そのような場合には、ファイルの先頭250行の行頭5桁のどこかに、コメント以
1056 外の命令文を追加し、ファイルの保存(:w)そして再読込(:e!)を行なえば良い。
1058 Fortranファイル内のタブ文字 ~
1059 標準のFortranではタブ文字は認識されない。固定桁位置での境界を必要とする固定形
1060 式のFortranソースコードでタブ文字を使用するのは良いアイデアではない。従ってタ
1061 ブ文字はエラーとしてハイライトされる。しかしながらプログラマーによってはタブ文
1062 字を使用することを望む場合があるだろう。Fortranファイルにタブ文字が含まれてい
1063 る場合には、変数fortran_have_tabsをコマンド:syntaxが実行される前に >
1064     :let fortran_have_tabs=1
1065 このように.vimrcで設定すれば良い。タブ文字を使う場合には残念ながら、構文ファイ
1066 ルによって不正な余白を検出することができなくなる。
1068 Fortranファイルの構文による折り畳み ~
1069 foldmethod=syntaxを使用したいならば、まず変数fortran_foldを >
1070     :let fortran_fold=1
1071 このようなコマンドで設定しなければならない。これにより構文ファイルはプログラム
1072 単位の領域、プログラム命令文で始まるメインプログラム、サブルーチン、関数、サブ
1073 プログラム、ブロックデータサブプログラム、そしてモジュールといったプログラム単
1074 位の領域で折り畳みを定義する。同時に変数fortran_fold_conditionalsを >
1075     :let fortran_fold_conditionals=1
1076 このように設定すると、doループ、ifブロック、そしてselect-case構造の領域が折り
1077 畳まれる。さらに変数fortran_fold_multilinecommentsも >
1078     :let fortran_fold_multilinecomments=1
1079 このように設定すれば、3行以上にわたって続くコメントの領域が折り畳まれる。大き
1080 なファイルに対してこのように構文による折り畳みを使用すると、非常に遅くなること
1081 に注意。
1083 fortran_foldを設定し、fortran_fold_conditionalsか
1084 fortran_fold_multilinecomments(どちらか片方でも両方でも)を設定した場合には、
1085 foldmethod=syntaxを設定してある時に、Vimはファイルを折り畳む。2つのプログラム単
1086 位の間にあるコメントや空行は折り畳まれない。なぜならそれらは構文によって定義され
1087 るプログラム単位に属していないからである。
1089 より正確なFortranの構文 ~
1090 変数fortran_more_preciseを >
1091     :let fortran_more_precise=1
1092 このようなコマンドで設定した場合には、構文ハイライトがより正確になるが動作は遅
1093 くなる。とりわけ、do、goto、そして算術if命令文に使用される命令ラベルが、do、if、
1094 selectもしくはforall構造の終端で使用される名前として認識されるようになる。
1096 非標準のFortran方言 ~
1097 構文ファイルは5つのFotranの方言をサポートしている: f95, f90, f77, the Lahey
1098 サブセットの elf90, そして Imagine1 サブセットの F.
1100 f77の拡張機能を使うときには、それがg77(GNU Fortran)を含む多くのコンパイラがサ
1101 ポートしている一般的な、do/enddoループ、do/whileループ、自由形式ソースコード、
1102 拡張機能であるならば、恐らくデフォルトのハイライトで満足できるだろう。しかしな
1103 がら、拡張機能を使用せずに厳密なf77を使用する場合や、自由形式やMIL STD 1753の
1104 拡張を用いない場合には問題がある。そのような時に方言としてf77を指定することに
1105 は、SUMのようなf9xの持つ関数として認識されてしまう名前が、ユーザ変数として認識
1106 されハイライトされないという利点がある。また廃れてしまったASSIGN命令文のような
1107 構造も修正用TODOとしてはハイライトされなくなり、固定形式が仮定されるようになる。
1109 elf90やFを使う場合には適切な方言を設定する。それにより、これらの方言においては
1110 除外されるf90の機能はtodoとしてハイライトされ、これらの方言で必要とされる自由
1111 形式のソースコードが仮定される。
1113 方言は変数fortran_dialectを設定することで選択できる。fortran_dialectに設定でき
1114 る値には大小文字の区別があり"f95"、"f70"、"elf"もしくは"F"である。無効な値を
1115 fortran_dialectへ設定した場合にはそれは無視される。
1117 全てのFortranファイルで同じ方言を使用するならば、.vimrcでsyntax onが実行される
1118 前にfortran_dialectを設定する。方言がファイルの拡張子に依存して決定する場合に
1119 は、ftpluginファイル内で設定するのが最良の手段である。ftpluginファイル付いての
1120 詳細な情報は、|ftplugin|を参照。例、全ての.f90という拡張子のファイルが"elf"サ
1121 ブセットにより書かれているならば、ftpluginファイルに次のようなコードを書き足す
1122 べきである >
1123     let s:extfname = expand("%:e")
1124     if s:extfname ==? "f90"
1125         let fortran_dialect="elf"
1126     else
1127         unlet! fortran_dialect
1128     endif
1129 これは.vimrcで"syntax on"より前に"filetype plugin indent on"が書かれていないと
1130 機能しないことに注意。
1132 拡張子が方言を一意に決定できない場合には、もっと良い制御方法が必要になる。各
1133 ファイルの先頭3行以内にコメントで"fortran_dialect=xx"という命令を書けば方言の
1134 設定を上書することができる(xxにはf77やelfやFやf90やf95が入る)。これによりファ
1135 イル毎に方言を設定できる。例えば、古い.fファイルはf77の拡張を使用して書かれて
1136 いるが、新しい.fファイルがFで書かれている場合には >
1137   ! fortran_dialect=F
1138 このような形で新しいファイルの先頭3行以内にコメントを追加することで、Fで書かれ
1139 ていることが判別できるようになる。Fとelfの両方が指定された場合には、Fの方が優
1140 先される。
1142 制限事項 ~
1143 丸カッコチェックは、閉じカッコの不足については捕捉できない。ホレリス定数は認識
1144 されない。幾つかのキーワードはFortran90の予約語ではないので誤ってハイライトさ
1145 れる。
1147 Fortranに関するその他の情報は|ft-fortran-indent|や|ft-fortran-plugin|を参照。
1149 FVWM CONFIGURATION FILES                        *fvwm.vim* *ft-fvwm-syntax*
1151 *fvwmrc*または*fvwm2rc*というパターンにマッチしないFvwm設定ファイルを認識させ
1152 るには、ファイルmyfiletypefile.vimであなたのシステムに合ったパターンを設定しな
1153 ければならない。具体的には、変数"b:fvwm_version"にFvwmのメジャーバージョンを指
1154 定し、オプション'filetype'にfvwmを設定する。
1156 例えば、/etc/X11/fvwm2/配下の全てのファイルをFvwm2の設定ファイルと認識させるに
1157 は次のようにする: >
1159   :au! BufNewFile,BufRead /etc/X11/fvwm2/*  let b:fvwm_version = 2 |
1160                                          \ set filetype=fvwm
1162 全ての有効な色の名前をVimにハイライトさせるには、システムの色データベース
1163 (rgb.txt)の位置を知らせる必要がある。これには変数"rgb_file"にその場所を設定す
1164 る。色データベースが/usr/X11/lib/X11/にあるとすれば: >
1166         :let rgb_file = "/usr/X11/lib/X11/rgb.txt"
1168 このような内容をファイル.vimrcに追加する。
1171 GSP                                             *gsp.vim* *ft-gsp-syntax*
1173 GSPページのデフォルトカラーは|html.vim|にて定義され、Javaコード(Javaタグ内部や
1174 インラインのバッククォート内)のカラーは|java.vim|にて定義される。インライン
1175 Javaコードをハイライトするために、|html.vim|で定義される以下のHTMLグループは、
1176 再定義されている:
1178     htmlString
1179     htmlValue
1180     htmlEndTag
1181     htmlTag
1182     htmlTagN
1184 書かれた大抵の場所のインラインJavaコードは適切にハイライトされるが、幾つかの特
1185 殊なケースではそうはならない。他のHTMLグループ内にインラインJavaコードを書いて
1186 それが正しくハイライトされない場合には、必要な行を|html.vim|からコピーして
1187 gspJavaをconstains節に加えれば、正しくハイライトされるようになる。
1189 インラインJavaを示すバッククォートは、目立ちやすくするためにhtmlErrorグループ
1190 でハイライトされる。
1193 GROFF                                           *groff.vim* *ft-groff-syntax*
1195 groff構文ファイルは|nroff.vim|のラッパーであり、使用例と設定例についてはそこの
1196 下に書かれている注意を参照。このラッパーの目的は、モードラインか個人用のファイ
1197 ル定義ファイル(|filetype.txt|参照)からファイル形式をセットすることにより、
1198 groff構文拡張を設定することである。
1201 HASKELL                      *haskell.vim* *lhaskell.vim* *ft-haskell-syntax*
1203 Haskell構文ファイルは、プレーンHaskellコードとliterate Haskellコード両方を
1204 サポートしている。後者はBirdスタイルとTeXスタイル両方に対応している。Haskell用
1205 の構文ハイライトはCプリプロセッサ命令もハイライトできる。
1207 区切り文字もハイライトさせるには(明るい背景色を使っているなら便利)、次を.vimrc
1208 に書き足す: >
1209         :let hs_highlight_delimiters = 1
1210 TrueとFalseを通常の識別子と区別してキーワードとして扱うにはこれを書き足す: >
1211         :let hs_highlight_boolean = 1
1212 プリミティブ型の名前をキーワードして扱うには: >
1213         :let hs_highlight_types = 1
1214 比較的一般的な型の名前をキーワードとして扱うには: >
1215         :let hs_highlight_more_types = 1
1216 デバッグ関数の名前をハイライトさせるには、これを.vimrcに書き足す: >
1217         :let hs_highlight_debug = 1
1219 Haskell用の構文ハイライトはCプリプロセッサ命令もハイライトし、#で始まるが命令
1220 として有効でない行をエラーとして警告する。Haskellの演算子の構文は#で始まること
1221 もあるため、これらが干渉する。これらをエラーでなく演算子としてハイライトしたい
1222 なら、次を.vimrcに書く: >
1223         :let hs_allow_hash_operator = 1
1225 literate Haskellコード用の構文ハイライトはファイルがTeXマークアップを含んでい
1226 るかどうか、それに応じてTeX要素をハイライトするかどうかを自動的に推測しようと
1227 する。.vimrcに次のような行を書くと、これをグローバルに上書きすることができる >
1228         :let lhs_markup = none
1229 と書くとまったくハイライトしなくする。または >
1230         :let lhs_markup = tex
1231 と書くと常にTeXマークアップをハイライトするように強制する。より柔軟に、この変
1232 数のバッファローカル版を使うことも出来る。例. >
1233         :let b:lhs_markup = tex
1234 と書くと特定のバッファにTeXハイライトさせるようにする。これはそのバッファに構
1235 文ハイライトを有効化するかファイルを読み込む前に設定しなければならない。
1238 HTML                                            *html.vim* *ft-html-syntax*
1240 HTMLファイルのタグ用の構文ファイルは以下のように動作する。
1242 開きタグの<>は、閉じタグの</>とは異なった色でハイライトされる。これは意図的に
1243 そうしてある!。開きタグにはハイライト'Function'が使用され、閉じタグにはハイラ
1244 イト'Type'が使用される(あなたの環境でこれらがどう定義されているかについては
1245 syntax.vimを参照すること)。
1247 既知のタグ名はC命令文と同じようにハイライトされる。未知のタグ名は間違いを見分
1248 けやすくするために、<>や</>と同じようにハイライトされる。
1250 引数(もしくは属性)名にも同じことが言える。既知の属性名と未知の属性名には異なる
1251 ハイライトがなされる。
1253 幾つかのHTMLタグは表示する文字種を変更するために使用される。以下のタグは構文
1254 ファイルhtml.vimによって認識され、その内容は通常の文字種とは異なる文字種で表示
1255 される: <B> <I> <U> <EM> <STRONG> (<EM>は<I>のエイリアスとして使われ、<STRONG>
1256 は<B>のエイリアス)、<H1> - <H6>、<HEAD>、<TITLE>そして<A>、ただしhrefが含まれ
1257 ていてリンクとして使われている(例<A href="somefile.html">)場合。
1259 それらのテキストの文字種を変更するには、以下の構文グループを再定義する必要があ
1260 る:
1262     - htmlBold
1263     - htmlBoldUnderline
1264     - htmlBoldUnderlineItalic
1265     - htmlUnderline
1266     - htmlUnderlineItalic
1267     - htmlItalic
1268     - htmlTitle for titles
1269     - htmlH1 - htmlH6 for headings
1271 この再定義が機能するためには最後の2つを除くすべてを再定義しなければならない。
1272 最後の2つ、htmlTitleとhtmlH[1-6]は任意である。そして次の変数をvimrcで設定しな
1273 ければならない(初期化の際に読み込まれるファイルの順序のせい)。 >
1274         :let html_my_rendering=1
1276 この例については以下からmysyntax.vimをダウンロードすること。
1277 http://www.fleiner.com/vim/download.html
1279 次の行をvimrcに加えればこの描画を無効にできる: >
1280         :let html_no_rendering=1
1282 HTMLコメントはむしろ特別で(詳細はHTMLリファレンスドキュメントを参照)、すべての
1283 エラーをハイライトする。しかしその間違ったスタイル(<!--で始まり--!>で終わる)を
1284 使いたいならこれを定義する >
1285         :let html_wrong_comments=1
1287 HTMLドキュメント中に埋め込まれたJavaScriptやVisual Basicについては、文は
1288 'Special'でハイライトされ、コメントや文字列などは標準のプログラミング言語と同
1289 じように色づけされる。現在のところサポートされているのはJapaScriptとVisual
1290 Basicだけであり、他のスクリプト言語はまだ加えられていない。
1292 カスケードスタイルシート(CSS)の埋め込みとインラインもハイライトされる。
1294 htmlプロセッサ言語は複数ある。html.vimはインクルードしやすいように簡素に書かれ
1295 ている。html.vimをインクルードするには以下の2行をその言語用の構文ファイルに書
1296 き足すこと(この例はasp.vimからとった):
1298     runtime! syntax/html.vim
1299     syn cluster htmlPreproc add=asp
1301 そしてプリプロセッサ言語を含むすべての領域をクラスタhtmlPreprocに加えればよい。
1304 HTML/OS (by Aestiva)                            *htmlos.vim* *ft-htmlos-syntax*
1306 HTML/OS用のカラースキームは以下のように機能する:
1308 デフォルトでは関数名と変数名は同じである。これは、Vimは関数と識別子に異なる色
1309 を指定しないためである。これを変えるには(関数名を違う色にしたいならこうすると
1310 よい)次の行を~/.vimrcに書き加える: >
1311   :hi Function term=underline cterm=bold ctermfg=LightGray
1313 もちろん好みに応じてctermfgは違う色にしてよい。
1315 HTML/OSに関するもう1つの問題は、ファイルがHTML/OSコーディングであることを示す
1316 特別なファイル形式が存在しないことである。そのため、ファイルを開いた後に次のよ
1317 うにしてHTML/OS構文をオンにしなければならない: >
1318   :set syntax=htmlos
1320 HTML/OSコードのブロックの開始と終了を示す文字は、それぞれ<<または[[,
1321 >>または]]のどちらであってもよい。
1324 IA64                            *ia64.vim* *intel-itanium* *ft-ia64-syntax*
1326 Intel Itanium 64アセンブリ言語用のハイライト。このファイル形式を認識させる方法
1327 については|asm.vim|を参照。
1329 *.incファイルをIA64と認識させるには次を.vimrcに書き足す: >
1330         :let g:filetype_inc = "ia64"
1333 INFORM                                          *inform.vim* *ft-inform-syntax*
1335 Inform構文ハイライトはInform Libraryによって提供されるシンボルを含んでいる。ほ
1336 とんどのプログラムがそれを利用しているためである。Libraryのシンボルをハイライ
1337 トさせたくないなら、次をvim初期化ファイルに加える: >
1338         :let inform_highlight_simple=1
1340 デフォルトではInformプログラムはZ-machineターゲットと仮定され、Z-machineアセン
1341 ブリ言語シンボルが適切にハイライトされる。もしプログラムがGlulx/Glk環境をター
1342 ゲットとしたものなら、次を初期化ファイルに加える: >
1343         :let inform_highlight_glulx=1
1345 こうすると代わりにGlulxオペコードをハイライトし、glk()をシステム関数としてハイ
1346 ライトする。
1348 Informコンパイラはある古いキーワードをエラーとみなす。普通、これらのキーワード
1349 はエラーとしてハイライトされる。これをエラーとしてハイライトするのをやめるには、
1350 次を初期化ファイルに加える: >
1351         :let inform_suppress_obsolete=1
1353 デフォルトではハイライトされる言語機能はコンパイラのバージョン6.30とライブラリ
1354 のバージョン6.11に従う。これより古いInform開発環境を使っているなら、次の行を初
1355 期化ファイルに加えるとよいかもしれない: >
1356         :let inform_highlight_old=1
1358 IDL                                                     *idl.vim* *idl-syntax*
1360 IDL (Interface Definition Language) ファイルは RPC 呼び出しを定義するために使
1361 われる。Microsoft の世界では COM インターフェイスと呼び出しの定義にも使われる。
1363 IDL の構造は単純であるため、ヒューリスティックな方法でなく、完全に文法にのっとっ
1364 たアプローチができる。その結果は巨大でいくぶん冗長であるが、一応は機能するよう
1365 である。
1367 idl ファイルには Microsoft 拡張がある。それらのうちいくつかは
1368 idl_no_ms_extensions を定義すると無効になる。
1370 より複雑な拡張は idl_no_extensions を定義すると無効になる。
1372 変数                              効果 ~
1374 idl_no_ms_extensions            Microsoft 独自の拡張の一部を無効にする
1375 idl_no_extensions               複雑な拡張を無効にする
1376 idlsyntax_showerror             IDL エラーを表示する (少々うるさいがとても助け
1377                                 になる)
1378 idlsyntax_showerror_soft        エラーに対してデフォルトでよりソフトな色を使う
1381 JAVA                                            *java.vim* *ft-java-syntax*
1383 java.vim構文ハイライトファイルはいくつかのオプションを提供している:
1385 Java 1.0.2では丸括弧の内側に波括弧が入ることは絶対になかったため、これはエラー
1386 と判断された。Java1.1以降では(無名クラスとともに)これが可能になったため、エラ
1387 ーと判断されなくなった。もし以前のようにしたいなら、vimの初期化ファイルに次の
1388 行を加えること: >
1389         :let java_mark_braces_in_parens_as_errors=1
1391 java.lang.*中の全ての識別子は常に全てのクラスから見える。これらをハイライトす
1392 るには
1393         :let java_highlight_java_lang_ids=1
1394 とする。
1396 http://www.fleiner.com/vim/download.html にあるスクリプトjavaid.vimをダウンロー
1397 ドすれば、ほとんどのJava標準パッケージの識別子をハイライトすることもできる。
1398 java.ioなど特定のパッケージの識別子だけをハイライトしたいならばこうする: >
1399         :let java_highlight_java_io=1
1400 対応している全パッケージのリストはjavaid.vimを参照のこと。
1402 関数を認識する方法はJavaコードの書き方に依存するため、関数名はハイライトされな
1403 い。構文ファイルは関数をハイライトする方法を2つ備えている:
1405 関数宣言が常にタブ、スペース8個、スペース2個のいずれかでインデントされているな
1406 ら >
1407         :let java_highlight_functions="indent"
1408 とするとよいかもしれない。
1409 しかし、関数とクラスの命名(大文字・小文字についての)に関するJavaガイドラインに
1410 したがっているなら >
1411         :let java_highlight_functions="style"
1412 とすること。
1413 もしどちらのオプションもだめで、それでも関数宣言をハイライトしたいなら、
1414 java.vim中の定義を変更するか、もとのjava.vimに関数をハイライトするコードを加え
1415 て自分用のjava.vimを作るかして独自の定義を作るしかない。
1417 Java 1.1では、System.out.println()とSystem.err.println()はデバッグのためだけに
1418 使われるものだった。そのためデバッグ用の文を区別してハイライトすることができる。
1419 それには次の定義を初期化ファイルに加える: >
1420         :let java_highlight_debug=1
1421 するとデバッグ用の文が'Special'の文字としてハイライトされるだろう。これらを別
1422 の色でハイライトさせるには、以下のグループに対して新しいハイライトを定義するこ
1423 と:
1424     Debug, DebugSpecial, DebugString, DebugBoolean, DebugType
1425 これらはそれぞれ、文、デバッグ文字列に使われる特別な文字、文字列、ブール型定
1426 数、型(this, super)に使われる。私はこれらの文に異なる背景色をつけることにして
1427 いる。
1429 JavaとC++間で移植が容易なコードを書くための補助として、Javaプログラム中のC++キー
1430 ワードはエラーとしてハイライトされる。しかし、本当にそれらのキーワードを使いた
1431 いときは.vimrc中で次の変数を定義するとよい: >
1432         :let java_allow_cpp_keywords=1
1434 JavadocはJavaプログラム中から特別なコメントを抜き出してHTMLページを作成するプ
1435 ログラムである。標準の設定ではこれらのHTMLコードをHTMLファイル(|html.vim|を参
1436 照)と同様にハイライトする。さらにこのコードの中にjavascriptとCSSを書くこともで
1437 きる(後述)。しかし4つの違いがある:
1438   1. タイトル(その後にホワイトスペースが続く最初の'.'まで、または最初の'@'まで
1439      のすべての文字)は異なる色でハイライトされる(この色を変更するには
1440      CommentTitleを変えること)。
1441   2. テキストは'Comment'としてハイライトされる。
1442   3. HTMLコメントは'Special'としてハイライトされる。
1443   4. 特別なJavadocタグ(@see, @param, ...)はSpecialとして、(@see, @param,
1444      @exceptionなどの)引数はFunctionとしてハイライトされる。
1445 この機能をオフにするには初期化ファイルに次の行を加えること: >
1446         :let java_ignore_javadoc=1
1448 以上のjavadocコメントを使う場合、javascript、visual basicスクリプト、埋め込み
1449 CSS(スタイルシート)のハイライトをすることもできる。これは実際にjavascriptや埋
1450 め込みCSSを含むjavadocコメントがあるときだけ意味がある。これらを有効化するため
1451 のオプションは次の通り >
1452         :let java_javascript=1
1453         :let java_css=1
1454         :let java_vb=1
1456 ネストした丸括弧に異なる色をつけるには、javaParen、javaParen1、javaParen2に異
1457 なる色を定義する。例えば >
1458         :hi link javaParen Comment
1459 あるいは >
1460         :hi javaParen ctermfg=blue guifg=#0000ff
1462 上方向にスクロールしていてハイライトがおかしくなった場合(CTRL-Lで再描画すると
1463 直る)、内部変数"java_minlines"を大きくしてみるとよい: >
1464         :let java_minlines = 50
1465 こうすると表示行の50行前から構文シンクロナイズが始まるようになる。デフォルト値
1466 は10である。大きな値にすることの不利点は、再描画が遅くなることである。
1469 LACE                                            *lace.vim* *ft-lace-syntax*
1471 Lace (Language for Assembly of Classes in Eiffel)は大文字・小文字を無視する。
1472 しかしスタイルガイドラインはそうでない。大文字・小文字を区別してハイライトさせ
1473 るには、vim変数'lace_case_insensitive'を初期化ファイル中で定義すればよい: >
1474         :let lace_case_insensitive=1
1477 LEX                                             *lex.vim* *ft-lex-syntax*
1479 "^%%$"セクションデリミタが、その後にどんなセクションが続くかの手がかりを与えな
1480 いため、Lexはブルートフォースなシンクロナイズを行う。それゆえ(巨大なlexファイ
1481 ルなどで)同期の問題が起こる場合には: >
1482         :syn sync minlines=300
1483 の値を変更するとよいかもしれない。
1486 LISP                                            *lisp.vim* *ft-lisp-syntax*
1488 lisp の構文ハイライトには2つのオプションがある: >
1490         g:lisp_instring : この変数が存在すると "(...)" 形式の文字列が、その中
1491                           身が lisp であるかのようにハイライトされる。AutoLisp
1492                           用に便利である。
1493         g:lisp_rainbow  : この変数が存在し、0以外であると段階の異なる括弧に
1494                           対して異なるハイライトがつくようになる。
1496 オプション g:lisp_rainbow は括弧とバッククォートされた括弧に対して10段階の異な
1497 る色をつける。色づけ段階の多さのため、rainbow モード自身が ctermfg とguifg を
1498 使ってハイライトを指定する (rainbow モードでない場合はそうではない)。それゆえ、
1499 ハイライトグループを使う普通のカラースキームの影響を受けない。実際にどうハイラ
1500 イトされるかはdark/bright の設定 (|'bg'| を参照) による。
1503 LITE                                            *lite.vim* *ft-lite-syntax*
1505 lite構文ハイライトには2つのオプションがある。
1507 文字列中でSQL構文ハイライトを行ってほしいならこうする: >
1509         :let lite_sql_query = 1
1511 シンクロナイズの最小行数はデフォルトで100になっている。他の値に変えたいなら
1512 "lite_minlines"をセットすればよい。例: >
1514         :let lite_minlines = 200
1517 LPC                                             *lpc.vim* *ft-lpc-syntax*
1519 LPCはシンプルでメモリ効率的な言語、Lars Pensj| Cの略である。LPCのファイル名は
1520 通常*.cである。これらのファイルをLPCと認識するとCプログラムのみを書くユーザの
1521 迷惑になる。LPC構文を使用したいなら、.vimrcでこの変数をセットすること: >
1523         :let lpc_syntax_for_c = 1
1525 これでも適切に動作しないCまたはLPCのファイルに対してはモードラインを使うこと。
1526 LPCファイルには:
1528         // vim:set ft=lpc:
1530 LPCと認識されてしまうCファイルには:
1532         // vim:set ft=c:
1534 変数をセットしたくないなら全てのLPCファイルでモードラインを使うこと。
1536 LPCには複数の実装がある。我々はもっとも広く使われているものをサポートしたいと
1537 思っている。デフォルトのLPC文法はMudOSシリーズ用である。MudOS v22以前を使って
1538 いるなら、次をセットすることによりsensible モディファイヤをオフにし、v22以降の
1539 新しいefunを無効にするとよい。MudOSの最新版を使っているときはこの変数をセット
1540 しないこと: >
1542         :let lpc_pre_v22 = 1
1544 LPCのLpMud 3.2シリーズには: >
1546         :let lpc_compat_32 = 1
1548 LPCのLPC4シリーズには: >
1550         :let lpc_use_lpc4_syntax = 1
1552 LPCのuLPCシリーズには:
1553 uLPCはPike用に開発されている。なのでPike構文を代わりに使い、ソースファイルの名
1554 前を.pikeとすること。
1557 LUA                                             *lua.vim* *ft-lua-syntax*
1559 この構文ファイルはLua 4.0とLua 5.0, 5.1(デフォルト)用に使える。グローバル変数
1560 lua_version と lua_subversion を使うと、これらのバージョンを指定することができ
1561 る。例えば、Lua 4.0 の構文ハイライトを有効にするには次のコマンドを使う: >
1563         :let lua_version = 4
1565 Lua 5.0 を使っているなら、次のコマンドを使う: >
1567         :let lua_version = 5
1568         :let lua_subversion = 0
1570 ハイライトを Lua 5.1 に戻すには次のようにする: >
1572         :let lua_version = 5
1573         :let lua_subversion = 1
1576 MAIL                                            *mail.vim* *ft-mail.vim*
1578 Vimはemailの標準的な要素(ヘッダ、シグネチャ、引用文、URL / emailアドレス)の全
1579 てをハイライトする。標準的な慣習に従い、シグネチャは、"--"とそれに続く任意個の
1580 空白、そして改行のみからなる行で始まる。
1582 Vimは']', '}', '|', '>'で始まる行または'>'が続く単語を引用文とみなす。引用文中
1583 のヘッダとシグネチャについては、テキストが'>'(1個のスペースが続いてもよい)で引
1584 用された場合のみハイライトする。
1586 デフォルトではmail.vimは先頭表示行の100行前までの構文をシンクロナイズさせる。
1587 遅いマシンを使っていて、一般的に短いヘッダのemailを扱っているなら、これをより
1588 小さい値に変えることが出来る: >
1590     :let mail_minlines = 30
1593 MAKE                                            *make.vim* *ft-make-syntax*
1595 Makefileではエラーを見つけやすくするためにコマンドがハイライトされる。しかし、
1596 これは色が多すぎるかもしれない。この機能をオフにするにはこうする: >
1598         :let make_no_commands = 1
1601 MAPLE                                           *maple.vim* *ft-maple-syntax*
1603 Waterloo Maple IncによるMaple Vは記号代数をサポートしている。その言語はユーザ
1604 によって選択的にロードされる関数のパッケージをたくさんサポートしている。Maple
1605 V release 4で供給される標準的なパッケージセットの関数がユーザの判断によって強
1606 調される。ユーザは.vimrcに以下を書くと、全てのパッケージ関数がハイライトされる: >
1608         :let mvpkg_all= 1
1610 あるいは以下の表から任意のサブセット変数/パッケージを選んで.vimrcファイル中で
1611 その変数を1にセットしてもよい($VIMRUNTIME/syntax/syntax.vimを読み込む前に行う
1612 必要がある)。
1614         Maple V パッケージ関数選択肢の表 >
1615   mv_DEtools     mv_genfunc     mv_networks     mv_process
1616   mv_Galois      mv_geometry    mv_numapprox    mv_simplex
1617   mv_GaussInt    mv_grobner     mv_numtheory    mv_stats
1618   mv_LREtools    mv_group       mv_orthopoly    mv_student
1619   mv_combinat    mv_inttrans    mv_padic        mv_sumtools
1620   mv_combstruct mv_liesymm      mv_plots        mv_tensor
1621   mv_difforms    mv_linalg      mv_plottools    mv_totorder
1622   mv_finance     mv_logic       mv_powseries
1625 MATHEMATICA             *mma.vim* *ft-mma-syntax* *ft-mathematica-syntax*
1627 次を .vimrc に書いておかないかぎり、空の *.m ファイルは自動的に Matlab のファ
1628 イルであるとみなされる: >
1630         let filetype_m = "mma"
1633 MOO                                             *moo.vim* *ft-moo-syntax*
1635 式の中でCスタイルのコメントを使っていて、それがハイライトを乱している場合は、C
1636 スタイル用の拡張マッチ(これは遅い!)を使うことが出来る: >
1638         :let moo_extended_cstyle_comments = 1
1640 文字列中の代名詞置換パターンのハイライトを無効化させるには: >
1642         :let moo_no_pronoun_sub = 1
1644 正規表現演算子'%l'のハイライトと文字列中の'%('と'%)'のマッチを無効化させるには:
1647         :let moo_no_regexp = 1
1649 対応していないダブルクォートを認識してエラーとしてハイライトすることが出来る:
1652         :let moo_unmatched_quotes = 1
1654 組み込みプロパティ(.name, .location, .programmerなど)をハイライトするには : >
1656         :let moo_builtin_properties = 1
1658 未知の組み込み関数を認識してエラーとしてハイライトすることが出来る。このオプショ
1659 ンを使うなら、mooKnownBuiltinFunctionグループに自分自身の拡張を加えること。こ
1660 のオプションを有効化するには: >
1662         :let moo_unknown_builtin_functions = 1
1664 既知の組み込み関数のリストにsprintf()を加える例: >
1666         :syn keyword mooKnownBuiltinFunction sprintf contained
1669 MSQL                                            *msql.vim* *ft-msql-syntax*
1671 msql構文ハイライトには2つのオプションがある。
1673 文字列中でSQL構文ハイライトをさせるにはこうする: >
1675         :let msql_sql_query = 1
1677 シンクロナイズは、minlinesはデフォルトで100になっている。この値を変えるには、
1678 "msql_minlines"の望む値にすればよい。例: >
1680         :let msql_minlines = 200
1683 NCF                                             *ncf.vim* *ft-ncf-syntax*
1685 NCF構文ハイライトには1つのオプションがある。
1687 ncf.vimによって認識されない文をエラーとしてハイライトさせるにはこうする: >
1689         :let ncf_highlight_unknowns = 1
1691 これらをエラーとしてハイライトさせたくない場合は、この変数をセットしないでおく。
1694 NROFF                                           *nroff.vim* *ft-nroff-syntax*
1696 nroff構文ファイルはそのままでAT&T n/troffに対応している。構文ファイルに含まれ
1697 ているGNU groff拡張機能を使うには、それを有効化する必要がある。
1699 例えば、LinuxとBSDディストリビューションは、デフォルトではテキスト処理パッケー
1700 ジとしてgroffを使う。groff用の拡張構文ハイライト機能を有効化するには、次のオプ
1701 ションを初期化ファイルに加える: >
1703   :let b:nroff_is_groff = 1
1705 groffは、Solarisでまだ使われているかもしれない古いAT&T n/troffとは異なる。
1706 groffのマクロとリクエスト名は2文字以上の長さであってもよく、言語プリミティブに
1707 拡張がされている。例えば、AT&T troffではリクエスト\(yrを使い、2桁の数で年にア
1708 クセスする。groffでは互換性のために同じリクエストを使うことも出来るし、または
1709 groffネイティブの構文,\[yr]を使うことも出来る。さらに、\[year]として4桁の年を
1710 直接使うことも出来る。マクロリクエストは2文字以上の長さであってもよい。例えば
1711 、GNU mmはverbatim環境を作るのに".VERBON"と".VERBOFF"というリクエストを受けつ
1712 ける。
1714 g/troffによって得られる最良の整形された出力を得るには、スペースと句読点に関す
1715 るいくつかの単純なルールに従うべきである。
1717 1. 行の末尾に空のスペースを置かないこと
1719 2. 文末のピリオド、エクスクラメーションマークなどの後にはちょうど1個のスペース
1720    を置くこと。
1722 3. 後述の理由により、全てのピリオドの後に改行(carriage return)を置くとよい。
1724 これらの妙なtipsの理由は、g/n/troffが改行に、これらのルールに従わないとすぐに
1725 混乱してしまうアルゴリズムを使っているためである。
1728 troffはTeXと違い、段落ごとでなく行ごとにテキストを書き込む。さらに、glueや
1729 stretchの概念を持たず、入力に水平、垂直の空白があると全てそのまま出力される。
1731 それゆえ、最終的なドキュメントで意図する以上の空白を文と文の間にはさまないよう
1732 に注意すること。この理由のため、全ての句読点記号の後すぐに改行を入れるという習
1733 慣がある。最終的に処理された出力が「一様な」テキストになってほしければ、入力の
1734 テキストで正しくスペースを置いておく必要がある。行末の空白と句読点の後の2個以
1735 上の空白をエラーとしてハイライトしたいならこうする: >
1737   :let nroff_space_errors = 1
1739 正しい活字組みと干渉するかもしれないが、余分な空白や他のエラーを検出するもう1
1740 つの方法は、設定ファイル中で構文グループ"nroffDefinition"と"nroffDefSpecial"に
1741 目立つハイライト定義を定義することである。例: >
1743   hi def nroffDefinition term=italic cterm=italic gui=reverse
1744   hi def nroffDefSpecial term=italic,bold cterm=italic,bold
1745                          \ gui=reverse,bold
1747 ソースファイル中のプリプロセッサのエントリをセクションマーカーと同じくらい容易
1748 に表示させたいなら、.vimrc中で次のオプションを有効化する: >
1750         let b:preprocs_as_sections = 1
1752 同様に、構文ファイルはmsパッケージ中の拡張段落マクロ(.XP)用の余分な段落マーカー
1753 も含んでいる。
1755 最後に、構文ファイル|groff.vim|が存在する。これはデフォルトでfile basisとグロ
1756 ーバルの両方でgroff構文ハイライトすることができる。
1759 OCAML                                           *ocaml.vim* *ft-ocaml-syntax*
1761 OCaml構文ファイルは以下の拡張子を持つファイルに対応している: .ml, .mli, .mll
1762 .mly。以下の変数をセットすると、標準的OCaml構文からcamlp4プリプロセッサでサポ
1763 ートされている修正構文に切り替えることが出来る: >
1765         :let ocaml_revised = 1
1767 以下の変数をセットすると"end"をエラーとしてハイライトするのをやめることが出来
1768 る。これはVimがシンクロナイズできないほど長い構造を含むソースのとき便利である:
1771         :let ocaml_noend_error = 1
1774 PAPP                                            *papp.vim* *ft-papp-syntax*
1776 PApp構文ファイルは.pappファイルと、その小さな拡張、トップレベルのファイルフォ
1777 ーマットとしてxmlを用いたperl/xml/html/その他の混合である.pxml, .pxslファイル
1778 を扱う。デフォルトでは、phtmlやpxmlセクションの内側の全ては埋め込みプリプロセ
1779 ッサコマンドつきの文字列として扱われる。次の変数を初期化ファイルで設定すると
1780 phtmlセクションの内側のhtmlコードを構文ハイライトしようとする: >
1782         :let papp_include_html=1
1784 しかしこれは比較的遅く、実用的に編集するにはカラフルすぎる。
1786 構文ファイルpapp.vimの最新版は、通常以下で得られる。
1787 http://papp.plan9.de
1790 PASCAL                                          *pascal.vim* *ft-pascal-syntax*
1792 "*.p"にマッチするファイルのタイプはProgressかPascalである。自動判別が機能しな
1793 いなら、またはProgressファイルを一切編集しないとわかっているなら、これをvimrc
1794 ファイルに書くといい: >
1796    :let filetype_p = "pascal"
1798 Pascal構文ファイルはTurbo Pascal, Free Pascal CompilerとGNU Pascal Compiler
1799 で提供される拡張に対応するための拡張が施されてきた。Delphiのキーワードもサポー
1800 トされている。デフォルトではTurbo Pascal 7.0の機能が有効化されている。標準的な
1801 Pascalのキーワードだけを使いたいなら、次の行を初期化ファイルに加えること: >
1803    :let pascal_traditional=1
1805 Delphi固有の構文(1行コメント、キーワード等)を有効化したいなら: >
1807    :let pascal_delphi=1
1810 オプションpascal_symbol_operatorは、+, *などのような演算子記号をOperatorの色を
1811 使って表示するどうかを制御する。演算子記号を色づけするには、次の行を初期化ファ
1812 イルに加えること: >
1814    :let pascal_symbol_operator=1
1816 いくつかの関数はデフォルトでハイライトされる。これをオフにするには: >
1818    :let pascal_no_functions=1
1820 さらに、いくつかのコンパイラ用に個別の変数がある。pascal_delphi,
1821 pascal_gpc, pascal_fpcがある。デフォルトの拡張はTurbo Pascalに合うようになって
1822 いる。 >
1824    :let pascal_gpc=1
1826 または >
1828    :let pascal_fpc=1
1830 文字列が1行で定義されるものとするなら、変数pascal_one_line_string variableを定
1831 義するとよい。 >
1833    :let pascal_one_line_string=1
1835 タブ文字が好きでないなら、変数pascal_no_tabsをセットするとよい。するとタブがエ
1836 ラーとしてハイライトされる。 >
1838    :let pascal_no_tabs=1
1841 PERL                                            *perl.vim* *ft-perl-syntax*
1843 perl用の構文ハイライトにはたくさんのオプションがある。
1845 PODファイルやPODセグメントを使っているなら、こうするとよいかもしれない: >
1847         :let perl_include_pod = 1
1849 パースの複雑さを軽減するために (そしてパフォーマンスを上げるために) 、変数名と
1850 内容のパースにおける2つの要素をオフにすることができる。 >
1852 変数名と関数名中のパッケージ参照('$PkgName::VarName'中の'PkgName::'のような)を
1853 他の名前と区別しないようにするには次のようにする: >
1855         :let perl_no_scope_in_variables = 1
1857 (Vim 6.x では違う方法だった: "perl_want_scope_in_variables" を設定するとこの機
1858 能が有効になった)
1860 '@{${"foo"}}'のように複雑なものをパースさせたくないなら次のようにする: >
1862         :let perl_no_extended_vars = 1
1864 (Vim 6.x では違う方法だった: "perl_extended_vars" を設定するとこの機能が有効に
1865 なった)
1867 文字列の色づけは変更できる。デフォルトでは文字列とqq friendsは第1行と同じよう
1868 にハイライトされる。変数perl_string_as_statementをセットすると第2行のようにハ
1869 イライトされる。
1871    "hello world!"; qq|hello world|;
1872    ^^^^^^^^^^^^^^NN^^^^^^^^^^^^^^^N       (unlet perl_string_as_statement)
1873    S^^^^^^^^^^^^SNNSSS^^^^^^^^^^^SN       (let perl_string_as_statement)
1875 (^ = perlString, S = perlStatement, N = None at all)
1877 シンクロナイズには3つのオプションがある。最初の2つは、シンクロナイズのトリガー
1878 の一部をオフにするもので、ハイライトが適切に機能しないときのみ必要になる。スク
1879 ロール中に突然スクリーン全体の色がすっかり変わってしまったらこれらのうち1つを
1880 オフにしてみること。その誤りを引き起こした行を特定できるなら、それを知らせてく
1881 ださい。
1883 1つのトリガーは"^\s*sub\s*"に関するもので、もう1つはほぼ"^[$@%]"に関するもので
1884 ある。 >
1886         :let perl_no_sync_on_sub
1887         :let perl_no_sync_on_global_var
1889 以下のようにして、どこから構文ハイライトを始めるかの最大距離を設定できる: >
1891         :let perl_sync_dist = 100
1893 perlで折りたたみを使いたいならperl_foldをセットすること: >
1895        :let perl_fold = 1
1897 if 文などでも同様にブロックを折り畳みたければ、次のように設定する: >
1899         :let perl_fold_blocks = 1
1901 perl の折り畳みが有効になっているとき、package や sub を折り畳みたくなければ、
1902 対応する変数を設定する: >
1904         :unlet perl_nofold_packages
1905         :unlet perl_nofold_subs
1909 PHP3 and PHP4           *php.vim* *php3.vim* *ft-php-syntax* *ft-php3-syntax*
1911 [注意: これは以前は"php3"と呼ばれていた。しかし現在はphp4もサポートしているの
1912 で"php"と名前が変更された]
1914 php用の構文ハイライトには以下のオプションがある。
1916 文字列中でSQL構文ハイライトを行いたいなら: >
1918   let php_sql_query = 1
1920 Baselibメソッドのハイライトを行いたいなら: >
1922   let php_baselib = 1
1924 文字列中でHTML構文ハイライトを行いたいなら: >
1926   let php_htmlInStrings = 1
1928 古いカラースタイルを使いたいなら: >
1930   let php_oldStyle = 1
1932 ASPスタイルのショートタグを有効化したいなら: >
1934   let php_asp_tags = 1
1936 ショートタグを無効化したいなら: >
1938   let php_noShortTags = 1
1940 ] や ) の対応エラーをハイライトしたいなら: >
1942   let php_parent_error_close = 1
1944 対応する閉じ括弧がない開き括弧( や [が存在する場合、php終了タグをスキップさせ
1945 たいなら: >
1947   let php_parent_error_open = 1
1949 クラスや関数の折り畳みを有効化するには: >
1951   let php_folding = 1
1953 シンクロナイズ方法を選ぶには: >
1955   let php_sync_method = x
1957 x = -1 で検索によるシンクロナイズ(デフォルト)
1958 x > 0 少なくともx行上までシンクロナイズ
1959 x = 0 最初からシンクロナイズ
1962 PLAINTEX                                *plaintex.vim* *ft-plaintex-syntax*
1964 TeX とは組版言語であり、plaintex は「素の」TeX に対して使われるファイルタイプ
1965 である。*.tex ファイルを決して素の TeX と認識してほしくないならば
1966 |ft-tex-plugin| を参照。
1968 この構文ファイルは次のオプションを持つ >
1970         let g:plaintex_delimiters = 1
1972 角括弧 "[]" と波括弧 "{}" をハイライトさせるには上の変数を設定する。
1974 PPWIZARD                                        *ppwiz.vim* *ft-ppwiz-syntax*
1976 PPWizardはHTMLとOS/2 INFファイル用のプリプロセッサである。
1978 構文ファイルは以下のオプションを持つ:
1980 - ppwiz_highlight_defs : PPWizardの定義についてのハイライトモードを決める。
1981   とりうる値は
1983   ppwiz_highlight_defs = 1 : #define 文においてその内容の色を保つ(例. PPWizard
1984   マクロと変数)
1986   ppwiz_highlight_defs = 2 : 行継続記号を除き、#defineと#evaluate文が単一の色
1987   で表示される。
1989   ppwiz_highlight_defsのデフォルトは1である。
1991 - ppwiz_with_html : この値が1(デフォルト)なら、HTMLコードをハイライトする。0なら
1992   HTMLコードを通常のテキストのように扱う。
1995 PHTML                                           *phtml.vim* *ft-phtml-syntax*
1997 phtml用の構文ハイライトには2つのオプションがある。
1999 文字列中でSQL構文ハイライトをさせたいならこうする: >
2001         :let phtml_sql_query = 1
2003 シンクロナイズについては、minlinesのデフォルトは100になっている。他の値にした
2004 いなら"phtml_minlines"を望む値にセットすればよい。例: >
2006         :let phtml_minlines = 200
2009 POSTSCRIPT                              *postscr.vim* *ft-postscr-syntax*
2011 PostScript用の構文ハイライトにはいくつかのオプションがある。
2013 まず、どのバージョンのPostScript言語をハイライトするかである。現在のところ、言
2014 語の3つのバージョン、あるいはレベルが定義されている。レベル1はオリジナルの基本
2015 バージョンで、レベル2のリリース以前のすべての拡張を含んでいる。レベル2はもっと
2016 も一般的なバージョンで、レベル3リリース以前のすべての拡張を含んでいる。レベル3
2017 は現在のところサポートされている中でもっともレベルが高い。次のように変数
2018 postscr_levelを定義することによって、PostScript言語のどのレベルをハイライトす
2019 るか選ぶことができる: >
2021         :let postscr_level=2
2023 この変数が定義されていないときはデフォルトの2(レベル2)になる。これが現在のとこ
2024 ろもっとも普及しているためである。
2026 すべてのPSインタープリタがその言語レベルのすべての言語機能をサポートしているわ
2027 けではないことに注意。とくに、PSファイルの先頭の%!PS-Adobe-3.0は現在の
2028 PostScriptがレベル3であることを示すわけではない!
2030 以下のように変数postscr_displayを定義すると、Display PostScriptの言語機能もハ
2031 イライトさせることができる: >
2033         :let postscr_display=1
2035 以下のように変数postscr_ghostscriptを定義すると、Ghostscript固有の言語機能もハ
2036 イライトさせることができる: >
2038         :let postscr_ghostscript=1
2040 PostScriptはたくさんの定義済み要素を持つ巨大な言語である。これらの要素すべてを
2041 ハイライトすると便利であるが、そうすると遅いマシンではVimの動作が遅くなってし
2042 まう。マシンフレンドリーにするために、デフォルトではフォント名と文字エンコーディ
2043 ングはハイライトされない、これらをハイライトさせるには、以下の変数のどちらか
2044 または両方をセットすること: >
2046         :let postscr_fonts=1
2047         :let postscr_encodings=1
2049 and、or、notのハイライトについて、スタイル上のオプションが存在する。PostScript
2050 では、これらの演算子の機能はオペランドの型に依存する。オペランドが両方ブール型
2051 なら論理演算子となり、両方整数型なら2項演算子となる。2項演算子と論理演算子を区
2052 別してハイライトすることができるので、どちらにしてもこれらはハイライトされなけ
2053 ればならない。デフォルトではどちらも論理演算子としてハイライトされる。変数
2054 postscr_andornot_binaryを定義すると、どちらも2項演算子としてハイライトされる: >
2056         :let postscr_andornot_binary=1
2059                         *ptcap.vim* *ft-printcap-syntax*
2060 PRINTCAP + TERMCAP      *ft-ptcap-syntax* *ft-termcap-syntax*
2062 この構文ファイルはprintcapとtermcapデータベースに適用される。
2064 *printcap*または*termcap*というパターンにマッチしないprintcap/termcapファイル
2065 を認識させるためには、ファイル|myfiletypefile|において、あなたのシステムに合っ
2066 たパターンを追加しなければならない。これらのパターンには、変数"b:ptcap_type"を
2067 "print"か"term"のどちらかにセットしなければならない。するとオプション
2068 'filetype'の値がptcapになる。
2070 例えば、/etc/termcaps/以下の全てのファイルをtermcapファイルと識別させるように
2071 するには次を書き加える: >
2073    :au BufNewFile,BufRead /etc/termcaps/* let b:ptcap_type = "term" |
2074                                        \ set filetype=ptcap
2076 上方向にスクロールしているときハイライトがおかしくなり、それがCTRL-Lで再描画す
2077 ると直るようなら、変数"ptcap_minlines"の値を大きくしてみるとよい: >
2079    :let ptcap_minlines = 50
2081 (デフォルトは20行)
2084 PROGRESS                                *progress.vim* *ft-progress-syntax*
2086 "*.w"にマッチするファイルのタイプはProgressかCWEBである。自動判別がうまく機能
2087 しないなら、またはcwebファイルを一切編集しないとわかっているなら、次をvimrcに
2088 加えるとよい: >
2089    :let filetype_w = "progress"
2090 同じことが"*.i"(アセンブリでもありうる)と"*.p"(Pascalでもありうる)にもいえる。
2091 アセンブリとPascalを使わないとわかっているならこれを使うこと: >
2092    :let filetype_i = "progress"
2093    :let filetype_p = "progress"
2097 PYTHON                                          *python.vim* *ft-python-syntax*
2099 Python構文ハイライトをコントロールするオプションは4つある。
2101 数字のハイライト: >
2102         :let python_highlight_numbers = 1
2104 組み込み関数のハイライト: >
2105         :let python_highlight_builtins = 1
2107 標準例外のハイライト: >
2108         :let python_highlight_exceptions = 1
2110 行末の空白と、スペースとタブの混在をハイライト: >
2111         :let python_highlight_space_errors = 1
2113 全てのハイライトを有効化させるには(上の3つのオプションをセットするのと同じ): >
2114         :let python_highlight_all = 1
2117 QUAKE                                           *quake.vim* *ft-quake-syntax*
2119 Quake構文定義はQuakeエンジンのどれかに基づくほとんど全てのFPS(First Person
2120 Shooter)用に対応するはずである。しかし3つのゲーム(Quake, Quake 2, Quake 3
2121 Arena)間でコマンド名が少々異なる。そのため、3つのグローバル変数により、どのコ
2122 マンドが有効であるか指定できるようになっている。3つの変数には次のような効果が
2123 ある:
2125 Quakeでのみ利用可能なコマンドをハイライトするように設定: >
2126         :let quake_is_quake1 = 1
2128 Quake 2でのみ利用可能なコマンドをハイライトするように設定: >
2129         :let quake_is_quake2 = 1
2131 Quake 3 Arenaでのみ利用可能なコマンドをハイライトするように設定: >
2132         :let quake_is_quake3 = 1
2134 これら3つのコマンドを自由に組み合わせることが出来る。しかしゲームで利用できな
2135 いコマンドもハイライトしてしまうかもしれない。
2138 READLINE                                *readline.vim* *ft-readline-syntax*
2140 readlineライブラリは主としてBASHシェルで使われ、BASHはかなりの数のコマンドとオ
2141 プションを追加している。これらの項目を同様にハイライトするには次を|vimrc|に加
2142 えるか、readline構文ファイルを読み込む前にこれをタイプすればよい: >
2143         let readline_has_bash = 1
2145 こうするとBASH(バージョン2.05a以降。一部それ以前)が追加するコマンドもハイライ
2146 トするようになる。
2149 REXX                                            *rexx.vim* *ft-rexx-syntax*
2151 上方向にスクロールしているときにハイライトがおかしくなり、それがCTRL-Lで再描画
2152 すると直るようなら、変数"rexx_minlines"の値を大きくしてみるとよい: >
2153         :let rexx_minlines = 50
2154 こうすると構文シンクロナイズが画面最上行の50行前から始まるようになる。値を大き
2155 くすることの欠点は、再描画が遅くなることである。
2158 RUBY                                            *ruby.vim* *ft-ruby-syntax*
2160 Ruby構文ハイライトにはたくさんのオプションがある。
2162 デフォルトではキーワード"end"はそれに対応するブロック開始文にしたがって色づけ
2163 される。この機能は便利だが、コストがかかる。再描画が遅くなったら(または色機能
2164 の貧弱なターミナルを使っているなら)変数"ruby_no_expensive"を定義することによっ
2165 てこの機能をオフにできる: >
2167         :let ruby_no_expensive = 1
2169 この場合すべての制御キーワードに同じ色が使われる。
2171 この機能を有効化したいが、上にスクロールしているときにハイライトがおかしくなり、
2172 それがCTRL-Lで再描画すると直るようなら、変数"ruby_minlines"を50以上の値にセッ
2173 トしてみるとよい: >
2175         :let ruby_minlines = 100
2177 理想的にはこの値はファイル中の最も大きいクラスやモジュールの長さよりも大きくし
2178 ておくとよい。
2180 rubyIdentifierを取り除くと、特別な識別子がハイライトされなくなる: >
2182         :hi link rubyIdentifier NONE
2184 これによって "ConstantName", "$global_var", "@@class_var", "@instance_var",
2185 "| block_param |", ":symbol" のような特別な識別子がハイライトされなくなる。
2187 Kernel, Module, Object などの重要なメソッドはデフォルトでハイライトされる。
2188 "ruby_no_special_methods" を定義するとこれらのハイライトがされなくなる: >
2190         :let ruby_no_special_methods = 1
2192 これによって "require", "attr", "private", "raise", "proc" などの重要なメソッ
2193 ドのハイライトがされなくなる。
2195 Rubyの演算子をハイライトすることができる。これは"ruby_operators"を定義すると有
2196 効になる: >
2198         :let ruby_operators = 1
2200 "ruby_space_errors" を定義するとホワイトスペースのエラーがハイライトされるよう
2201 になる: >
2203         :let ruby_space_errors = 1
2205 これによって行末のホワイトスペースやタブ文字の前のスペース文字がエラーとして強
2206 調されるようになる。これは "ruby_no_trail_space_error" と
2207 "ruby_no_tab_space_error" を定義すると改善することができる。これらはそれぞれ行
2208 末のホワイトスペースとスペース文字の後のタブ文字を無視する。
2210 "ruby_fold" を定義すると折り畳みを有効にすることができる: >
2212         :let ruby_fold = 1
2214 これを定義すると、オプション 'foldmethod' が "syntax" になり、クラス、モジュー
2215 ル、メソッド、コードブロック、ヒアドキュメント、コメントの折り畳みを行うように
2216 なる。
2218 "ruby_no_comment_fold"を定義すると複数行コメントの折り畳みを無効にできる: >
2220         :let ruby_no_comment_fold = 1
2223 SCHEME                                          *scheme.vim* *ft-scheme-syntax*
2225 デフォルトでは R5RS のキーワードだけをハイライトし、正しくインデントする。
2227 変数 b:is_mzscheme または g:is_mzscheme が定義されていると、MzScheme 固有の設
2228 定が使われる。
2230 また、scheme.vim は Chicken Scheme->C コンパイラのキーワードにも対応している。
2231 それを有効にするには b:is_chicken または g:is_chicken を定義する。
2234 SDL                                             *sdl.vim* *ft-sdl-syntax*
2236 SDL用のハイライトにはいくつかのキーワードが抜けているかもしれない。しかしSDLに
2237 はたくさんのキーワードがあるので、すべてに対応することはほとんど不可能である。
2239 新しい標準SDL-2000ではすべての識別子の大文字・小文字が区別される(以前はそうで
2240 はなかった)。また、すべてのキーワードが全部大文字または全部小文字であってもよ
2241 い。構文ハイライトにこれを反映させるには次の変数をセットすればよい: >
2242         :let sdl_2000=1
2244 これはたくさんの新しいキーワードもセットする。古いキーワードを無効にするには(
2245 これはよい考えである)こうする: >
2246         :let SDL_no_96=1
2248 インデントもおそらく不完全であるが、今のところ私はこれでとても満足している。
2251 SED                                             *sed.vim* *ft-sed-syntax*
2253 タブをハイライトして通常の空白と区別しやすくするには、次の行をvimrcに書いて
2254 "highlight_sedtabs"を定義する(TODOと同じ構文グループが使われる) >
2256         :let highlight_sedtabs = 1
2258 (タブのハイライトは、検索パターン、置換テキスト、アドレス、
2259 Append/Change/Insertコマンドに含まれるテキストいずれかの中のタブにだけ適用され
2260 る)。このオプションを有効化するなら、タブ幅を1文字にするとよい。そうすると文字
2261 列中のタブの数を数えやすくなる。
2263 バグ:
2265   変換コマンド(y)は置換コマンドとまったく同様に扱われる。つまり、この構文ファ
2266   イルにおいては、変換は置換と同じフラグを受け取ると判断される。これは間違いで
2267   ある(変換は一切フラグを受け取らない)。これに関係したコマンドは非常に複雑な処
2268   理を要求するため(95パターン、もっともらしいパターンデリミタごとに1つ)、私は
2269   このバグを容認している。
2272 SGML                                            *sgml.vim* *ft-sgml-syntax*
2274 SGMLファイル中のタグをハイライトする方法は以下のように動作する。
2276 開きタグ<>と閉じタグ</>は異なる色がつけられる。これは意図されたものである。開
2277 きタグには'Function'の色が使われ、閉じタグには'Type'の色が使われる(これらがど
2278 う定義されているかを確かめたいならsyntax.vimを見ること)。
2280 登録されているタグ名はCの文と同じ方法で色づけされる。エラーを見つけやすくする
2281 ため、登録されていないタグ名は色づけされない。
2283 引数名(や属性名)も同様である。登録されている属性名は登録されていない属性名と異
2284 なる色がつけられる。
2286 いくつかのSGMLタグはテキストの外見を変更するのに使われる。以下のタグは構文ファ
2287 イルsgml.vimによって認識され、通常のテキストの表示法を変更する:
2288  <varname> <emphasis> <command> <function> <literal> <replaceable> <ulink>
2289  <link>。
2291 そのテキストの表示法を変えたいなら以下の構文グループを再定義しなければならない
2293     - sgmlBold
2294     - sgmlBoldItalic
2295     - sgmlUnderline
2296     - sgmlItalic
2297     - sgmlLink for links
2299 この再定義を機能させるにはこれらすべてを再定義し、以下の変数をvimrc中で定義し
2300 なければならない(初期化の際にファイルが読み込まれる順序のため) >
2301    let sgml_my_rendering=1
2303 この表示法を無効にしたければ次の行をvimrcに加える: >
2304    let sgml_no_rendering=1
2306 (Claudio Fleiner <claudio@fleiner.com>によるhtml.vimのヘルプテキストから一部借
2307 用した)
2310 SH              *sh.vim* *ft-sh-syntax* *ft-bash-syntax* *ft-ksh-syntax*
2312 これは「普通の」Unix (Bourne) sh、bashそしてKornシェルをカバーしている。
2314 Vimは様々なファイル名がどのタイプであるかを指定することによって、どのシェルが
2315 使われているかを決定しようとする: >
2317     ksh : .kshrc* *.ksh
2318     bash: .bashrc* bashrc bash.bashrc .bash_profile* *.bash
2320 これらのうちどれにも当てはまらなければ、ファイルの第一行によって判断される(例.
2321 /bin/sh /bin/ksh /bin/bash)。第一行でシェルを指定されていれば、そのシェルが使
2322 用される。しかしいくつかのファイル(例. .profile)はシェルファイルであることはわ
2323 かっていても、どのタイプか明らかではない。さらに、多くのシステムでshは
2324 "bash"(Linux, Windows+cygwin)や"ksh"(Posix)へのシンボリックリンクになっている。
2326 以下の3つの変数のどれかを.vimrcで定義することにより、デフォルトを設定すること
2327 が出来る:
2329     ksh: >
2330         let g:is_kornshell = 1
2331 <   posix: (これは is_kornshell を1に設定することと同じ) >
2332         let g:is_posix     = 1
2333 <   bash: >
2334         let g:is_bash      = 1
2335 <   sh: (デフォルト) Borne shell >
2336         let g:is_sh        = 1
2338 "#! ..." という行がなく、かつユーザが上の方法でデフォルトの sh.vim の構文を設
2339 定していない場合、sh.vim は Borne シェルの構文であると仮定する。エラーレポート
2340 に RFC や市場浸透統計の引用を含める必要はありません。単に .vimrc でシステムで
2341 使われるデフォルトの sh のバージョンを選択してください。
2343 .vimrcで以下のように設定すると >
2344         let g:sh_fold_enabled= 1
2346 様々な構文要素(ヒアドキュメントと関数の中身)がsyntaxメソッドによって折り畳み可
2347 能になる(|:syn-fold|)。
2349 上方向にスクロールしているときにハイライトがおかしくなり、それがCTRL-Lで再描画
2350 すると直るようなら、変数"sh_minlines"の値を大きくしてみるとよい。例: >
2352         let sh_minlines = 500
2354 こうすると構文シンクロナイズが画面最上行の500行前から始まるようになる。デフォ
2355 ルトの値は200である。大きい値を設定することの欠点は、動作が遅くなるかもしれな
2356 いことである。
2358 シンクロナイズさせるものがあまりないときは表示がとても遅くなるかもしれない。こ
2359 れを減らすために、変数"sh_maxlines"をセットすることができる。例: >
2361         let sh_maxlines = 100
2363 デフォルトはsh_minlinesの2倍の値が使われる。表示を高速化するにはこれをもっと小
2364 さい値にすること。欠点はハイライト間違いが出るかもしれないことである。
2367 SPEEDUP (AspenTech plant simulator)             *spup.vim* *ft-spup-syntax*
2369 Speedup構文ファイルにはいくつかのオプションがある:
2371 - strict_subsections : この変数が定義されていると、セクションとサブセクション
2372   用のキーワードだけが文としてハイライトされ、他のキーワードにはされなくなる
2373   (OPERATIONセクションのWITHINと同様)。
2375 - highlight_types : この変数が定義されていると、温度や圧力のようなストリーム
2376   型が単純な識別子でなくTypeとしてハイライトされる。Includedは通常DECLAREセク
2377   ション中に現れる型である;ユーザが自分用の型を定義しているならそれらを構文ファ
2378   イルに含めなければならない。
2380 - oneline_comments : この値は1から3までの間になり、#スタイルのコメントのハイラ
2381   イトを決定する。
2383   oneline_comments = 1 : 偶数個の#の後にも通常のSpeedupコードが現れることを許す
2385   oneline_comments = 2 : 2番目の#で始まるコードをエラーとして表示する。これが
2386   デフォルトの設定である。
2388   oneline_comments = 3 : 1個以上の#を含む行全体をエラーとしてハイライトする。
2390 変数のPRESETにより、OPERATIONセクションはとても大きくなりがちであり、そのため
2391 シンクロナイズが追いつかなくなるかもしれない。あなたのコンピュータが十分速いな
2392 ら構文ファイルの最後近くでminlinesとmaxlinesの値を大きくするとよいかもしれない。
2395 SQL                                             *sql.vim* *ft-sql-syntax*
2396                                 *sqlinformix.vim* *ft-sqlinformix-syntax*
2397                                 *sqlanywhere.vim* *ft-sqlanywhere-syntax*
2399 SQLにはANSI標準があるのだが、ほとんどのデータベースエンジンは独自の拡張を追加
2400 している。現在のところ、VimはOracleとInformixのSQL方言をサポートしている。
2401 デフォルトではVimは"*.sql"のファイルをOracle SQLであると判断する。
2403 現在のところ、Vimは構文スクリプトによって、様々なベンダのSQLに対応している。
2404 デフォルト設定をOracleから他の対応しているSQLに変更することができる。また、
2405 バッファごとに使うSQLの方言を変えることも簡単にできる。
2407 より詳しい説明は|sql.txt|を参照。
2410 TCSH                                            *tcsh.vim* *tcsh-syntax*
2412 これは"tcsh"という名前のシェルをカバーしている。これはcshのスーパーセットであ
2413 る。ファイル形式がどのように判定されるかは|csh.vim|を参照。
2415 tcshはシェル変数"backslash_quote"をセットしていない限り文字列中に\"が現れるこ
2416 とを許さない。Vimにバックスラッシュクォート構文が存在しないと判断させたいな
2417 ら、次の行を.vimrcに加えること: >
2419         :let tcsh_backslash_quote = 0
2421 上方向にスクロールしているときにハイライトがおかしくなり、それがCTRL-Lで再描画
2422 すると直るようなら、変数"tcsh_minlines"の値を大きくしてみるとよい: >
2424         :let tcsh_minlines = 100
2426 こうすると構文シンクロナイズが画面最上行の100行前から始まるようになる。大きな
2427 値にすることの欠点は、再描画が遅くなることである。
2430 TEX                                             *tex.vim* *ft-tex-syntax*
2432 *tex-folding*
2433 構文折り畳み? ~
2435 <syntax/tex.vim>のバージョン28以降では、構文による部分、章、節、小節などの折り
2436 畳みに対応している。それを有効にするには次の行を<.vimrc>に書き、 >
2437         let g:tex_fold_enabled=1
2438 :set fdm=syntaxとする。後者をLaTeXファイルの末尾にモードラインとして書いておく
2439 といいかもしれない: >
2440         % vim: fdm=syntax
2442 *tex-runon*
2443 追い込みコメント/Mathについて ~
2445 <syntax/tex.vim>の構文ハイライトはTeX, LaTeX, AmsTeXをサポートしている。normal,
2446 texZone, texMathZoneの3つの主な区間・範囲がサポートされている。これらの区間を
2447 適切に区切るようかなりの努力がされたが、$..$と$$..$$で線引きされる区間は開始・
2448 終了のパターンとまったく同じにシンクロナイズさせることは出来ない。その結果、特
2449 別な"TeX comment"が提供されている >
2450         %stopzone
2451 このコメントがあると、ここで強制的にtexZoneまたはtexMathZoneのハイライトを終わ
2452 らせる。
2454 *tex-slow*
2455 構文ハイライトが遅いならば ~
2457 遅いコンピュータを使っているなら、これらの値を減らすとよいかもしれない >
2458         :syn sync maxlines=200
2459         :syn sync minlines=50
2460 (特に後者を)。速いコンピュータを使っているならこれらの値を増やしてもよい。これ
2461 らは第一にシンクロナイズ(つまり、画面最上行のテキストがどのグループに入るか)に
2462 影響を与える。
2464 *tex-morecommands* *tex-package*
2465 もっとコマンドをハイライトさせたい?
2467 LaTeXはプログラミング言語であり、特殊化されたLaTeXのコマンド、構文、フォントが
2468 つまったパッケージがたくさんある。そのようなパッケージを使っている人は、標準の
2469 syntax/tex.vimにそのパッケージを対応させてほしいと思うだろう。しかしそれは明ら
2470 かに非現実的である。そこで、|mysyntaxfile-add|で使われているテクニックを使って
2471 、syntax/tex.vimで提供されているハイライトを拡張・修正してみてください。
2473 *tex-error*
2474 エラーのハイライトが行き過ぎならば ~
2476 <tex.vim>は様々な種類のレキシカルエラーチェックをサポートしている。すなわち、
2477 エラーチェックはとても便利だが、実際にはエラーでない箇所もエラーと示すかもしれ
2478 ない。それが嫌なら、次の行を<.vimrc>に置くとよい: >
2479         let tex_no_error=1
2480 すると<syntax/tex.vim>によるすべてのエラーチェックが行われなくなる。
2482 *tex-math*
2483 新しいMathグループが必要ならば ~
2485 新しいmathグループをLaTeXに含めるには、以下のコードがその例となるだろう: >
2487         call TexNewMathZone(sfx,mathzone,starform)
2488 新しいmathグループに一意な接尾辞をつけたいと思うだろう(現在のところ、AからLま
2489 でとVからZまでは<syntax/tex.vim>自身によって取得されている)。
2490 例として、<syntax/tex.vim>でeqnarrayがどのように設定されているかを見てみよ
2491 う: >
2492         call TexNewMathZone("D","eqnarray",1)
2493 "mathzone"をあなたが作ったmathグループの名前に変える必要がある。
2494 また、それが呼ばれるようにするために.vim/after/syntax/tex.vimに書くこと。
2495 変数"starform"が真ならば、あなたが作ったmathグループがアスタリスクつきの形を
2496 もつことを意味する(例. eqnarray*)。
2498 LOCALMATHをあなたが決めた新しいmathグループに書き換える必要がある。そしてこれ
2499 を.vim/after/syntax/tex.vimに加えること。
2501 *tex-style*
2502 新しいスタイルを始めるには ~
2504 *.texファイルで"\makeatletter"を使う人がいるかもしれないので、コマンド中で"@"
2505 が使えるようになっている。しかし*.texファイルは次の拡張子: sty cls clo dtx ltx
2506 を持たないので@をエラーと判断してハイライトする。これを解決するにはこうする: >
2508         :let b:tex_stylish = 1
2509         :set ft=tex
2511 "let g:tex_stylish=1"を<.vimrc>に書くと<syntax/tex.vim>は常にこのような@の使用
2512 法を受け入れるようになる。
2515 TF                                              *tf.vim* *ft-tf-syntax*
2517 tfの構文ハイライトには1つのオプションがある。
2519 シンクロナイズについて、minlinesのデフォルトは100になっている。この値を変える
2520 には、"tf_minlines"に望みの値をセットする。例: >
2522         :let tf_minlines = your choice
2525 VIM                                             *vim.vim* *ft-vim-syntax*
2527 正確な構文ハイライトと画面更新速度はトレードオフの問題である。正確さを向上させ
2528 るには、変数g:vim_minlinesの値を大きくすればよい。変数g:vim_maxlinesは画面更新
2529 速度を改善するのに使える(これについては|:syn-sync|を参照)。
2531         g:vim_minlines : シンクロナイズの最小行数をセットするのに使う
2532         g:vim_maxlines : シンクロナイズの最大行数をセットするのに使う
2534 g:vimembedscriptオプションは外部スクリプト言語(現在のところperl, python, ruby,
2535 tcl)のサポートを犠牲にする代わりに、vimスクリプト用の構文ハイライトの読み込み
2536 をいくらか速くすることができる。
2538         g:vimembedscript == 1 (デフォルト)    <vim.vim>埋め込みスクリプト言
2539         g:vimembedscript が存在しない          語: perl, python, ruby, tclの
2540                                                  ハイライトを有効化する。
2542         g:vimembedscript == 0                    埋め込みスクリプト言語用の構
2543                                                  文ハイライトを読み込まない。
2545 syntax/vim.vimによるエラーのハイライトは必ずしも正しいとは限らない。Vimスクリ
2546 プトは正しくハイライトするのが難しい言語である。エラーのハイライトをやめるには
2547 次を|vimrc|に書けばよい: >
2549         let g:vimsyntax_noerror = 1
2552 XF86CONFIG                              *xf86conf.vim* *ft-xf86conf-syntax*
2554 XF86Configファイルの構文はXFree86 v3.xとv4.xで異なっている。両方のバージョンが
2555 サポートされている。自動的に判定がされるが、完全からはほど遠い。手動でバージョ
2556 ンを設定する必要があるかもしれない。使用しているXFree86に応じて、.vimrc中で変
2557 数xf86conf_xfree86_versionを3または4にセットすること。例: >
2558         :let xf86conf_xfree86_version=3
2559 複数のバージョンが混在しているときには
2560 変数b:xf86conf_xfree86_versionをセットすること。
2562 Note オプション名の中のスペースとアンダースコアはハイライトされない。オプショ
2563 ン名をハイライトさせるには"__s yn con gr_e_e_n"でなく"SyncOnGreen"と書くこと。
2566 XML                                             *xml.vim* *ft-xml-syntax*
2568 Xml名前空間がデフォルトでハイライトされる。次のグローバル変数をセットするとそ
2569 れが無効化される: >
2571         :let g:xml_namespace_transparent=1
2573                                                         *xml-folding*
2574 xml構文ファイルを使うと、開始タグと終了タグの間を折りたたむ|folding|ことができ
2575 る(|:syn-fold|を参照)。これをオンにするには >
2577         :let g:xml_syntax_folding = 1
2578         :set foldmethod=syntax
2580 とする。
2581 構文による折り畳みは、構文ハイライトを著しく遅くする可能性がある。特に巨大なファ
2582 イルではそうである。
2585 X Pixmaps (XPM)                                 *xpm.vim* *ft-xpm-syntax*
2587 xpm.vimは編集中のXPMファイルの内容から、動的に構文要素を生成する。そのため、色
2588 設定文字列などを変更したときは":set syn=xpm"などとしてxpm.vimを読み直さなけれ
2589 ばならない。
2591 色つきのピクセルをコピーするには"yl"で"pixel"をヤンクし、どこかで"P"としてそれ
2592 を挿入する。
2594 マウスで図を描くには、次のようにしてみるとよい: >
2595    :function! GetPixel()
2596    :   let c = getline(".")[col(".") - 1]
2597    :   echo c
2598    :   exe "noremap <LeftMouse> <LeftMouse>r".c
2599    :   exe "noremap <LeftDrag>  <LeftMouse>r".c
2600    :endfunction
2601    :noremap <RightMouse> <LeftMouse>:call GetPixel()<CR>
2602    :set guicursor=n:hor20          " to see the color beneath the cursor
2603 これを行うと、右ボタンがピペットになり、左ボタンがペンになる。これは1ピクセル
2604 につき1文字だけとなっているXPMファイルでうまく機能する。ピクセル文字列の外をク
2605 リックしてはならない。これを自由に改良してください。
2607 セルサイズが正方形のフォントを使うと見栄えがよくなる。Xの場合の例: >
2608         :set guifont=-*-clean-medium-r-*-*-8-*-*-*-*-80-*
2611 ==============================================================================
2612 5. 構文を定義する                                      *:syn-define* *E410*
2614 構文アイテムには3つのタイプがある。
2616 1. キーワード (Keyword)
2617    これはオプション'iskeyword'で定義されるキーワード文字だけからなる。他の構文
2618    要素を含むことはできない。完全な単語(マッチの前後にキーワード文字が存在しな
2619    い)にのみマッチする。キーワード"if"は"if(a=b)"にはマッチするが、"ifdef x"に
2620    はマッチしない。"("はキーワード文字でなく、"d"はキーワード文字だから。
2622 2. マッチ (Match)
2623    単一の正規表現パターンにマッチする。
2625 3. リージョン (Region)
2626    正規表現パターン"start"のマッチ位置から始まり、正規表現パターン"end"のマッ
2627    チ位置で終わる。その間にどんなテキストがあってもよい。正規表現パターン
2628    "skip"を使うとパターン"end"にマッチするのを避けることができる。
2630 複数の構文アイテムを1つの構文グループに入れることができる。構文グループにはハ
2631 イライト属性を与えることができる。例えば、"/* .. */"のコメントを定義する要素と
2632 "// .."のコメントを定義する要素を作り、両方を"Comment"グループに入れる。そして
2633 "Comment"を青のボールドフォントで表示するように指定すると、両方のタイプのコメ
2634 ントに対して同じハイライトがされるようになる。1つの構文要素に対し1つの構文グルー
2635 プを作ってもよいし、すべての要素を1つのグループに入れてもよい。これはハイライ
2636 ト属性をどう指定したいかによる。各要素をそれ自身のグループに入れるとすると、た
2637 くさんのグループに対して色を指定しなければならなくなる。
2639 構文グループとハイライトグループは似ているが異なることに注意。ハイライトグルー
2640 プに対してはハイライト属性を与えることになる。それらの属性が同名の構文グループ
2641 に対して適用される。
2643 同じ箇所に対して複数のアイテムがマッチした場合には、最後に定義されたものが有効
2644 になる。よって同じテキストにマッチする要素を使って、以前に定義された構文アイテ
2645 ムを上書きすることができる。大文字・小文字の違いも含めてマッチするキーワードが
2646 ある場合は、そうでないものより優先される。
2649 優先順位                                            *:syn-priority*
2651 複数の構文アイテムがマッチするときは、以下のルールが適用される:
2653 1. 複数のマッチまたはリージョンアイテムが同じ場所で始まるときは、後に定義され
2654    たものが優先される。
2655 2. マッチとリージョンよりキーワードが優先される。
2656 3. より前の位置から始まる要素が優先される。
2659 大文字・小文字の区別                                      *:syn-case* *E390*
2661 :sy[ntax] case [match | ignore]
2662         これ以降の":syntax"コマンドが大文字・小文字を区別するかどうかを定義す
2663         る。"match"を使うと区別し、"ignore"を使うと区別しなくなる。これ以前の
2664         要素には影響せず、次の":syntax case"コマンドまでのすべての要素に影響
2665         する。
2668 スペルチェック                                         *:syn-spell*
2670 :sy[ntax] spell [toplevel | notoplevel | default]
2671         構文アイテムに入っていないテキストに対して、どこでスペルチェック
2672         を行うかを定義する:
2674         toplevel:       テキストのスペルチェックを行う。
2675         notoplevel:     テキストのスペルチェックを行わない。
2676         default:        クラスタ@Spellがあるときスペルチェックを行わない。
2678         構文アイテムに入っているテキストはクラスタ@Spellと@NoSpellを使う
2679         |spell-syntax|。クラスタ@Spellと@NoSpellがないときは、スペルチェックは
2680         "default"と"toplevel"に対して行われる。
2682         スペルチェックを有効化するにはオプション'spell'をオンにしなければなら
2683         ない。
2686 キーワードの定義                                        *:syn-keyword*
2688 :sy[ntax] keyword {group-name} [{options}] {keyword} .. [{options}]
2690         キーワードを定義する。
2692         {group-name}    "Comment"のような構文グループ名。
2693         [{options}]     後述の|:syn-arguments|を参照。
2694         {keyword} ..    このグループに含めるキーワードのリスト。
2696         例: >
2697   :syntax keyword   Type   int long char
2699         {options}は行のどこに置いてもよい。それらは与えられたキーワード全てに
2700         適用される。オプションがキーワードの後にあっても同じ。以下の例はまった
2701         く同じ意味になる: >
2702   :syntax keyword   Type   contained int long char
2703   :syntax keyword   Type   int long contained char
2704   :syntax keyword   Type   int long char contained
2705 <                                                               *E789*
2706         Vimのexコマンドのようにキーワードに短縮形があるとき、省略可能な部分を
2707         []のでくくることによって受け入れるキーワードをいっぺんに定義することが
2708         できる: >
2709   :syntax keyword   vimCommand   ab[breviate] n[ext]
2711         キーワードは、その文字全てがオプション'iskeyword'に含まれていないと認
2712         識されないことに注意。1文字でも含まれていないものがあると、そのキーワー
2713         ドは認識されない。
2714         マルチバイト文字を使うこともできる。マルチバイト文字は'iskeyword'に含
2715         まれている必要はない。
2717         キーワードは常にマッチやリージョンより優先される。キーワードは一要素以
2718         上マッチしたとき使われる。キーワードは入れ子にならなく、それ以外のもの
2719         を含むこともできない。
2721         オプション名と同じ単語は、それがその位置で利用できないものであったとし
2722         ても、キーワードとして定義することはできない。マッチで代用すること。
2724         キーワードの長さは最大80文字である。
2726         containmentが異なれば、同じキーワードを複数回定義することができる。例
2727         えば、まずキーワードをcontainedでなく定義して1つのハイライトグループを
2728         設定し、次にcontainedとして定義して別のハイライトグループを設定するこ
2729         とができる。例: >
2730   :syn keyword vimCommand tag
2731   :syn keyword vimSetting contained tag
2732 <       構文要素の外側に"tag"があったときはハイライトグループ"vimCommand"が適
2733         用される。"vimSetting"を含む構文要素の中に"tag"があったときは
2734         "vimSetting"グループが適用される。
2737 マッチの定義                                          *:syn-match*
2739 :sy[ntax] match {group-name} [{options}] [excludenl] {pattern} [{options}]
2741         マッチを定義する。
2743         {group-name}            "Comment"のような構文グループ名。
2744         [{options}]             後述の|:syn-arguments|を参照。
2745         [excludenl]             行末の"$"を含んでいるパターンに対して、行末以
2746                                 降までマッチやリージョンを拡張しないようにす
2747                                 る。パターンの前に置かなければならない。
2748                                 |:syn-excludenl|
2749         {pattern}               マッチを定義する検索パターン。|:syn-pattern|を
2750                                 後述の参照。
2751                                 パターンは複数行にもマッチする。よって検
2752                                 索を開始する場所によってマッチが変わってくる可
2753                                 能性がある。シンクロナイズが関係してくることに
2754                                 注意。
2756         例 (文字定数にマッチする): >
2757   :syntax match Character /'.'/hs=s+1,he=e-1
2760 リージョンの定義        *:syn-region* *:syn-start* *:syn-skip* *:syn-end*
2761                                                         *E398* *E399*
2763 :sy[ntax] region {group-name} [{options}]
2764                 [matchgroup={group-name}]
2765                 [keepend]
2766                 [extend]
2767                 [excludenl]
2768                 start={start_pattern} ..
2769                 [skip={skip_pattern}]
2770                 end={end_pattern} ..
2771                 [{options}]
2773         リージョンを定義する。複数行にわたってもよい。
2775         {group-name}            "Comment"のような構文グループ名。
2776         [{options}]             後述の|:syn-arguments|を参照。
2777         [matchgroup={group-name}]  以下の開始パターンと終了パターンのマッチに
2778                                 のみ使われる構文グループ。マッチの開始パターン
2779                                 と終了パターンには使われない。開始パターンと終
2780                                 了パターン用に異なるグループを使わないようにリ
2781                                 セットするにはNONEを使う。
2782                                 |:syn-matchgroup|を参照。
2783         keepend                 内包されたマッチが終了パターンを越えないように
2784                                 する。
2785                                 |:syn-keepend|を参照。
2786         extend                  このリージョンを含むアイテムの"keepend"を上書
2787                                 きする。|:syn-extend|を参照。
2788         excludenl               行末の"$"を含んでいるパターンに対して、行末以
2789                                 降までマッチやアイテムを拡張しないようにする。
2790                                 終了パターンに対してのみ使い道がある。適用する
2791                                 パターンの前に置かねばならない。
2792                                 |:syn-excludenl|
2793         start={start_pattern}   リージョンの開始を定義する検索パターン。後述の
2794                                 |:syn-pattern|を参照。
2795         skip={skip_pattern}     その中ではリージョンの終了を探さないテキストを
2796                                 定義する検索パターン。|:syn-pattern|を参照。
2797         end={end_pattern}       リージョンの終了を定義する検索パターン。
2798                                 後述の|:syn-pattern|を参照。
2800         例: >
2801   :syntax region String   start=+"+  skip=+\\"+  end=+"+
2803         start/skip/endパターンとオプションはどんな順序で書いてもよい。skip
2804         パターンは0個か1個許される。startとendパターンは1個以上なければならな
2805         い。つまりskipパターンは省略できるが、少なくとも1つのstartとendパター
2806         ンを書かなければならない。等号記号の前後にはホワイトスペースがあっても
2807         よい(たいていはホワイトスペースがないほうが見やすいが)。
2809         2個以上のstartパターンが与えられたときは、それらの1つがマッチすれば十
2810         分である。つまりstartパターンらの間にはOR関係があることになる。最後に
2811         マッチしたものが使われる。endパターンについても同じである。
2813         endパターンの検索はstartパターンの直後から行われる。これはendパターン
2814         のマッチとstartパターンは決して重ならないことを意味する。
2816         skipとendパターンは改行をまたいでマッチしてもよい。しかしパターンの検
2817         索はどの行からも始まりうるので、望みどおりにならないこともある。
2818         skipパターンは次の行のendパターンのマッチを回避しない。問題を避けるには
2819         単一行のパターンを使うこと。
2821         Note: リージョンの開始は、startパターンのマッチによってのみ決まる。
2822         endパターンの照合のチェックはされない。次のは機能しない: >
2823                 :syn region First  start="("  end=":"
2824                 :syn region Second start="("  end=";"
2825 <       2番目のは常にFirstより前にマッチする(最後に定義されたパターンが優先され
2826         る)。こうすると、その前に':'があるかどうかに関わらず、2番目のリージョ
2827         ンが次の';'まで続く。マッチを使うとうまくいく: >
2828                 :syn match First  "(\_.\{-}:"
2829                 :syn match Second "(\_.\{-};"
2830 <       このパターンは"\_."によって任意の文字と改行にマッチし、"\{-}"によって
2831         繰り返しにマッチする(最小限の個数の繰り返し)。
2833                                                         *:syn-keepend*
2834         デフォルトでは内包されたマッチはendパターンのマッチを隠す。これはネス
2835         ト用に便利である。例えば、"{"で始まり"}"で終わるリージョンがもう1つの
2836         リージョンを含むことができる。"}"に出会うと内包されたリージョンが終わ
2837         り、外側のリージョンは終了しない:
2838             {           外側の"{}"リージョンの開始
2839                 {       内包された"{}"リージョンの開始
2840                 }       内包された"{}"リージョンの終了
2841             }           外側の"{}"リージョンの終了
2842         この挙動が望みでないなら、引数"keepend"をつければ、外側のリージョンの
2843         endパターンのマッチによって内包されたアイテムも終了させることができる。
2844         そうすると同一リージョンのネストが不可能になるが、内包されたアイテムで
2845         endパターンをスキップさせることなく、endパターンの一部をハイライトする
2846         ことができる。例: >
2847   :syn match  vimComment +"[^"]\+$+
2848   :syn region vimCommand start="set" end="$" contains=vimComment keepend
2849 <       "keepend"によってvimCommandが常に行末で終わるようにしている。たとえ内
2850         包されたvimCommentが<EOL>とのマッチを含んでいてもそのようになる。
2852         "keepend"が使われないときは、内包されたマッチの後でendパターンのマッチ
2853         が検索される。"keepend"が含まれているときは最初にendパターンにマッチし
2854         たところで終了し、内包されたマッチもすべてそこで終了になる。
2856                                                         *:syn-extend*
2857         引数"extend"を使うと"keepend"の挙動が変わる。"keepend"付きのアイテム中
2858         に"extend"付きのアイテムが内包されていると、"keepend"が無視され、外側
2859         のリージョンが拡張される。これによっていくつかのアイテムに対して例外的
2860         にリージョンを拡張させるようにできる。例: >
2862    :syn region htmlRef start=+<a>+ end=+</a>+ keepend contains=htmlItem,htmlScript
2863    :syn match htmlItem +<[^>]*>+ contained
2864    :syn region htmlScript start=+<script+ end=+</script[^>]*>+ contained extend
2867         この例では、htmlItemの位置でhtmlRefが終了する。htmlItemは<>要素をハイ
2868         ライトするためだけに使われる。htmlScriptアイテムはhtmlRefアイテムを拡
2869         張する。
2871         もう1つの例: >
2872    :syn region xmlFold start="<a>" end="</a>" fold transparent keepend extend
2873 <       "</a>"を別の色でハイライトしたいときなどのために、"keepend"つきでリー
2874         ジョンを定義し、内包するアイテムによって終端が変更されないようにしてい
2875         る。ただしxmlFoldがネストしたとき(それ自身を含んだとき)、"extend"が適
2876         用され、内側の"</a>"はそのリージョン自身だけを終了させ、それを含んでい
2877         るリージョンは終了しない。
2879                                                         *:syn-excludenl*
2880         マッチ用のパターンやリージョンの終了パターンが行末にマッチさせるために
2881         '$'を含んでいると、それを含むリージョンアイテムが次の行まで継続するよ
2882         うになる。例えば、"\\$"(行末のバックスラッシュ)とのマッチを使うと、通
2883         常は行末で終了するはずのリージョンを継続させることができる。これはデフ
2884         ォルトの挙動である。これが望みどおりでないなら、これをされる2つの方法
2885         がある:
2886         1. 外側のアイテムに"keepend"を使う。こうすると含んでいるアイテム全てに
2887            対して拡張しないようにする。含んでいるアイテム全てが外側のアイテム
2888            を拡張してはならないときに使える。
2889         2. 内側のアイテムに"excludenl"を使う。こうするとそのマッチに対して、そ
2890            れを含んでいるマッチやリージョンを拡張しないようにする。これはいく
2891            つかのアイテムだけが外側のアイテムを拡張してはならないときに使える。
2892            "excludenl"はそれを適用するパターンの前に置かねばならない。
2894                                                         *:syn-matchgroup*
2895         "matchgroup"は、リージョンの本体とその開始・終了パターンに対して異なる
2896         ハイライトをしたいときに使える。例: >
2897   :syntax region String matchgroup=Quote start=+"+  skip=+\\"+  end=+"+
2898 <       こうすると引用符を"Quote"グループでハイライトし、その間にあるテキスト
2899         を"String"グループでハイライトすることができる。"matchgroup"はそれが従
2900         うすべての開始・終了パターンに対して使われる。matchgroupを使わないよう
2901         に戻すには"matchgroup=NONE"を使う。
2903         開始・終了パターンが"matchgroup"でハイライトされるとき、そのリージョン
2904         に含まれているアイテムは無視される。これによって含まれているアイテムが
2905         開始・終了パターンにマッチするのを避けることができる。"transparent"を
2906         使っている場合、これは"matchgroup"でハイライトされる開始・終了パターン
2907         のマッチ部分には適用されない。
2909         次の例は、3段階の括弧を異なる色でハイライトする例である: >
2910    :sy region par1 matchgroup=par1 start=/(/ end=/)/ contains=par2
2911    :sy region par2 matchgroup=par2 start=/(/ end=/)/ contains=par3 contained
2912    :sy region par3 matchgroup=par3 start=/(/ end=/)/ contains=par1 contained
2913    :hi par1 ctermfg=red guifg=red
2914    :hi par2 ctermfg=blue guifg=blue
2915    :hi par3 ctermfg=darkgreen guifg=darkgreen
2917 ==============================================================================
2918 6. :syntaxの引数                                   *:syn-arguments*
2920 構文アイテムを定義する:syntaxコマンドにはたくさんの引数がある。
2921 ここでは共通のものを説明する。引数はどんな順序でもよく、パターンと混ざっていて
2922 もよい。
2924 全てのコマンドが全ての引数を受けいれるわけではない。次の表はどの引数がどのコマ
2925 ンドに対して利用可能かを示している:
2926                                                         *E395* *E396*
2927                     contains  oneline   fold  display  extend ~
2928 :syntax keyword          -       -       -       -       -
2929 :syntax match           yes      -      yes     yes     yes
2930 :syntax region          yes     yes     yes     yes     yes
2932 以下の引数は3つのコマンド全てに対して使える:
2933         contained
2934         containedin
2935         nextgroup
2936         transparent
2937         skipwhite
2938         skipnl
2939         skipempty
2942 contained                                               *:syn-contained*
2944 引数"contained"が与えられると、そのアイテムはトップレベルでは認識されず、他の
2945 マッチの"contains"フィールドで指定されたときのみ認識される。例: >
2946    :syntax keyword Todo    TODO    contained
2947    :syntax match   Comment "//.*"  contains=Todo
2950 display                                                 *:syn-display*
2952 引数"display"が与えられると、そのアイテムは検出されたハイライトが表示されない
2953 時にはスキップされる。こうすることで、表示されるべきテキストの構文状態だけを検
2954 索するときにはこのアイテムはスキップされ、ハイライトが高速になる。
2956 通常は、以下の条件に合うときマッチとリージョンに"display"を使うとよい:
2957 - アイテムが行末を越えて継続しない。Cの例: "/*"コメント用のリージョンは
2958   "display"を含んではならない。なぜなら次の行に継続するからである。
2959 - アイテムが、行を越えて継続したり、そのコンテナを次行まで継続させる効果を持つ
2960   子アイテムを含んでいない。
2961 - それを含むどんなアイテムのサイズも変更しない。Cの例: プリプロセッサマッチ中
2962   の"\\$"とのマッチは"display"を含んではならない。なぜならこれによってプリプロ
2963   セッサマッチが短くなるかもしれないからである。
2964 - 他のアイテムがマッチすることを許さず、そうでなければマッチせず、加えてマッチ
2965   自体が非常に長くなるようなアイテム。
2966   Cの例: "//"コメント用のマッチは"display"を使ってはならない。なぜならそのコメ
2967   ントの内側の"/*"がマッチするかも知れず、そうなると行末をまたぐコメントが始ま
2968   るからである。
2970 例としてC言語では次のとき"display"が使える:
2971 - 数字とのマッチ
2972 - ラベルとのマッチ
2975 transparent                                             *:syn-transparent*
2977 引数"transparent"が与えられると、そのアイテムはそれ自身ではハイライトされず、
2978 それを含むアイテムのハイライトを引き継ぐ。これはハイライトはせず、テキストの一
2979 部をスキップするためだけに使われる構文アイテムに対して有効である。
2981 transparentなアイテム自身に引数"contains"が与えられていない場合、それを含むア
2982 イテムから引数"contains="も受け継がれる。望まないアイテムが含まれるのを避ける
2983 には"contains=NONE"とすること。文字列中の単語をハイライトするが、"vim"だけは
2984 例外とする例: >
2985         :syn match myString /'[^']*'/ contains=myWord,myVim
2986         :syn match myWord   /\<[a-z]*\>/ contained
2987         :syn match myVim    /\<vim\>/ transparent contained contains=NONE
2988         :hi link myString String
2989         :hi link myWord   Comment
2990 "myVimが"myWord"の後に来ているので、"myVim"が優先される(同じ位置で複数のアイテ
2991 ムにマッチした場合、最後に定義されたものが前のものを上書きする)。"transparent"
2992 により、"myVim"にマッチしたテキストは"myString"と同じハイライトになる。しかし
2993 "myVim"は何も含まない。もし"contains=NONE"を取り除くと、"myVim"は"myString"か
2994 ら引数containsを受け継いで"myWord"を含むようになり、テキスト"vim"はConstantと
2995 してハイライトされる。これは、内包されたマッチは同じ位置でそれ自身の内側でマッ
2996 チしないためこうなる。つまり、ここではマッチ"myVim"は"マッチmyWord"を上書きし
2997 ない。
2999 色づけされたテキストは、内包されたアイテムの層のようにみなすことができる。内包
3000 されたアイテムは内包しているアイテムより上にあり、そのため内包されたアイテムを
3001 見ることができる。内包されたアイテムがtransparentな場合、それを透過して見るこ
3002 とができ、よってそれを含んでいるアイテムが見える。図にすると:
3004                 ここから見る
3006             |   |   |   |   |   |
3007             V   V   V   V   V   V
3009                xxxx       yyy           さらに内包されたアイテム達
3010             ....................        内包されたアイテム (transparent)
3011         =============================   最初のアイテム (最も外側のアイテム)
3013 'x', 'y', '='はハイライトされた構文アイテムを表す。'.'はtransparentなグループ
3014 を表している。
3016 このとき次のように見える:
3018         =======xxxx=======yyy========
3020 つまりtransparentな"...."は透過して見える。
3023 oneline                                                 *:syn-oneline*
3025 引数"oneline"をつけると、そのリージョンは行をまたがないという意味になる。つま
3026 り、現在行の中で完全にマッチしなければならない。しかし、そのリージョンが行をま
3027 たぐアイテムを内包している場合は次の行に継続する。内包されたアイテムによって行
3028 継続パターンを認識することができる。しかしその場合でも"end"パターンは最初の行
3029 内でマッチしなければならない。そうでないとリージョンは開始すらしない。
3031 startパターンが行末にマッチする"\n"を含んでいるときは、startパターンの終了位置
3032 と同じ行にendパターンがなければならない。endパターンも行末を含んでもよい。
3033 つまり引数"oneline"は、startパターンの終了位置とendパターンの開始位置が同一行
3034 にあることを意味する。改行にマッチするskipパターンを使ってもこの規則を変えるこ
3035 とはできない。
3037 fold                                                    *:syn-fold*
3039 引数"fold"はこのアイテムに対して折り畳みレベルを1増加させる。例: >
3040    :syn region myFold start="{" end="}" transparent fold
3041    :syn sync fromstart
3042    :set foldmethod=syntax
3043 これは{}ブロックごとに1つの折り畳みを作らせる。
3045 折り畳みはそのアイテムの開始位置から始まり、アイテムの終了位置で終わる。開始位
3046 置と終了位置が同一行にある場合、折り畳みは作られない。
3047 オプション'foldnestmax'によって構文折り畳みのネストを制限できる。
3048 {|+folding|機能なしでコンパイルされた場合は利用できない}
3051                         *:syn-contains* *E405* *E406* *E407* *E408* *E409*
3052 contains={groupname},..
3054 引数"contains"の後には構文グループ名のリストを続ける。"contains"で指定されたグ
3055 ループは、そのアイテムの内側で始まることを許可される(内包されるグループによっ
3056 ては、外側のアイテムの終端が拡張されることもある)。これを使うと、マッチとリー
3057 ジョンが再帰的にネストできるようになる。引数"contains"がまったく指定されない場
3058 合は、そのアイテムはどんなグループも内包しない。ここで使うグループ名は、必ずし
3059 も以前に定義していなくてもよい。
3061 contains=ALL
3062                 containsリストが"ALL"だけのとき、全てのグループがこのアイテム
3063                 の内側で許可される。
3065 contains=ALLBUT,{group-name},..
3067                 containsリストの最初の要素が"ALLBUT"のとき、{group-name}で列挙
3068                 したグループを除く全てのグループがこのアイテムの内側で許可され
3069                 る。例: >
3070   :syntax region Block start="{" end="}" ... contains=ALLBUT,Function
3072 contains=TOP
3073                 containsリストの最初の要素が"TOP"のとき、引数"contained"を持た
3074                 ないグループ全てが許可される。
3075 contains=TOP,{group-name},..
3076                 "TOP"と同様だが、{group-name}に列挙したグループは除かれる。
3078 contains=CONTAINED
3079                 containsリストの最初の要素が"CONTAINED"のとき、引数
3080                 "contained"を持つグループ全てが許可される。
3081 contains=CONTAINED,{group-name},..
3082                 "CONTAINED"と同様だが、{group-name}に列挙したグループは除かれ
3083                 る。
3086 "contains"リスト内の{group-name}はパターンであってもよい。そのパターンにマッチ
3087 するグループ名全てが含まれる("ALLBUT"が使われたときはそれが除かれる)。パターン
3088 はホワイトスペースや','を含んではならない。例: >
3089    ... contains=Comment.*,Keyw[0-3]
3090 パターンの照合はそのsyntaxコマンドが実行されたときに行われる。それ以降に定義さ
3091 れたグループは照合されない。また、現在のsyntaxコマンドが新しいグループを定義し
3092 ている場合、そのグループは照合されない。ファイル内にsyntaxコマンドを書く場合、
3093 定義されていないグループを当てにすることはできないことに注意。これは、そのファ
3094 イルは以前に読み込まれているかもしれず、":syn clear"はグループ名を削除しないた
3095 めである。
3097 内包されたグループはリージョンのstartとendパターン内にもマッチする。これが望み
3098 の挙動でないなら、引数"matchgroup"を使うとよい|:syn-matchgroup|。オフセット
3099 "ms="と"me="によって内包されたアイテムがマッチする領域を変更することができる。
3100 これはハイライトされる範囲も制限することに注意。
3103 containedin={groupname}...                              *:syn-containedin*
3105 引数"containedin"の後には構文グループ名のリストを続ける。するとこのアイテムが
3106 それらのグループの内側で始まることが許可される。これは外側のアイテムが引数
3107 "contains="でこのアイテムを指定したのと同じように動作する。
3109 {group-name}...の指定の仕方は前述の"contains"と同様である。
3111 これは構文アイテムを後から追加するときに便利である。既に定義されているアイテム
3112 の定義を変更することなく、その内側にアイテムを含めることができる。例えば、Cの
3113 構文を読み込んだ後で、Cコメント中の単語をハイライトしたいときは: >
3114         :syn keyword myword HELP containedin=cComment contained
3115 このアイテムがトップレベルではマッチしないように"contained"を使っている。
3117 "containedin"の照合は、このアイテムが現れる場所に追加される。引数"contains"も
3118 通常通り追加される。注意: キーワードは他のアイテムを含むことができないため、
3119 "containedin"の先にキーワードを指定することは無意味である。
3122 nextgroup={groupname},..                                *:syn-nextgroup*
3124 引数"nextgroup"の後には構文グループ名のリストをカンマ区切りで続ける
3125 ("contains"と同様。パターンを使うこともできる)。
3127 引数"nextgroup"が与えられると、マッチやリージョンの終了位置の後ろで、指定され
3128 た構文グループにマッチする部分が探される。どのグループもマッチしなければ、ハイ
3129 ライトは通常通り続けられる。マッチが見つかった場合はそのグループが使われる。現
3130 在のグループの引数"contains"でそのグループが指定されていなくてもそうなる。つま
3131 り、これは指定されたグループの優先度を最大にすることと同じである。例: >
3132    :syntax match  ccFoobar  "Foo.\{-}Bar"  contains=ccFoo
3133    :syntax match  ccFoo     "Foo"           contained nextgroup=ccFiller
3134    :syntax region ccFiller  start="."  matchgroup=ccBar  end="Bar"  contained
3136 これは"Foo"の後に"Bar"が現れたときのみ、"Foo"と"Bar"に異なるハイライトをする。
3137 以下のテキストにおいて、"f"と書いたところはccFooでハイライトされ、"bbb"と書い
3138 たところはccBarでハイライトされる。 >
3140    Foo asdfasd Bar asdf Foo asdf Bar asdf
3141    fff         bbb      fff      bbb
3143 ".\{-}"を使い、次のBarまでのスキップが最小になるようにしている。もし".*"を使う
3144 と、最初の"Foo"と最後の"Bar"がccFooBarのマッチ部分に含まれるため、"Bar"と"Foo"
3145 の間の"asdf"が"ccFoobar"グループとしてハイライトされてしまう(|pattern|を参照)。
3148 skipwhite                                               *:syn-skipwhite*
3149 skipnl                                                  *:syn-skipnl*
3150 skipempty                                               *:syn-skipempty*
3152 これら3個の引数は"nextgroup"と組み合わせたときのみ意味を持つ。これらを指定する
3153 と、次のグループがマッチする前に、以下のテキストがあってもよくなる。
3154         skipwhite       スペースとタブ文字をスキップする
3155         skipnl          行末をスキップする
3156         skipempty       空行をスキップする(自動的に"skipnl"も含むことになる)
3158 例えば"skilwhite"を指定した場合、次のどのグループもホワイトスペースにマッチし
3159 ないならば、ホワイトスペースをスキップする。
3161 "skipnl"を指定すると、nextgroupの照合が次の行からも探される。これは現在のアイ
3162 テムが行末で終わったときのみ有効である。"skipnl"を指定しない場合、nextgroupは
3163 同一行のそのアイテム以降から照合される。
3165 次のグループまでスキップされたテキストの中では他のグループの照合は無視される。
3166 次のグループの照合が見つからなかったとき、再び他のグループの照合が検索される。
3167 つまり、次のグループの照合と、ホワイトスペースと<EOL>のスキップは他のアイテム
3168 より優先される。
3170 例: >
3171   :syn match ifstart "\<if.*"     nextgroup=ifline skipwhite skipempty
3172   :syn match ifline  "[^ \t].*" nextgroup=ifline skipwhite skipempty contained
3173   :syn match ifline  "endif"    contained
3174 Note マッチ"[^ \t].*"はホワイトスペース以外の全てのテキストにマッチする。よっ
3175 て"endif"にもマッチする。そのためマッチ"endif"を最後に置き、最優先にしている。
3176 Note この例はネストした"if"には機能しないことに注意。ネストに対応するには引数
3177 "contains"を指定する必要がある(この例では簡単のため省略した)。
3179 ==============================================================================
3180 7. syntaxのパターン                          *:syn-pattern* *E401* *E402*
3182 syntaxコマンドでは、パターンの前後を同じ文字で囲まなければならない。これは
3183 ":s"コマンドと同様である。もっともよく使われるのはダブルクォートである。しかし
3184 パターンがダブルクォートを含んでいる場合は、そのパターンが含んでいない他の文字
3185 を使ったほうがよい。例: >
3186   :syntax region Comment  start="/\*"  end="\*/"
3187   :syntax region String   start=+"+    end=+"+   skip=+\\"+
3189 パターンの説明については|pattern|を参照。構文パターンは常に'magic'オプションが
3190 セットされているのと同じように解釈される(実際の'magic'オプションの値とは無関係)
3191 。また、'cpoptions'に'l' フラグが含まれていない場合と同じように解釈される。こ
3192 れは構文ファイルの可搬性を高め、'compatible'と'magic'の設定と無関係にするため
3193 である。
3195 "[a-z]*"など空文字列にマッチするパターンは避けること。これは全ての位置にマッチ
3196 するため、ハイライトがとても遅くなる。
3198                                                 *:syn-pattern-offset*
3199 パターンに文字数のオフセットを指定することができる。これによってハイライトされ
3200 る部分を変更したり、マッチやリージョンに含まれるテキスト領域(これは他のアイテ
3201 ムを照合するときにだけ関係する)を変更することができる。どちらもマッチしたパター
3202 ンに相対的である。skipパターンに対して文字数のオフセットを指定すると、endパター
3203 ンの検索が始まる位置を決めることができる。
3205 オフセットは"{what}={offset}"の形で指定する。
3206 {what}は次の7個の文字列のどれかである:
3208 ms      Match Start     マッチしたテキストの開始位置のオフセット
3209 me      Match End       マッチしたテキストの終了位置のオフセット
3210 hs      Highlight Start ハイライトが始まる位置のオフセット
3211 he      Highlight End   ハイライトが終わる位置のオフセット
3212 rs      Region Start    リージョンの本体が始まる位置のオフセット
3213 re      Region End      リージョンが終わる位置のオフセット
3214 lc      Leading Context パターンの"leading context"を過ぎた後のオフセット
3216 {offset}は次のうちのどれか:
3218 s       パターンのマッチ部分の先頭
3219 s+{nr}  パターンのマッチ部分の先頭から右へ{nr}文字目
3220 s-{nr}  パターンのマッチ部分の先頭から左へ{nr}文字目
3221 e       パターンのマッチ部分の末尾
3222 e+{nr}  パターンのマッチ部分の末尾から右へ{nr}文字目
3223 e-{nr}  パターンのマッチ部分の末尾から左へ{nr}文字目
3224 {nr}    ("lc"専用): ら左へ{nr}文字目
3226 例: "ms=s+1", "hs=e-2", "lc=3".
3228 どのパターンの後にどのオフセットを指定してもよいが、それが意味を持たない場合も
3229 ある。次の表はどのオフセットが実際に有効かを示している:
3231                     ms   me   hs   he   rs   re   lc ~
3232 match item          yes  yes  yes  yes  -    -    yes
3233 region item start   yes  -    yes  -    yes  -    yes
3234 region item skip    -    yes  -    -    -    -    yes
3235 region item end     -    yes  -    yes  -    yes  yes
3237 複数のオフセットの間に','を入れて連結することができる。例: >
3238   :syn match String  /"[^"]*"/hs=s+1,he=e-1
3240     some "string" text
3241           ^^^^^^                ここがハイライトされる
3243 注意:
3244 - パターンとオフセットの間にホワイトスペースを挟んではならない。
3245 - ハイライトされる領域がマッチしたテキストの外側にはみ出してはならない。
3246 - endパターンに対する負のオフセットは機能しない場合がある。これはハイライトが
3247   既に終わっているべきとき、endパターンは検出されない可能性があるからである。
3248 - マッチの開始位置が、パターンがマッチした位置と別の行になってはならない。つま
3249   り"a\nb"ms=eというのは正常に機能しない。ハイライトの開始位置は別の行にあって
3250   もかまわない。"a\nb"hs=eというのは正常に機能する。
3252 例(コメントにマッチするが /* と */ はハイライトしない): >
3253   :syntax region Comment start="/\*"hs=e+1 end="\*/"he=s-1
3255         /* this is a comment */
3256           ^^^^^^^^^^^^^^^^^^^     ここがハイライトされる
3258 より複雑な例: >
3259   :syn region Exa matchgroup=Foo start="foo"hs=s+2,rs=e+2 matchgroup=Bar end="bar"me=e-1,he=e-1,re=s-1
3261          abcfoostringbarabc
3262             mmmmmmmmmmm     マッチ部分
3263               sssrrreee     start/region/endとしてハイライトされる部分 ("Foo", "Exa", "Bar")
3265 Leading context                 *:syn-lc* *:syn-leading* *:syn-context*
3267 注意:これは古い機能であり、以前のバージョンとの後方互換性のためだけに残されて
3268 いる。現在はパターン中の|/\@<=|コンストラクトを使うことが推奨されている。
3270 "lc"オフセットはリーディングコンテキストを指定する。これはパターンの一部になけ
3271 ればならないが、マッチ部分の一部とは見なされないものである。"lc=n"のオフセット
3272 を使うとパターンの照合を試みる前にn桁戻るようになる。リーディングコンテキスト
3273 内に他のパターンにマッチしている文字が現れてもよい。これはマッチの前方にあって
3274 はならない「エスケープ」文字を指定する場合などに使える: >
3276   :syn match ZNoBackslash "[^\\]z"ms=s+1
3277   :syn match WNoBackslash "[^\\]w"lc=1
3278   :syn match Underline "_\+"
3280           ___zzzz ___wwww
3281           ^^^     ^^^     Underlineにマッチする
3282               ^ ^         ZNoBackslashにマッチする
3283                      ^^^^ WNoBackslashにマッチする
3285 "ms"を指定しないと自動的に"lc"と同じ値にセットされる。
3288 Multi-line patterns                                     *:syn-multi-line*
3290 パターンが"\n"を含むと改行にマッチするようになる。たいていの場合これは期待通り
3291 に動作するが、少しだけ例外がある。
3293 startパターンにオフセットをつけるとき、マッチ部分の開始位置が次の行の先頭であ
3294 ってはならない。ハイライトは次の行で始まってもよい。
3296 skipパターンも"\n"を含んでよい。ただし次の行の最初の文字がskipパターンにマッチ
3297 していても、そこからendパターンの検索が続けられる。これは、再描画は領域内のど
3298 の行でも始まることができ、skipパターンが前の行から始まったかどうかはチェックさ
3299 れないからである。例えば、skipパターンが"a\nb"で、endパターンが"b"のとき、次の
3300 テキストの2行目でendパターンがマッチする。 >
3301          x x a
3302          b x x
3303 つまり、skipパターンは"\n"以降の文字にはマッチしないことになる。
3306 外部マッチ                                   *:syn-ext-match*
3308 リージョンのパターンでは特別に以下の正規表現が使える:
3310                                                 */\z(* */\z(\)* *E50* *E52*
3311     \z(\)       一部を「external」としてマークする。これをつけると他のパターン
3312                 からアクセスできるようになる。現在はリージョンのstartパターン
3313                 内でのみ使用可能。
3315                                         */\z1* */\z2* */\z3* */\z4* */\z5*
3316     \z1  ...  \z9                       */\z6* */\z7* */\z8* */\z9* *E66* *E67*
3317                 startパターンにマッチしたテキスト中からマークしておいた部分を
3318                 参照する。
3320 リージョンのstartとendパターンで正規表現の一部を共有したい場合がある。
3321 一般的な例としてはPerlやUnixシェルのヒアドキュメントがある。これは特別な正規表
3322 現アイテム"\z"を使えば達成できる。これは正規表現の一部を"external"としてマーク
3323 しておく。するとその部分を他のパターンから参照できるようになる。例えば、ヒアド
3324 キュメントは次のようにすればよい: >
3325   :syn region hereDoc start="<<\z(\I\i*\)" end="^\z1$"
3327 このように、\zは2つの役割を果たす。startパターンにおいては正規表現の一部
3328 "\(\I\i*\)"をexternalとしてマークする。endパターンでは\1によってstartパターン
3329 中の最初のマークされた部分への外部参照とする。外部参照はskipパターン中でも使え
3330 る: >
3331   :syn region foo start="start \(\I\i*\)" skip="not end \z1" end="end \z1"
3333 通常のマークとexternalなマークはまったく独立であり、別々に番号が振られる。例え
3334 ば、文字列"aabb"に対してパターン"\z(..\)\(..\)"を適用すると、\1は"bb"を参照し
3335 、\z1は"aa"を参照するようになる。externalなマークをした部分は、通常のマークと
3336 違って、同一パターン内で後方参照することはできない。ある部分に対して通常のマー
3337 ク、externalなマーク両方をつけたい場合は、"\(\z(...\)\)"のようにネストさせれば
3338 よい。
3340 一行内でマッチした部分しか参照できないことに注意。複数行にわたってマッチした部
3341 分は参照できない。
3343 ==============================================================================
3344 8. クラスタ                                         *:syn-cluster* *E400*
3346 :sy[ntax] cluster {cluster-name} [contains={group-name}..]
3347                                  [add={group-name}..]
3348                                  [remove={group-name}..]
3350 このコマンドを使うと、複数の構文グループを1つの名前のもとにまとめることができ
3351 る。このまとまりのことをクラスタと呼ぶ。
3353         contains={group-name}..
3354                 クラスタに含まれるグループを指定する。
3355         add={group-name}..
3356                 指定したグループをクラスタに加える。
3357         remove={group-name}..
3358                 指定したグループをクラスタからとり除く。
3360 定義したクラスタはcontains=..やnextgroup=..、add=..、remove=..などの文脈で使う
3361 ことができる。そのとき、クラスタ名の頭に"@"をつける。クラスタを定義する前にそ
3362 のクラスタ名を使用してもよい。
3364 例: >
3365    :syntax match Thing "# [^#]\+ #" contains=@ThingMembers
3366    :syntax cluster ThingMembers contains=ThingMember1,ThingMember2
3368 この例からわかるように、クラスタに対する変更はさかのぼって効果がある。クラスタ
3369 の定義は直前になってチェックされる。例: >
3370    :syntax keyword A aaa
3371    :syntax keyword B bbb
3372    :syntax cluster AandB contains=A
3373    :syntax match Stuff "( aaa bbb )" contains=@AandB
3374    :syntax cluster AandB add=B    " これによって2つのキーワードがStuff内でマ
3375                                     ッチするようになる
3377 これはクラスタのネスト度にも関係がある: >
3378    :syntax keyword A aaa
3379    :syntax keyword B bbb
3380    :syntax cluster SmallGroup contains=B
3381    :syntax cluster BigGroup contains=A,@SmallGroup
3382    :syntax match Stuff "( aaa bbb )" contains=@BigGroup
3383    :syntax cluster BigGroup remove=B    " BはBigGroup内にないので無意味
3384    :syntax cluster SmallGroup remove=B  " Stuff内でbbbがマッチしなくなる
3386 ==============================================================================
3387 9. 構文ファイルのインクルード                        *:syn-include* *E397*
3389 構文ファイルの中で、関係する構文ファイルをインクルードしたい場合がある。
3390 これには、構文ファイルの関係に応じて2種類の方法がある:
3392         - インクルードされるファイル内のトップレベルのアイテムをそのままトップ
3393           レベルとしたい場合は、単に|:runtime|コマンドを使えばよい: >
3395   " In cpp.vim:
3396   :runtime! syntax/c.vim
3397   :unlet b:current_syntax
3399 <       - インクルードされるファイル内のトップレベルのアイテムをリージョンに内
3400           包させるには、":syntax include"コマンドを使うとよい: >
3402 :sy[ntax] include [@{grouplist-name}] {file-name}
3404           インクルードされるファイル中で宣言された構文アイテム全てに
3405           "contained"フラグがつけられる。さらにグループのリストを指定すると、
3406           インクルードされるファイル中のトップレベルの構文アイテム全てに対して
3407           そのリストがつけられる。 >
3409    " In perl.vim:
3410    :syntax include @Pod <sfile>:p:h/pod.vim
3411    :syntax region perlPOD start="^=head" end="^=cut" contains=@Pod
3413           {file-name}が絶対パスである場合("/", "c:", "$VAR", "<sfile>"のどれか
3414           で始まる場合)そのファイルが読み込まれる(sourceされる)。相対パスの場
3415           合(例:"syntax/pod.vim")、そのファイルが'runtimepath'中から探される。
3416           マッチしたファイル全てが読み込まれる。相対パスを使用することが推奨さ
3417           れる。そうすればユーザが":syn include"を書き換えることなく、インクル
3418           ードされるファイルを改変して別の場所におけるからである。
3420 ==============================================================================
3421 10. 表示のシンクロナイズ                  *:syn-sync* *E403* *E404*
3423 ドキュメント中のどの位置からでも再描画を開始できると望ましい。これを実現するに
3424 は、再描画を開始する位置における構文の状態を知る必要がある。
3426 :sy[ntax] sync [ccomment [group-name] | minlines={N} | ...]
3428 シンクロナイズには4つのやり方がある:
3429 1. 常にファイルの最初からパースする。
3430    |:syn-sync-first|
3431 2. Cスタイルのコメントに基づく。VimはCコメントの仕様を理解し、現在行がコメント
3432    の内側から始まっているか外側から始まっているかを判定することができる。
3433    |:syn-sync-second|
3434 3. 一定行さかのぼり、そこからパースを開始する。
3435    |:syn-sync-third|
3436 4. テキストをさかのぼり、シンクロナイズを始める目印の正規表現を検索する。
3437    |:syn-sync-fourth|
3439                                 *:syn-sync-maxlines* *:syn-sync-minlines*
3440 最後の3つの方法に関して、さかのぼる行数は"minlines"と"maxlines"で制限される。
3442 引数"minlines={N}"が指定されると、常に少なくともその行数さかのぼってパースが開
3443 始される。パースする行数が少なすぎて正しくハイライトできないかもしれないとき、
3444 またはシンクロナイズを使うのが不可能であるとき、この引数を使うとよい。
3446 引数"maxlines={N}"が指定されると、コメントや正規表現を検索するためにさかのぼる
3447 行数が最大N行になる。これは遅いマシンを使っていて、シンクロナイズする行数が少
3448 ないとわかっているときに便利である。例: >
3449    :syntax sync ccomment maxlines=500
3451                                                 *:syn-sync-linebreaks*
3452 複数行にマッチする正規表現を使っているとき、ある行に変更を施すと、前の行でマッ
3453 チしていた正規表現がマッチしなくなってしまうことがある。この場合、変更を施した
3454 位置より上からシンクロナイズを行わなければならない。その行数を引数"linebreaks"
3455 で指定する。例えば、正規表現が改行を1個含んでいる場合はこのようにする: >
3456    :syntax sync linebreaks=1
3457 こうすると、常に変更が施された行の少なくとも1行前から再描画が開始される。
3458 "linebreaks"のデフォルト値は0。通常"minlines"の値は"linebreaks"の値より大きい。
3460 第一の方法:                                  *:syn-sync-first*
3462    :syntax sync fromstart
3464 ファイルの最初からパースする。この方法を使うと構文ハイライトが正確になるが、大
3465 きいファイルに対しては遅くなる。Vimは以前にパースしたテキストをキャッシュして
3466 おく。そのため、遅くなるのはファイルを最初にパースするときだけである。しかし、
3467 変更を施すと、それ以降の一部をパースし直さなければならなくなる(最悪の場合はファ
3468 イルの最後まで)。
3470 "fromstart"を使うことは"minlines"を非常に大きな値にすることと同じ効果を持つ。
3473 第二の方法:                                  *:syn-sync-second* *:syn-sync-ccomment*
3475 第二の方法を使うには、単に引数"ccomment"をつければよい。
3476 例: >
3477    :syntax sync ccomment
3479 画面最上行がCスタイルコメントの内側にあると判断される場合、グループ名が
3480 "Comment"のリージョン構文アイテムが使われる。この方法を使うには"Comment"という
3481 グループ名のリージョンがなければならないことに注意。他のグループ名を指定するこ
3482 ともできる。例: >
3483    :syntax sync ccomment javaComment
3484 こうすると、検出されたCコメントのリージョンに対して"syn region javaComment"で
3485 指定されたアイテムのうち最後のものが使われる。ここで指定するリージョンのstart
3486 パターンが"\/*"、endパターンが"*\/"となっていないと適切に機能しない。
3488 引数"maxlines"を使うと検索の行数を制限できる。引数"minlines"を使うと少なくとも
3489 その行数だけさかのぼって開始させることができる(例:2,3行だけを受け取るコンスト
3490 ラクトがある場合。ただしその場合シンクロナイズするのが困難)
3492 注意: "*/"を含む文字列で行をまたぐものがあると、Cコメントによるシンクロナイズ
3493 は適切に機能しない。行をまたいで文字列を書くのは悪いプログラミング習慣である
3494 (多くのコンパイラが警告を出す)。また、コメント中に"*/"が現れる機会はまれなので
3495 、この制限は注意するほどのものではない。
3498 第三の方法:                                          *:syn-sync-third*
3500 第三の方法を使うには引数"minlines={N}"を加えればよい。この方法を指定すると、
3501 {N}行前からパースを開始する。これは{N}行余分にパースされることを意味する。その
3502 ためこの方法は少し遅くなる。
3503 例: >
3504    :syntax sync minlines=50
3506 "lines"は"minlines"と同じ意味である(古いバージョンで使われている)。
3508 第四の方法:                                  *:syn-sync-fourth*
3510 第四の方法は、シンクロナイズパターンと呼ばれる特定のリージョンの末尾でシンクロ
3511 ナイズするものである。行をまたげるのはリージョンだけなので、リージョンの末尾に
3512 出会ったら、どの構文アイテムの中にいるのかを知ることができる。再描画が始まる行
3513 のすぐ上から検索を開始し、ファイルの上方に向かって検索する。
3515 これはシンクロナイズしない構文アイテムとちょうど同じように機能する。内包された
3516 マッチ、nextgroupなどを使うことができる。ただし少しだけ違いがある。
3517 - キーワードを使うことはできない。
3518 - "sync"キーワード付きの構文アイテムは、完全に別の構文アイテムのグループを形成
3519   する。シンクロナイズするグループとしないグループを混ぜることはできない。
3520 - 照合はバッファ内で1行ごとに逆向きに行われる(前向きではない)。
3521 - 行継続パターンをつけることができる。これを使うと、あたかも1行であるかのよう
3522   に検索する一連の行を指定することができる。これは、指定したアイテムとの照合が
3523   継続パターンを含む一連の行の最初から始まることを意味する。
3524 - "nextgroup"や"contains"は1行(または継続された一連の行)内でだけ有効。
3525 - リージョンは同一行(または継続された一連の行)内で開始・終了しなければならない
3526   。そうでないと行末(または継続された一連の行)内で終わるものとされる。
3527 - シンクロナイズパターンとのマッチが見つかると、その行(または継続された一連の
3528   行)の残りから再びマッチが探される。最後のマッチが使われる。
3529   これはリージョンの開始と終了が同一行内にあるとき使われる
3530   (例: /* this */のようなCコメントでは、最後の"*/"が使われる)。
3532 シンクロナイズパターンとのマッチは2通りの使い方がある。
3533 1. 再描画を始める場所(シンクロナイズパターンの検索が始まる場所でもある)から強
3534    調のためのパースを始める。そこで有効であると期待される構文グループを指定し
3535    なければならない。行をまたぐリージョンが他のリージョンを含んではならない場
3536    合にこれはうまく機能する。
3537 2. ハイライトのためのパースはマッチの直後から継続される。マッチの直後に現れる
3538    と期待される構文グループを指定しなければならない。
3539    これは前の方法がうまくいかないときに使われる。より多くのテキストをパースす
3540    る必要があるため、とても遅い。
3541 両方のタイプを同時に使うこともできる。
3543 シンクロナイズパターンだけでなく、他のマッチとリージョンを指定して望まないマッ
3544 チが見つかるのを避けることができる。
3546 [シンクロナイズパターンが別々に与えられる理由は、シンクロナイズポイントの検索
3547 はたいていの場合、ハイライトするところを判別するよりずっと単純だからである。パ
3548 ターンの数が減るとそれだけ速くなる。]
3550                                             *syn-sync-grouphere* *E393* *E394*
3551     :syntax sync match {sync-group-name} grouphere {group-name} "pattern" ..
3553         シンクロナイズ用に使うマッチを定義する。{group-name}はマッチのすぐ後に
3554         続く構文グループの名前である。ハイライトのためのテキストのパースはマッ
3555         チの直後から始まる。この{group-name}がついたリージョンが存在しなければ
3556         ならない。最初に定義されたリージョンが使われる。マッチの後に構文グルー
3557         プが続かない場合は"NONE"を使う。
3559                                                 *syn-sync-groupthere*
3560     :syntax sync match {sync-group-name} groupthere {group-name} "pattern" ..
3562         "grouphere"と同様。ただし{group-name}はシンクロナイズポイントの検索が
3563         始まる行の行頭で使われる構文グループの名前である。マッチとシンクロナイ
3564         ズパターンの検索が始まる位置との間のテキストは構文ハイライトを変えては
3565         ならない。例えばCにおいて"/*"と"*/"を後方検索することができる。"/*"が
3566         先に見つかったら、今はコメントの内側にいるとわかる。なので"groupthere"
3567         は"cComment"となる。"*/"が先に見つかったら今はコメントの中ではないとわ
3568         かる。なので"groupthere"は"NONE"となる。(実際は、文字列の中に"/*"と
3569         "*/"があるかもしれないので、もう少し込み入っている。これは読者の練習問
3570         題としておく...)。
3572     :syntax sync match ..
3573     :syntax sync region ..
3575         引数"groupthere"なしの場合。シンクロナイズポイントの検索の際にスキップ
3576         されるリージョンやマッチを定義する。
3578                                                 *syn-sync-linecont*
3579     :syntax sync linecont {pattern}
3581         {pattern}とのマッチが次の行にも継続されるとみなされる。つまりシンクロ
3582         ナイズポイントの検索の際、行は連結されているものと見なされる。
3584 引数"maxlines={N}"が同時に与えられると、マッチを検索する行がN行に制限される。
3585 これは遅いマシンを使っていて、シンクロナイズするものが少ないとわかっているとき
3586 に便利。例: >
3587    :syntax sync maxlines=100
3589 全てのシンクロナイズの設定をクリアするには: >
3590    :syntax sync clear
3592 あるシンクロナイズパターンをクリアするには: >
3593    :syntax sync clear {sync-group-name} ..
3595 ==============================================================================
3596 11. 構文アイテムのリストを表示する     *:syntax* *:sy* *:syn* *:syn-list*
3598 次のコマンドは全ての構文アイテムのリストを表示する: >
3600     :sy[ntax] [list]
3602 ある構文グループに属する構文アイテムを表示するには: >
3604     :sy[ntax] list {group-name}
3606 あるクラスタに属する構文グループを表示するには:                        *E392*
3608     :sy[ntax] list @{cluster-name}
3610 ":syntax"コマンドに対する他の引数については上を参照。
3612 ":syntax"コマンドは":sy"とも略記できる。しかし":syn"の方が見栄えがよいため、普
3613 通はこちらが使われる。
3615 ==============================================================================
3616 12. ハイライトコマンド                   *:highlight* *:hi* *E28* *E411* *E415*
3618 ハイライトグループには3つのタイプがある:
3619 - 特定の構文言語用のもの。名前がその言語の名前で始まる。このタイプのほとんど
3620   は属性を持たず、2番目のタイプのグループにリンクされる。
3621 - 全ての構文言語に対して使われるもの。
3622 - 'highlight'オプションに使われるもの。
3623                                                         *hitest.vim*
3624 現在有効な全てのグループを知るにはこのコマンドを使う: >
3625     :so $VIMRUNTIME/syntax/hitest.vim
3626 このコマンドは新しいウィンドウを開き、そこに全てのハイライトグループ名を、それ
3627 自身の色を使って表示する。
3629                                                 *:colo* *:colorscheme* *E185*
3630 :colo[rscheme] {name}   カラースキーム{name}を読み込む。これは'runtimepath'中
3631                         から"colors/{name}.vim"というファイルを検索する。最初
3632                         に見つかったものが読み込まれる。
3633                         現在使われているカラースキームの名前を見るには: >
3634                                 :echo g:colors_name
3635 <                       再帰的な読み込みはされない。つまりカラースキームスクリ
3636                         プト中で":colorscheme"を使うことはできない。
3637                         カラースキームが読み込まれた後、自動コマンドイベント
3638                         |ColorScheme|が発生する。カラースキームファイルを書く
3639                         ための情報については次を参照: >
3640                                 :edit $VIMRUNTIME/colors/README.txt
3642 :hi[ghlight]            属性がセットされたハイライトグループを全て表示する。
3644 :hi[ghlight] {group-name}
3645                         1つのハイライトグループを表示する。
3647 :hi[ghlight] clear      全てのハイライトをデフォルトに戻す。ユーザによって加え
3648                         られたグループに対するハイライトが全て消去される。
3649                         現在の'background'の値によってデフォルトの色が決まる。
3651 :hi[ghlight] clear {group-name}
3652 :hi[ghlight] {group-name} NONE
3653                         1つのハイライトグループに対するハイライトを無効にする。
3654                         デフォルトの色に戻すわけではない。
3656 :hi[ghlight] [default] {group-name} {key}={arg} ..
3657                         ハイライトグループを追加する、または既存のグループに対
3658                         する強調を変更する。
3659                         引数{key}={arg}については|highlight-args|を参照。
3660                         オプショナルな引数[default]については
3661                         |:highlight-default|を参照。
3663 通常、ハイライトグループは起動時に一度だけ追加される。そこでハイライトのデフォ
3664 ルト値をセットする。その後、ハイライトコマンドを使うことによってデフォルトでな
3665 い値に変えることができる。値"NONE"を使うとその値をオフにしたりデフォルト値に戻
3666 したりできる。
3668 色を変える簡単な方法は|:colorscheme|コマンドを使うことである。すると、次のよう
3669 な":highlight"コマンドが書かれたファイルが読み込まれる: >
3671    :hi Comment  gui=bold
3673 このファイルに含まれない設定は変更されないままである。指定されたフィールドだけ
3674 が更新され、それ以前の設定とマージされる。なのでその結果は次のコマンド1つを実
3675 行するのと同じである: >
3676    :hi Comment  term=bold ctermfg=Cyan guifg=#80a0ff gui=bold
3678                                                         *:highlight-verbose*
3679 'verbose'を0でない値にしてハイライトグループの一覧を表示すると、最後に設定され
3680 た場所も表示される。例: >
3681         :verbose hi Comment
3682 <       Comment        xxx term=bold ctermfg=4 guifg=Blue ~
3683            Last set from /home/mool/vim/vim7/runtime/syntax/syncolor.vim ~
3685 ":hi clear"が実行されると、このコマンドを実行したスクリプトがデフォルト値とし
3686 て言及される。より詳しくは|:verbose-cmd|を参照。
3688                                         *highlight-args* *E416* *E417* *E423*
3689 ハイライトに関して、ターミナルは3種類に分類される:
3690 term    通常のターミナル(vt100, xterm)
3691 cterm   カラーターミナル(MS-DOS console, color-xterm。これらはtermcapエントリ
3692         "Co"をもつ)
3693 gui     GUI
3695 ハイライトはこれらのタイプごとに指定できる。そうすることによって、同じ構文ファ
3696 イルを全てのターミナルに対して使用でき、ターミナルごとに最善のハイライトを利用
3697 できるようになっている。
3699 1. highlightコマンドの引数(通常のターミナル用)
3701                                         *bold* *underline* *undercurl*
3702                                         *inverse* *italic* *standout*
3703 term={attr-list}                        *attr-list* *highlight-term* *E418*
3704         attr-listはカンマ区切りのリスト(スペースは入れない)で、要素は以下の通
3705         り(順序はどうでもよい):
3706                 bold
3707                 underline
3708                 undercurl       必ずしも使用できるとは限らない
3709                 reverse
3710                 inverse         reverseと同じ
3711                 italic
3712                 standout
3713                 NONE            属性を使用しない(属性をリセットするために使う)
3715         この引数で"bold"を指定してもよいし、太文字のフォントを指定してもよい。
3716         どちらも表示は同じになる。
3717         "undercurl"は波線のこと。"undercurl"が使用できないときは"underline"が
3718         使われる。一般的には"undercurl"はGUIでのみ使用できる。その色は
3719         |highlight-guisp|で設定できる。
3721 start={term-list}                               *highlight-start* *E422*
3722 stop={term-list}                                *term-list* *highlight-stop*
3723         これらのターミナルコードのリストを使ってターミナルについての標準的でな
3724         い属性を得ることができる。
3726         引数"start"でエスケープシーケンスを指定すると、ハイライトするテキスト
3727         の前にそれが書き込まれる。そのテキストをハイライトする際にターミナルに
3728         送りたいものをなんでも指定できる。引数"stop"でエスケープシーケンスを指
3729         定すると、強調されるテキストの後にそれが書き込まれる。"start"で行った
3730         ことを"stop"で元に戻すべきである。そうしないとスクリーンがごちゃごちゃ
3731         になってしまうだろう。
3733         {term-list}は2つの形を持つ:
3735         1. エスケープシーケンス付きの文字列。
3736            これは"t_"で始まるものと空文字列を除く任意の文字列である。"<Esc>"や
3737            "<Space>"のような<>記法が利用できる。例:
3738                 start=<Esc>[27h;<Esc>[<Space>r;
3740         2. ターミナルコードのリスト。
3741            ターミナルコードは"t_xx"の形を持つ。"xx"はtermcapエントリ名である。
3742            ターミナルコードはカンマで区切る。ホワイトスペースは使えない。例:
3743                 start=t_C1,t_BL
3744            対応するターミナルコードが存在しなければならない。
3746 2. highlightコマンドの引数(カラーターミナル用)
3748 cterm={attr-list}                                       *highlight-cterm*
3749         {attr-list}の説明は上を参照|attr-list|。
3750         色を使う場合、引数"cterm"は"term"と異なる結果になる。例えば、通常のタ
3751         ーミナルではコメントにアンダーラインを引き、カラーターミナルではコメン
3752         トを青色で表示することができる。
3753         注意:DOSコンソールなど多くのターミナルでは色づけの際にこれらの属性を混
3754         在させることはできない。"cterm="か"ctermfg="が"ctermbg="のどれか1つだ
3755         けを使うこと。
3757 ctermfg={color-nr}                              *highlight-ctermfg* *E421*
3758 ctermbg={color-nr}                              *highlight-ctermbg*
3759         引数{color-nr}で色番号を指定する。色番号の範囲は0からtermcapエントリ
3760         "Co"の値 - 1 までである。
3761         この色番号で実際に表示される色はターミナルの種類とその設定に依存する。
3762         "cterm"の設定によって色が変わる場合もある。例えば、あるシステムでは
3763         "cterm=bold ctermfg=3"でそのまま3番の色を表示し、他のシステムでは異な
3764         る色を表示することがある。
3766         xtermにおいてはこれはユーザのリソースに依存し、やや予測ができない。デ
3767         フォルトについてはxtermのドキュメントを参照のこと。カラーxterm用の色は
3768         .Xdefaultsファイルで変更することができる。このため、ユーザごとに表示さ
3769         れる色が異なるかもしれない。カラーxtermについては|xterm-color|を参照。
3771         コンソールウィンドウ内のMSDOS標準色は固定されている。そのため、これら
3772         の色を名前に使っている。一方、X11の色名の意味は固定されている。そこで
3773         ハイライトの設定に可搬性を持たせるため、X11の色設定が使われている(複雑
3774         であるが)。以下の色名を、色番号の代わりに使うことができる:
3776                                                         *cterm-colors*
3777             NR-16   NR-8    COLOR NAME ~
3778             0       0       Black
3779             1       4       DarkBlue
3780             2       2       DarkGreen
3781             3       6       DarkCyan
3782             4       1       DarkRed
3783             5       5       DarkMagenta
3784             6       3       Brown, DarkYellow
3785             7       7       LightGray, LightGrey, Gray, Grey
3786             8       0*      DarkGray, DarkGrey
3787             9       4*      Blue, LightBlue
3788             10      2*      Green, LightGreen
3789             11      6*      Cyan, LightCyan
3790             12      1*      Red, LightRed
3791             13      5*      Magenta, LightMagenta
3792             14      3*      Yellow, LightYellow
3793             15      7*      White
3795             "NR-16"の下の番号は16色ターミナル('t_Co'が16以上のもの)用である。
3796             "NR-8"の下の番号は8色ターミナル('t_Co'が16未満のもの)用である。
3797             '*'はctermfgにbold属性がセットされることを意味している。"linux"な
3798             ど多くの8色ターミナルでは明るい色になる。ただし背景色には適用され
3799             ない。'*'がないものはbold属性なしになる。他の方法でbold属性をつけ
3800             たいなら引数"cterm="を"ctermfg="や"ctermbg="の後に書くこと。または
3801             色名の代わりに番号を使うこと。
3803             色名の大文字・小文字は無視される。
3804             16色ansiスタイルターミナル(xtermを含む)ではNR-8の列の番号が使われ
3805             ることに注意。ここで'*'は'add 8'という意味になる。つまりBlueが12
3806             に、DarkGrayが8になる。
3808             カラーターミナルによっては、色名を使うと間違った色で表示される場合
3809             もあることに注意。
3811                                                         *:hi-normal-cterm*
3812         Normalグループに対して"ctermfg"や"ctermbg"を設定すると、これらはハイラ
3813         イトされないテキストに対する色になる。
3814         例: >
3815                 :highlight Normal ctermfg=grey ctermbg=darkblue
3816 <       Normalグループに対して"ctermbg"を設定すると、オプション'background'が
3817         自動的に調整される。これによって'background'に依存するハイライトグルー
3818         プが変更される。そのため、まずNormalに対する色を設定し、それから他の色
3819         を設定するべきである。
3820         カラースキーム使用時に'background'を変更するとカラースキームが再読み込
3821         みされる。そしてNormalを含む全ての色がリセットされる。これが嫌なら最初
3822         に変数"colors_name"を削除すること。
3824         Normalグループの"ctermfg"や"ctermbg"を変更した場合、Vim終了時にその色
3825         をリセットする必要がある。これはtermcapエントリ"op"|t_op|を使ってなさ
3826         れる。リセットがうまくいかない場合は.vimrc中で't_op'を設定してみること。
3827                                                         *E419* *E420*
3828         Vimが通常の文字色と背景色を知っている場合、色名として"fg"と"bg"を使用
3829         できる。これはNormalグループの色とMS-DOSコンソールの色を設定しないと使
3830         えない。例えば反転表示をするには: >
3831             :highlight Visual ctermfg=bg ctermbg=fg
3832 <       このコマンドを実行した時点で有効な色が使われることに注意。この後で
3833         Normalグループを変更しても"fg"と"bg"は調整されない。
3836 3. highlightコマンドの引数(GUI用)
3838 gui={attr-list}                                         *highlight-gui*
3839         これらはGUIモードで使われる属性を設定する。
3840         説明は|attr-list|を参照。
3841         ここで"bold"を設定しても太字のフォントを使ってもよい。どちらも同じ効果
3842         を持つ。
3843         "Normal"グループに対する属性は無視される。
3845 font={font-name}                                        *highlight-font*
3846         font-nameはVimを実行しているシステム上で使われるフォント名である。X11
3847         ではこれは複雑な名前になる。例えば: >
3848    font=-misc-fixed-bold-r-normal--14-130-75-75-c-70-iso8859-1
3850         フォント名"NONE"を使うとデフォルトのフォントに戻る。
3851         "Normal"グループに対してフォントを設定すると、これがデフォルトフォント
3852         になる(オプション'guifont'が変更されるまでは; 最後に設定したものが使わ
3853         れる)。
3854         以下のものはMotifとAthena上でのみ動作し、他のGUI上では利用できない:
3855         "Menu"グループに対してフォントを設定すると、メニューが変更される。
3856         "Tooltip"グループに対してフォントを設定するt、ツールチップが変更され
3857         る。
3858         Menu用とTooltip用を除く全てのフォントのサイズがデフォルトフォントのサ
3859         イズと同じでなければならない。そうでないと再描画の際に問題が発生する。
3861 guifg={color-name}                                      *highlight-guifg*
3862 guibg={color-name}                                      *highlight-guibg*
3863 guisp={color-name}                                      *highlight-guisp*
3864         guifgは文字色、guibgは背景色、guispは波線の色を指定する。これらはGUIで
3865         使用される。
3866         いくつか特別な名前がある:
3867                 NONE            no color (透明)
3868                 bg              通常の背景色を使う
3869                 background      通常の背景色を使う
3870                 fg              通常の文字色を使う
3871                 foreground      通常の文字色を使う
3872         埋め込みスペースや他の特別な文字に対して色名を使うには、色名をシングル
3873         クォートでくくる。それゆえシングルクォートを使うことはできない。
3874         例: >
3875             :hi comment guifg='salmon pink'
3877                                                         *gui-colors*
3878         推奨されている色名 (これらはほとんどのシステムで利用可能である)
3879             Red         LightRed        DarkRed
3880             Green       LightGreen      DarkGreen       SeaGreen
3881             Blue        LightBlue       DarkBlue        SlateBlue
3882             Cyan        LightCyan       DarkCyan
3883             Magenta     LightMagenta    DarkMagenta
3884             Yellow      LightYellow     Brown           DarkYellow
3885             Gray        LightGray       DarkGray
3886             Black       White
3887             Orange      Purple          Violet
3889         Win32 GUIバージョンでは他にもシステムカラーが利用できる。
3890         |win32-colors|を参照。
3892         RGB値によって色を指定することもできる。
3893         フォーマットは"#rrggbb"、ここで
3894                 "rr"    Red値
3895                 "gg"    Green値
3896                 "bb"    Blue値
3897         これらの値は16進であり、範囲は"00"から"ff"。例: >
3898   :highlight Comment guifg=#11f0c3 guibg=#ff00ff
3900                                         *highlight-groups* *highlight-default*
3901 以下はデフォルトのハイライトグループである。これらのグループはデフォルトでオプ
3902 ション'highlight'によって使われる。ただしハイライトは'background'の値に依存す
3903 ることに注意。":highlight"コマンドで現在の設定を知ることができる。
3904                                                         *hl-Cursor*
3905 Cursor          カーソル下の文字
3906                                                         *hl-CursorIM*
3907 CursorIM        Cursorと同じだが、IMEモードにいるとき使われる|CursorIM|。
3908                                                         *hl-CursorColumn*
3909 CursorColumn    'cursorcolumn'がオンになっているときのカーソルがある画面上の桁
3910                                                         *hl-CursorLine*
3911 CursorLine      'cursorline'がオンになっているときのカーソルがある画面上の行
3912                                                         *hl-Directory*
3913 Directory       ディレクトリ名(とリストにある特別な名前)
3914                                                         *hl-DiffAdd*
3915 DiffAdd         diffモード: 追加された行 |diff.txt|
3916                                                         *hl-DiffChange*
3917 DiffChange      diff モード: 変更された行 |diff.txt|
3918                                                         *hl-DiffDelete*
3919 DiffDelete      diff モード: 削除された行 |diff.txt|
3920                                                         *hl-DiffText*
3921 DiffText        diff モード: 変更された行中の変更されたテキスト |diff.txt|
3922                                                         *hl-ErrorMsg*
3923 ErrorMsg        コマンドラインに現れるエラーメッセージ
3924                                                         *hl-VertSplit*
3925 VertSplit       垂直分割したウィンドウの区切りとなる桁
3926                                                         *hl-Folded*
3927 Folded          閉じた折り畳みの行
3928                                                         *hl-FoldColumn*
3929 FoldColumn      'foldcolumn'
3930                                                         *hl-SignColumn*
3931 SignColumn      目印|signs|が表示される行。
3932                                                         *hl-IncSearch*
3933 IncSearch       'incsearch'のハイライト; ":s///c"で置換されたテキストにも使わ
3934                 れる。
3935                                                         *hl-LineNr*
3936 LineNr          ":number"と":#"コマンドの行番号。オプション'number'がセットさ
3937                 れているときはそれにも使われる。
3938                                                         *hl-MatchParen*
3939 MatchParen      カーソル下の文字、または直後の文字が括弧であるとき、その文字と
3940                 対応する括弧に使われる。|pi_paren.txt|
3942                                                         *hl-ModeMsg*
3943 ModeMsg         'showmode'のメッセージ (例. "-- INSERT --")
3944                                                         *hl-MoreMsg*
3945 MoreMsg         |more-prompt|
3946                                                         *hl-NonText*
3947 NonText         ウィンドウの端の'~'と'@'、'showbreak'で設定された文字など、実
3948                 際のテキストには存在しない文字(例. 全角文字が行末に収まらない
3949                 とき">"が表示される)。
3950                                                         *hl-Normal*
3951 Normal          通常のテキスト
3952                                                         *hl-Pmenu*
3953 Pmenu           ポップアップメニュー: 通常の項目。
3954                                                         *hl-PmenuSel*
3955 PmenuSel        ポップアップメニュー: 選択されている項目。
3956                                                         *hl-PmenuSbar*
3957 PmenuSbar       ポップアップメニュー: スクロールバー。
3958                                                         *hl-PmenuThumb*
3959 PmenuThumb      ポップアップメニュー: スクロールバーのつまみ部分。
3960                                                         *hl-Question*
3961 Question        ヒットエンタープロンプト|hit-enter|とyes/noクエスチョン
3962                                                         *hl-Search*
3963 Search          最後に検索した語のハイライト('hlsearch')を参照。
3964                 quickfixウィンドウ内の現在行のハイライトや、それに類するものに
3965                 使われる。
3966                                                         *hl-SpecialKey*
3967 SpecialKey      ":map"でリストされるメタキーと特別なキー。テキスト中の
3968                 unprintableな文字を表示するのにも使われる。
3969                 一般に: 実際とは異なる文字で表示されるテキスト
3970                                                         *hl-SpellBad*
3971 SpellBad        スペルチェッカに認識されない単語。|spell|
3972                 これは他のハイライトと同時に組み合わせられる。
3973                                                         *hl-SpellCap*
3974 SpellCap        大文字で始まるべき単語。 |spell|
3975                 これは他のハイライトと同時に組み合わせられる。
3976                                                         *hl-SpellLocal*
3977 SpellLocal      スペルチェッカによって他の地域で使われると判断される単語。
3978                 |spell|これは他のハイライトと同時に組み合わせられる。
3979                                                         *hl-SpellRare*
3980 SpellRare       スペルチェッカによってまず使わないと判断される単語。|spell|
3981                 これは他のハイライトと同時に組み合わせられる。
3982                                                         *hl-StatusLine*
3983 StatusLine      カレントウィンドウのステータスライン
3984                                                         *hl-StatusLineNC*
3985 StatusLineNC    非カレントウィンドウのステータスライン。
3986                 Note: これが"StatusLine"に等しい場合、カレントウィンドウのステー
3987                 タスラインに"^^^"が使われる。
3988                                                         *hl-TabLine*
3989 TabLine         タブページの行の、アクティブでないタブページのラベル
3990                                                         *hl-TabLineFill*
3991 TabLineFill     タブページの行の、ラベルがない部分
3992                                                         *hl-TabLineSel*
3993 TabLineSel      タブページの行の、アクティブなタブページのラベル
3994                                                         *hl-Title*
3995 Title           ":set all"、":autocmd"などによる出力のタイトル。
3996                                                         *hl-Visual*
3997 Visual          ビジュアルモード選択
3998                                                         *hl-VisualNOS*
3999 VisualNOS       vimが"Not Owning the Selection"のときのビジュアルモード選択。
4000                 これをサポートしているのはX11GUI|gui-x11|と|xterm-clipboard|の
4001                 み。
4002                                                         *hl-WarningMsg*
4003 WarningMsg      警告メッセージ
4004                                                         *hl-WildMenu*
4005 WildMenu        'wildmenu'補完における現在の候補
4007                                         *hl-User1* *hl-User1..9* *hl-User9*
4008 'statusline'構文によってステータスラインとルーラー('rulerformat'によって)中で9
4009 個のハイライトが使えるようになっている。その名前はUser1からUser9である。
4011 GUI使用時には、これらのグループを使ってメニューやスクロールバー、ツールチップ
4012 の色を設定することができる。これらにデフォルト値はない。これはWin32では利用で
4013 きない。ここではhighlightの引数のうちfont, guibg, guifgの3つだけが効果を持つ。
4015                                                         *hl-Menu*
4016 Menu            メニューのフォント、文字、背景。ツールバーにも使われる。
4017                 使用可能なhighlightの引数: font, guibg, guifg.
4019                 NOTE: MotifとAthenaでは'guifontset'が空かどうかに関わらず、常
4020                 に引数fontで実際のフォントセットを指定する。そしてそれが現在の
4021                 |:language|に結び付けられる。
4023                                                         *hl-Scrollbar*
4024 Scrollbar       メインウィンドウのスクロールバーの文字と背景。
4025                 使用可能なhighlightの引数: guibg, guifg.
4027                                                         *hl-Tooltip*
4028 Tooltip         ツールチップのフォント、文字、背景。
4029                 使用可能なhighlightの引数: font, guibg, guifg.
4031                 NOTE: MotifとAthenaでは'guifontset'が空かどうかに関わらず、常
4032                 に引数fontで実際のフォントセットを指定する。そしてそれが現在の
4033                 |:language|に結び付けられる。
4035 ==============================================================================
4036 13. グループのリンク            *:hi-link* *:highlight-link* *E412* *E413*
4038 複数の構文グループに対して同じハイライトを適用させるには、両方のグループから一
4039 つの強調グループにリンクを作り、リンク先に対して色属性を与えると簡単である。
4041 リンクを作るには:
4043     :hi[ghlight][!] [default] link {from-group} {to-group}
4045 リンクを削除するには:
4047     :hi[ghlight][!] [default] link {from-group} NONE
4049 Notes:                                                  *E414*
4050 - {from-group}か{to-group}のどちらかが存在しない場合、リンクは作成されない。こ
4051   の場合エラーメッセージは表示されない。
4052 - リンクされたグループに対して":highlight"を使うと、即座にリンクが削除される。
4053 - 既に{from-group}にハイライト設定がされている場合、'!'をつけないとリンクは作
4054   成されない。sourceされたファイル中の":highlight link"コマンドに関して、エラー
4055   メッセージは表示されない。そのため既に設定を持つグループに対するリンクがスキッ
4056   プされる。
4058                                         *:hi-default* *:highlight-default*
4059 引数[default]によってグループに対するデフォルトのハイライトを設定することがで
4060 きる。そのグループに対して既にハイライトが指定されている場合、このコマンドは無
4061 視される。既にリンクが存在する場合も同様。
4063 [default]は特定の構文ファイルのハイライトを上書きするのに特に便利である。例え
4064 ばC構文ファイルは次の行を含んでいる: >
4065         :highlight default link cComment Comment
4066 Cコメントに対してQuestionのハイライトをつけたい場合、これをvimrcファイルに加え
4067 る: >
4068         :highlight link cComment Question
4069 もしC構文ファイル中の"default"がないと、構文ファイルが読み込まれた時点でハイラ
4070 イトが上書きされてしまう。
4071 訳注: "default" がないと、.vimrc に書いた設定が、後に読み込まれる
4072 訳注: C構文ファイルによって上書きされてしまうということ。
4074 ==============================================================================
4075 14. 構文の消去                                       *:syn-clear* *E391*
4077 カレントバッファに対する構文設定を消去したいときはこのコマンドを使う: >
4078   :syntax clear
4080 このコマンドは、構文ハイライトをオフにしたいときや他の構文を適用したいときに使
4081 う。通常、これを構文ファイル内で行う必要はない。なぜなら、構文ファイルを読み込
4082 む自動コマンドによって構文がクリアされる。
4083 また、このコマンドは変数"b:current_syntax"を削除する。このコマンドの実行後には
4084 すべての構文がなくなるからである。
4086 全てのバッファに対して構文ハイライトを無効にしたいときは、構文ファイルを読み込
4087 む自動コマンドを削除する必要がある: >
4088   :syntax off
4090 このコマンドが実際に行うことは次のコマンドを実行するのと同じである: >
4091   :source $VIMRUNTIME/syntax/nosyntax.vim
4092 詳細は"nosyntax.vim"を参照。これが正常に機能するためには$VIMRUNTIMEが正しく設
4093 定されている必要がある。|$VIMRUNTIME|を参照。
4095 カレントバッファに対する特定の構文グループを消去するには: >
4096   :syntax clear {group-name} ..
4097 これは{group-name}に対する全てのパターンとキーワードを消去する。
4099 カレントバッファに対する特定の構文グループリストを消去するには: >
4100   :syntax clear @{grouplist-name} ..
4101 これは{grouplist-name}の中身を空リストにセットする。
4103                                                 *:syntax-reset* *:syn-reset*
4104 色を変えたため、色がごちゃごちゃになってしまったときは、次のコマンドを使うとデ
4105 フォルトに戻る: >
4107   :syntax reset
4109 これはオプション'highlight'に対する色は変更しない。
4111 ユーザのvimrcファイル中で設定した構文色もVimのデフォルト値に戻ることに注意。
4112 カラースキームを使っている場合、カラースキームによって定義された色は失われるこ
4113 とに注意。
4115 このコマンドが実際に行うことは次と同じ: >
4117         let g:syntax_cmd = "reset"
4118         runtime! syntax/syncolor.vim
4120 ここでオプション'runtimepath'が使われていることに注意。
4122                                                         *syncolor*
4123 構文ハイライトに別の色を使うには、色を設定するVimスクリプトを作ればよい。その
4124 ファイルを'runtimepath'中('runtimepath'は$VIMRUNTIMEを含む)のディレクトリに置
4125 くと、その設定がデフォルトの色設定を上書きする。こうして":syntax reset"コマン
4126 ドを実行すると、それらの色が有効になる。
4128 Unixでは~/.vim/after/syntax/syncolor.vimファイルを使うとよい。例: >
4130         if &background == "light"
4131           highlight comment ctermfg=darkgreen guifg=darkgreen
4132         else
4133           highlight comment ctermfg=green guifg=green
4134         endif
4136 カラースキームを使用すると、ユーザ定義の色が使われるのか、それともカラースキー
4137 ムで定義された色が使われるのかわからなくなる場合がある。これはカラースキーム
4138 ファイルに依存する。|:colorscheme|を参照。
4140                                                                 *E679*
4141 このsyncolor.vimが"syntax on"を実行しないこと、また、オプション'background'を
4142 設定したりコマンド"colorscheme"を実行しないように注意すること。もしこれらを実
4143 行すると無限ループに陥ってしまう。
4145                                                         *syntax_cmd*
4146 syntax/syncolor.vimファイルが読み込まれると、変数"syntax_cmd"に次の3つの値のど
4147 れかがセットされる:
4148    "on"         ":syntax on" コマンド。ハイライト色が上書きされるがリンクはそ
4149                 のまま。
4150    "enable"     ":syntax enable" コマンド。まだハイライトが定義されていないグ
4151                 ループに対して色を定義するだけ。":syntax default"を使うこと。
4152    "reset"      ":syntax reset" コマンドまたはカラースキームを読み込む。全ての
4153                 色を定義する。
4154    "skip"       色を定義しない。'runtimepath'で前にあるsyncolor.vimファイルが
4155                 既にデフォルト設定をセットしているとき、そのデフォルト設定をス
4156                 キップするために使われる。
4158 ==============================================================================
4159 15. 関数名などのハイライト                         *tag-highlight*
4161 ファイル中の全てのタグ(関数名など)をハイライトするには、次のマッピングを使うと
4162 よい。
4164         <F11>   -- tags.vimファイルを生成し、タグをハイライトする。
4165         <F12>   -- 既存のtags.vimファイルをもとにハイライトする。
4167   :map <F11>  :sp tags<CR>:%s/^\([^     :]*:\)\=\([^    ]*\).*/syntax keyword Tag \2/<CR>:wq! tags.vim<CR>/^<CR><F12>
4168   :map <F12>  :so tags.vim<CR>
4170 WARNING: tagsファイルが大きくなるほどこの操作は遅くなり、消費するメモリ量も多
4171 くなる。
4173 typedef、union、structだけをハイライトすることもできる。そのためにはExuberant ctags
4174 (http://ctags.sf.netで入手可能)が必要である。
4176 以下をあなたのMakefileに加える:
4178 # 型用のハイライトファイルを作成する。Exuberant ctagsとawkが必要
4179 types: types.vim
4180 types.vim: *.[ch]
4181         ctags --c-kinds=gstu -o- *.[ch] |\
4182                 awk 'BEGIN{printf("syntax keyword Type\t")}\
4183                         {printf("%s ", $$1)}END{print ""}' > $@
4185 そして以下を.vimrcに加える: >
4187    " load the types.vim highlighting file, if it exists
4188    autocmd BufRead,BufNewFile *.[ch] let fname = expand('<afile>:p:h') . '/types.vim'
4189    autocmd BufRead,BufNewFile *.[ch] if filereadable(fname)
4190    autocmd BufRead,BufNewFile *.[ch]   exe 'so ' . fname
4191    autocmd BufRead,BufNewFile *.[ch] endif
4193 ==============================================================================
4194 16. カラー対応xterm                          *xterm-color* *color-xterm*
4196 ほとんどのカラー対応xtermは8色しか持たない。デフォルト設定で色がつかない場合は
4197 以下を.vimrcに加えれば正常に色がつくはずである: >
4198    :if &term =~ "xterm"
4199    :  if has("terminfo")
4200    :    set t_Co=8
4201    :    set t_Sf=<Esc>[3%p1%dm
4202    :    set t_Sb=<Esc>[4%p1%dm
4203    :  else
4204    :    set t_Co=8
4205    :    set t_Sf=<Esc>[3%dm
4206    :    set t_Sb=<Esc>[4%dm
4207    :  endif
4208    :endif
4209 <       [<Esc>はエスケープ文字そのもの。CTRL-V <Esc>とタイプして入力する]
4211 最初の"if"を自分のターミナル名にマッチするように変更する必要があるかもしれない
4212 例: "xterm"でなく"dtterm"。
4214 Note: これらの設定は":syntax on"の前に行うこと。そうでないと色がおかしくなって
4215 しまう。
4216                                                         *xiterm* *rxvt*
4217 上の設定はxitermとrxvtでも動作するように注意されている。しかしrxvtで16色を使う
4218 場合にはterminfoを設定しなければならない: >
4219         :set t_AB=<Esc>[%?%p1%{8}%<%t25;%p1%{40}%+%e5;%p1%{32}%+%;%dm
4220         :set t_AF=<Esc>[%?%p1%{8}%<%t22;%p1%{30}%+%e1;%p1%{22}%+%;%dm
4222                                                         *colortest.vim*
4223 色設定をテストするためのファイルがVimディストリビューションに入っている。これ
4224 を使うには次のコマンドを実行する: >
4225    :runtime syntax/colortest.vim
4227 xtermのあるバージョン(とlinuxコンソールのようなターミナル)は、たとえ色数が8に
4228 定義されていても、より明るい文字色を出力することができる。そのため't_Co'が8の
4229 とき、Vimは明るい文字色に対して"cterm=bold"属性をセットする。
4231                                                         *xfree-xterm*
4232 16色以上を使うにはxtermの最新バージョンを入手すること(XFree86 3.3以降に含まれ
4233 ているはずである)。また、以下の場所でも最新バージョンを入手できる: >
4234         http://invisible-island.net/xterm/xterm.html
4235 次にそれをconfigureするよい方法を示す。これは88色を使い、termcap-query機能を有
4236 効化する。これによってVimがxtermに何色をサポートしているか問い合わせることがで
4237 きるようになる >
4238         ./configure --disable-bold-color --enable-88-color --enable-tcap-query
4239 もし8色しか使えなかったらxtermのコンパイル設定を確認すること。
4240 (このxtermをUTF-8エンコーディングで使う場合には|UTF8-xterm|も参照)。
4242 以下を.vimrcに加えるとこのxtermで動くはずである(16色用): >
4243    :if has("terminfo")
4244    :  set t_Co=16
4245    :  set t_AB=<Esc>[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm
4246    :  set t_AF=<Esc>[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm
4247    :else
4248    :  set t_Co=16
4249    :  set t_Sf=<Esc>[3%dm
4250    :  set t_Sb=<Esc>[4%dm
4251    :endif
4252 <       [<Esc>はエスケープ文字そのもの。CTRL-V <Esc>とタイプして入力する]
4254 |+terminfo|なしではVimはこれらの設定を認識し、自動的にctermの8色と上の設定を
4255 "<Esc>[9%dm" と "<Esc>[10%dm"に変換する。16色以上も自動的に変換される。
4257 以下の設定が256色用にうまくいくと報告されている: >
4259    :set t_AB=<Esc>[48;5;%dm
4260    :set t_AF=<Esc>[38;5;%dm
4262 または単にTERM環境変数を"xterm-color"または"xterm-16color"にセットし、うまくい
4263 くか試してみるとよい。
4265 以下のX resourcesを(~/.Xdefaultsファイルで)使いたいかもしれない:
4266         XTerm*color0:                   #000000
4267         XTerm*color1:                   #c00000
4268         XTerm*color2:                   #008000
4269         XTerm*color3:                   #808000
4270         XTerm*color4:                   #0000c0
4271         XTerm*color5:                   #c000c0
4272         XTerm*color6:                   #008080
4273         XTerm*color7:                   #c0c0c0
4274         XTerm*color8:                   #808080
4275         XTerm*color9:                   #ff6060
4276         XTerm*color10:                  #00ff00
4277         XTerm*color11:                  #ffff00
4278         XTerm*color12:                  #8080ff
4279         XTerm*color13:                  #ff40ff
4280         XTerm*color14:                  #00ffff
4281         XTerm*color15:                  #ffffff
4282         Xterm*cursorColor:              Black
4284 [Note: cursorColorにはバグがある。カーソルの色が最後に描画されたテキストの色に
4285 なってしまうというものである。これはxtermの新しいバージョンを使うと解決する
4286 が、まだ全ての人がそれを使っているわけではない。]
4288 これらを即座に更新するには.XdefaultsファイルをXオプションデータベースマネー
4289 ジャに再読み込みさせる(.Xdefaultsを変更したときはこれを行う必要がある): >
4290   xrdb -merge ~/.Xdefaults
4291                                         *xterm-blink* *xterm-blinking-cursor*
4292 xtermでカーソルを点滅させるにはtools/blink.cを見ること。またはThomas Dickeyの
4293 xtermのパッチレベル107以上を使い(入手場所は上を参照)、以下のリソースを設定す
4294 る。
4295         XTerm*cursorBlink:      on
4296         XTerm*cursorOnTime:     400
4297         XTerm*cursorOffTime:    250
4298         XTerm*cursorColor:      White
4300                                                         *hpterm-color*
4301 次の設定はhptermで(大体)うまく機能する。文字色は8色だけサポートしている: >
4302    :if has("terminfo")
4303    :  set t_Co=8
4304    :  set t_Sf=<Esc>[&v%p1%dS
4305    :  set t_Sb=<Esc>[&v7S
4306    :else
4307    :  set t_Co=8
4308    :  set t_Sf=<Esc>[&v%dS
4309    :  set t_Sb=<Esc>[&v7S
4310    :endif
4311 <       [<Esc>はエスケープ文字そのもの。CTRL-V <Esc>とタイプして入力する]
4313                                                 *Eterm* *enlightened-terminal*
4314 次の設定がEnlightenedターミナルエミュレータまたはEtermで機能すると報告されてい
4315 る。また、明るい色を表示するのにbold属性を使うxtermライクターミナル全てで機能
4316 すると思われる。必要なら前述のように":if"をつけること。 >
4317        :set t_Co=16
4318        :set t_AF=^[[%?%p1%{8}%<%t3%p1%d%e%p1%{22}%+%d;1%;m
4319        :set t_AB=^[[%?%p1%{8}%<%t4%p1%d%e%p1%{32}%+%d;1%;m
4321                                                 *TTpro-telnet*
4322 次の設定がTTpro telnet用にうまくいく。Tera Term ProはMS-Windows用のフリーウェ
4323 ア/オープンソースプログラムである。 >
4324         set t_Co=16
4325         set t_AB=^[[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{32}%+5;%;%dm
4326         set t_AF=^[[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{22}%+1;%;%dm
4327 また、TTproのSetup→Window→Full Colorが有効になっていることと、
4328 Setup→Font→Enable Boldが無効になっていることを確認すること。
4329 (この情報はJohn Love-Jensen <eljay@Adobe.COM>によって提供された)
4331  vim:tw=78:sw=4:ts=8:ft=help:norl: