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で動作させた
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|
42 コンパイル時に|+syntax|機能を無効にした場合には構文ハイライトは利用することは
45 ==============================================================================
46 1. クイックスタート *:syn-qstart*
48 *:syn-enable* *:syntax-enable*
49 次のコマンドで構文ハイライトが有効になる: >
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 破棄して、デフォルトの色を設定させたい場合は次のコマンドを使用する: >
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'が空でなければ正しい形式が自動的
79 NOTE: 反転表示("gvim -fg white -bg black")を使用する場合、|gvimrc|が読込まれた
80 後、GUIウィンドウが開かれるまでは'background'のデフォルト値が設定されない。そ
81 のせいで誤ったデフォルトのハイライトが使用されてしまう。ハイライト表示を有効化
82 する前に'background'のデフォルト値を設定するには、|gvimrc|にコマンド":gui"を含
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>
104 コマンド":syntax"はファイルをsourceすることで実装されている。その際にsourceさ
105 れるファイルの中身を見れば、このコマンドがどのように動作しているのか正確に知る
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
114 ==============================================================================
115 2. 構文ハイライトファイル *:syn-files*
117 ある1つの言語用の構文とハイライト色定義コマンドは通常1つのファイル(以下構文ファ
118 イル)に格納される。名前は"{name}.vim"と付ける慣習になっている。{name}はその言
119 語の名前か短縮名となる(DOSファイルシステムで要求される、8.3文字の形式にあわせ
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"をしたとき自動的にそのファイルが使
143 1. ユーザランタイムディレクトリを作成する。通常はオプション'runtimepath'に示さ
144 れる最初のディレクトリを使用する。UNIXの例では: >
147 2. "syntax"という名のディレクトリを作成する。UNIXでは: >
150 3. Vimの構文ファイルを作成する。もしくはインターネットからダウンロードする。そ
151 のファイルはディレクトリsyntaxに置く。構文"mine"の例では: >
152 :w ~/.vim/syntax/mine.vim
154 これで独自構文ファイルを手動で使うことはできるようになっている: >
156 このコマンドを実行するためにVimを再起動する必要はない。
158 このファイルタイプが認識されるようにするには、|new-filetype|を参照。
160 システム管理者としてユーザ全てに独自構文ファイルを使わせるには、各ユーザに同じ
161 構文ファイルをインストールさせる必要はなく、全ユーザ共通の'runtimepath'ディレ
165 既存の構文ファイルに設定を追加する *mysyntaxfile-add*
167 既存の構文ファイルでほぼ満足だが、いくつかの設定を追加したりハイライト手法を変
170 1. 上同様、'runtimepath'に示されるユーザディレクトリを作成する。
172 2. "after/syntax"というディレクトリを作成する。UNIXの例: >
174 mkdir ~/.vim/after/syntax
176 3. 追加設定を行なうコマンドを含むVimスクリプトファイルを作成する。例として、C
178 highlight cComment ctermfg=Green guifg=Green
180 4. その設定ファイルをディレクトリ"after/syntax"に置く。名前には構文名に".vim"
181 を追加して使用する。Cの構文を拡張するならば: >
182 :w ~/.vim/after/syntax/c.vim
184 以上。次回Cのファイルを編集する時にはコメントが異なった色で表示される。Vimを再
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つだけを読込む。
202 ハイライトや構文グループの名前はアスキー文字、数字、アンダースコアだけでつけな
203 ければならない。正規表現では: "[a-zA-Z0-9_]*"
205 各ユーザが好みの色セットを使用できるように、多くの言語に共通するハイライトグルー
206 プには優先名が与えられている。推奨されているグループ名は以下のとおり(構文ハイ
207 ライトがちゃんと機能していれば、"Ignore"以外はそのグループに設定された色で表示
213 String o 文字列定数: "これは文字列です"
214 Character o 文字定数: 'c', '\n'
215 Number o 数値定数: 234, 0xff
216 Boolean o ブール値の定数: TRUE, false
217 Float o 不動小数点数の定数: 2.3e10
220 Function o 関数名(クラスメソッドを含む)
223 Conditional o if, then, else, endif, switch, その他
224 Repeat o for, do, while, その他
225 Label o case, default, その他
226 Operator o "sizeof", "+", "*", その他
228 Exception o try, catch, throw
230 *PreProc o 一般的なプリプロセッサ命令
231 Include o #include プリプロセッサ
232 Define 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, その他
242 SpecialChar o 特殊な文字定数
243 Tag o この上で CTRL-] を使うことができる
245 SpecialComment o コメント内の特記事項
248 *Underlined o 目立つ文章, HTMLリンク
250 *Ignore o (見た目上)空白, 不可視
252 *Error o エラーなど、なんらかの誤った構造
254 *Todo o 特別な注意がひつようなもの; 大抵はTODO FIXME XXXなど
257 マーク(*)されている名前が優先グループ、その他はマイナーグループである。優先グ
258 ループには、"syntax.vim"によりデフォルトのハイライト手法が定義されている。マイ
259 ナーグループは優先グループにリンクされ、リンクした先と同じハイライト手法になる。
260 ファイル"syntax.vim"が読込まれた後でコマンド":highlight"を使えば、そのデフォル
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を読込む
280 +- $VIMRUNTIME/syntax/nosyntax.vimを読込んで古い構文を削除する
282 +- 'runtimepath'から$VIMRUNTIME/syntax/synload.vimを読込む
285 | | カラースキームが定義されている場合は":colors {name}"で再度読込む。
286 | | そうでない場合は":runtime! syntax/syncolor.vim"が使用される。
287 | | ":syntax on"は既存の色設定を上書設定し、":syntax enable"はまだ設定
288 | | されていないグループのみを設定する。
290 | +- 適切な構文ファイルをオプション'syntax'が設定される時に読込む自動実
291 | | 行コマンドを設定する。 *synload-1*
293 | +- ユーザによる追加ファイルを変数|mysyntaxfile|から読込む。これは
294 | Vim 5.xとの互換性のためだけに存在する。 *synload-2*
296 +- ":filetype on"を実行し":runtime! filetype.vim"が実行される。これは見つ
297 | けることのできる全てのfiletype.vimを読込む。$VIMRUNTIME/filetype.vimは
298 | 常に読込まれ、以下のことが実行される。
300 | +- 拡張子に基づいてオプション'filetype'を設定するオートコマンドをイン
301 | | ストールする。これにより既知のファイル形式に付いて、ファイル名と
302 | | 当該形式との関連付けが成される。 *synload-3*
304 | +- ユーザによる追加ファイルを変数 *myfiletypefile* から読込む。これは
305 | | Vim 5.xとの互換性のためだけに存在する。 *synload-4*
307 | +- ファイル形式が検出されなかった時にscripts.vimを読込むための自動実
308 | | 行コマンドをインストールする。 *synload-5*
310 | +- 構文メニュー設定のため$VIMRUNTIME/menu.vimを読込む。 |menu.vim|
312 +- ファイル形式が検出された時にオプション'syntax'を設定するためのFileType
313 | オートコマンドを設定する。 *synload-6*
315 +- 既に読込まれているバッファに対して構文ハイライトを行なうために、関連し
319 ファイルを読込む時には、Vimは以下のように関連した構文ファイルを見つける:
321 ファイルを読込むとBufReadPostオートコマンドが起動する。
323 +- |synload-3|(既知ファイル形式)か|synload-4|(ユーザ定義ファイル形式)の自
324 | 動実行コマンドがヒットした場合、オプション'filetype'にそのファイル形式
327 +- |synload-5|のオートコマンドが実行される。まだファイル形式が決定され
328 | ていない場合は、'runtimepath'からscripts.vimが検索される。これは常に以
329 | 下のことを行なう$VIMRUNTIME/scripts.vimを読込む。
331 | +- ユーザによる追加ファイルを変数 *myscriptsfile* から読込む。これは
332 | | Vim 5.xとの互換性のためだけに存在する。
334 | +- 未だにファイル形式が決定できない場合、ファイルの内容を検査する。検
335 | 査は"getline(1) =~ pattern"のように認識できるファイル形式かどうか
336 | 行なわれ、認識できるならば'filetype'を設定する。
338 +- ファイル形式が決定されて'filetype'が設定された時に、上記|synload-6|の
339 | FileTypeオートコマンドが実行される。決定したファイル形式名がそれによ
342 +- 上記でオプション'syntax'が設定されると、|synload-1|(と|synload-2|)の自
343 | 動実行コマンドが実行される。これにより次のコマンドでメインとなる構文
344 | ファイルが'runtimepath'から読込まれる。
345 | runtime! syntax/<name>.vim
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
374 またはユーザコマンド":TOhtml"を使ってもよい。これは標準プラグイン中で定義され
375 ている。":TOhtml"は範囲指定やビジュアルモードにも対応している: >
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の出力へ強制的に
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 いいから折り返しをさせたいなら、次のようにする: >
410 こうすると、各行末に<br>を使い、連続するスペースに" "を使うようになる。
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 これを無効にするにはこの変数を削除する: >
433 生成されたXHTMLファイルはDocBook XMLドキュメントで使用できる。次を参照:
434 http://people.mech.kuleuven.ac.be/~pissaris/howto/src2db.html
437 - この機能はGUIをサポートしたバージョンでしか動作しない。(X11などの)GUIが実際
438 に機能していない状況でも動作はするが、良い結果は得られない(色が異なってしま
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
456 abel_obsolete_ok 古いキーワードをエラーでなく命令文として扱う
457 abel_cpp_comments_illegal '//'をインラインコメントリーダとして扱わない
465 ANT *ant.vim* *ft-ant-syntax*
467 ANTの構文ファイルにはデフォルトでJavaScriptとPythonの構文ハイライトが含まれて
468 いる。関数AntSyntaxScript()の第1引数にタグ名を、第2引数にファイル名を指定する
469 ことでその他のスクリプト言語用構文ハイライトをインストールすることができる。
472 :call AntSyntaxScript('perl', 'perl.vim')
474 これは次のようなANTのコードにPerlの構文ハイライトをインストールするものである >
476 <script language = 'perl'><![CDATA[
477 # everything inside is highlighted as perl
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がそれと判断できるような行を追加しなければならない。現在は以下の構文ファイ
507 asm68k モトローラ680x0アセンブラ
508 asmh8300 日立H-8300用GNUアセンブラ
510 fasm Flat アセンブラ (http://flatassembler.net)
511 masm マイクロソフトアセンブラ(たぶん80x86汎用)
513 tasm ターボアセンブラ(80x86,Pentium,MMXの命令コードを含む)
514 pic PICアセンブラ(現在はPIC16F84用)
516 アセンブリファイルに次のような行を書き加えるのが一番柔軟である: >
518 "nasm"は実際に使用するアセンブリ構文の名前に置き換える。このような記述はファイ
519 ルの先頭5行以内に書いてなければならない。
521 構文の種類はバッファ変数b:asmsyntaxを設定することで常にそちらが優先される: >
522 :let b:asmsyntax=nasm
524 自動にしろ手動にしろb:asmsyntaxが設定されていないときには、グローバル変数
525 asmsyntaxが使用される。これによりデフォルトのアセンブリ言語を設定することがで
529 最後の手段として、何も設定されていない場合には、"asm"構文が使用される。
532 ネットワイドアセンブラ(nasm.vim)の補助ハイライト ~
535 :let {variable}=1|set syntax=nasm
537 :unlet {variable} |set syntax=nasm
540 nasm_loose_syntax 非オフィシャルな拡張構文をエラーとしない
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スクリプトを使用する
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 両方に対応した構文を定義している。たくさんの標準的な定義/定数がサポートされて
565 次を |.vimrc| に書いておくと、ある種のコーディング標準違反を教えてくれる: >
570 以下の変数によって、様々なレベルで構文折り畳みを有効にできる (これらはユーザの
571 |.vimrc| で設定すること)。ソースブロックと SQL についてより複雑な折り畳みを行
574 折り畳みを有効にし、関数レベルで折り畳みをするにはこうする: >
576 次の設定を行うと、if, while, for ... のようなソースブロックレベルの折り畳みが
577 有効になる。キーワード begin/end の前のインデントが等しくなければならない (ス
579 let baan_fold_block=1
580 次を設定すると SELECT, SELECTDO, SELECTEMPTY ... のような埋め込み SQL ブロック
581 の折り畳みが有効になる。キーワード begin/end の前のインデントが等しくなければ
582 ならない (スペースとタブは異なるとみなされる)。 >
584 Note: ブロック折り畳みを有効にすると、小さな折り畳みがたくさんできるかもしれな
585 い。|.vimrc| でオプション 'foldminlines' と 'foldnestmax' を |:set| するか、...
586 /after/syntax/baan.vim 内で |:setlocal| をする (|after-directory| を参照) とよ
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として
601 C *c.vim* *ft-c-syntax*
603 Cには幾つかの補助的なハイライト方法がある。それらを有効化するには対応した変数
605 :let c_comment_strings=1
606 これを無効化するには":unlet"を使う。例: >
607 :unlet c_comment_strings
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桁にあるときを除き、[] と () の内側の {}
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"にもっと大きな値を設定すれば解決
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"のブロックを使用した場合には、それは正しくハイライ
646 コメント内で追加要素にマッチを行なうには、クラスタcCommentGroupを使用する。
648 :au Syntax c call MyCadd()
650 : syn keyword cMyItem contained Ni
651 : syn cluster cCommentGroup add=cMyItem
652 : hi link cMyItem Title
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に加えるとよいだ
666 syn region myFold start="{" end="}" transparent fold
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 の構文を使うようにする
677 :let ch_syntax_for_h = 1
680 CHILL *chill.vim* *ft-chill-syntax*
682 Chillの構文ハイライトはCに似ている。設定に関しては|c.vim|を参照。それに加えて
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では行頭のスペースのハイライトできる。これをオフにしたいなら、次の行を
694 let g:changelog_spacing_errors = 0
695 これは次にchangelogファイルを編集するときから有効になる。バッファごとに設定す
696 るには"b:changelog_spacing_errors"を使う(構文ファイルを読み込む前に設定するこ
699 例えばスペースをエラーとするかどうかなどのハイライト方法を変えることができる: >
700 :hi link ChangelogError Error
702 :hi link ChangelogError NONE
706 COBOL *cobol.vim* *ft-cobol-syntax*
708 既存のCOBOLコードに要求されるハイライト方法と、新規に開発されるコードに要求さ
709 れるそれには違いがある。この違いはコードのおかれている状況(保守 vs 開発)やその
710 他の要素によって決定する。既存コードのハイライトを行なうには.vimrcに次の行を加
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"を設定す
737 :let filetype_csh = "csh"
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になる。
805 :let docbk_type = "sgml"
807 :let docbk_type = "xml"
808 これは構文ファイルを読み込む前に行う必要がある。しかし構文ファイルの読み込みは
809 込み入っている。より単純な方法はファイル形式を"docbkxml"または"docbksgml"にセ
811 :set filetype=docbksgml
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を設定するのが良い。次のようにすれば使用するバージョン
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 のハイライトを追加
842 Doxygen のフォーマットを有効にするにはいくつかの方法がある。手動、またはモード
843 ラインでそのファイルの syntax に '.doxygen' を追加する。例: >
844 :set syntax=c.doxygen
846 // vim:syntax=c.doxygen
848 c, cpp, idl のファイルに対しては、グローバルまたはバッファローカルな変数
849 load_doxygen_syntax を設定すれば自動的にこれが行われる。次の行を .vimrc に加え
851 :let g:load_doxygen_syntax=1
853 構文ハイライトに影響を与える変数がいくつかある。また、これらは標準でないハイラ
857 g:doxygen_enhanced_color
858 g:doxygen_enhanced_colour 0 Doxygen コメントに対して標準でないハイ
861 doxygen_my_rendering 0 HTML の太字、斜体、html_my_rendering
864 doxygen_javadoc_autobrief 1 0にすると JavaDoc の autobrief に対す
867 doxygen_end_punctuation '[.]' brief の終わりを示す句読点にマッチする
870 また、次のハイライトグループを設定すると便利である。
873 doxygenErrorComment code, verbatim, dot セクション中で句読点が抜け
875 doxygenLinkError \link セクションで \endlink が抜けているときの
879 DTD *dtd.vim* *ft-dtd-syntax*
881 初期状態ではDTD構文ハイライトは大/小文字を区別する。区別しないようにするには、
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'を使用してハイライトされる。以下を設定するとこれを無効
897 :let dtd_no_param_entities=1
899 XML内の埋め込みDTDをハイライト表示するために、DTDの構文ファイルはxml.vimからも
903 EIFFEL *eiffel.vim* *ft-eiffel-syntax*
905 Eiffelは大小文字の区別をしないけれども、スタイルガイドラインが示すように、構文
906 ハイライトではそれらが区別される。これにより大小文字が違えば違うクラス名として
907 ハイライト表示することが可能になっている。大小文字の違いを無視してハイライトを
908 行なうならば、起動設定ファイルに次の行を書き足す: >
910 :let eiffel_ignore_case=1
912 これを行なってもコメント内のクラス名とTODOの印には大小文字の区別がなされる。
914 逆に、もっと厳密に検査するには、次の行のいずれかを書き足す: >
917 :let eiffel_pedantic=1
919 eiffel_strictを設定すると"Current", "Void", "Result", "Precursor"そして"NONE"
920 の5つの既定単語について、不正な大小文字の使用を捕捉し、機能やクラス名としてそ
921 れらが使用されれば警告を与えるようになる。
923 eiffel_pedanticを設定すると、Eiffelのスタイルガイドラインを相当に厳格に強制す
924 る。(キーワードを大文字で書く時代遅れの方法と同様に、大小文字を任意にミックス
927 "Current", "Void", "Result"そして"Precursor"の小文字版を使用するには、大小文字
928 を区別するハイライト方法を無効化する代わりに: >
930 :let eiffel_lower_case_predef=1
934 ISEが提案し、実験的に幾つかのコンパイラでは取り扱うことのできる、新しい生成構
935 文は次のコマンドで使用できるようになる: >
939 最後に幾つかのベンダは16進数定数値をサポートしている。それを取り扱うには: >
941 :let eiffel_hex_constants=1
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 パッケ
965 FlexWiki の構文のほとんどの一般的な要素に対して構文ハイライトができる。
966 FlexWiki のtplugin スクリプトはバッファローカルなオプションを設定し、FlexWiki
967 ページの編集をより便利にする。FlexWiki は改行を新しい段落の開始とみなすので、
968 このftplugin は 'tw' を0に設定し (行の長さを制限しない)、'wrap' をオンにし (長
969 い行を水平スクロールさせるのでなく、折り返す)、'linebreak' をオンにする (画面
970 上の最後の文字でなく 'breakat' の文字で折り返す)、などを行う。また、デフォルト
971 では無効にされているキーマップも含んでいる。
973 "j"、"k"、カーソルキーで表示行単位で移動するようにするキーマップを有効にするに
975 :let flexwiki_maps = 1
978 FORM *form.vim* *ft-form-syntax*
980 FORMファイルの構文要素に使用するカラースキームには、Conditional, Number,
981 Statement, Comment, PreProc, Type, そしてStringが、次の文献で定義される言語仕
983 文献: 'Symbolic Manipulation with FORM' by J.A.M. Vermaseren, CAN,
986 初期設定の色に変更を加えるには、次の構文グループを再定義すれば良い:
991 - formHeaderStatement
998 構文ファイルform.vimではFORMプリプロセッサコマンドとディレクティブをそれぞれ、
999 デフォルトでは同じ構文グループにしていることに注意。
1001 FORM用の既定の拡張カラーモードではヘッダ命令とFORMプログラム本体での命令を区別
1002 できるような色設定が利用可能である。拡張カラーモードを使用可能にするには、ファ
1003 イルvimrcに次の設定を書き足す: >
1005 :let form_enhanced_color=1
1007 拡張モードを使うことは、gvimで暗いディスプレイを使用した場合にも利点がある。命
1008 令文は黄色ではなく明るい黄色で表示され、条件文は視認性のため明るい青で表示され
1012 FORTRAN *fortran.vim* *ft-fortran-syntax*
1015 デフォルトではf95(Fortran 95)に相当するハイライトが行なわれる。Fortran 95は
1016 Fortran 90のスーパーセットであり、かつFortran 77のほぼスーパーセットであるから、
1017 多くのユーザの多くのケースにとって適切な選択である。
1020 Fortran 9xのソースコードには固定形式と自由形式が有る。形式が誤って設定されてい
1021 ると構文ハイライトが正しくされないことに注意。
1023 新規にFortranのファイルを作成する場合には、構文ファイルは固定形式であると仮定
1025 :let fortran_free_source=1
1026 これを.vimrcでコマンド:syntaxを実行する前に行なう必要がある。常に固定形式を使
1028 :let fortran_fixed_source=1
1029 これも.vimrcでコマンド:syntaxを実行する前に行う必要がある。
1031 ソースコードの形式がファイル拡張子によって決定できる場合には、ftpluginファイル
1032 の1つでfortran_free_sourceを設定すると便利になる。ftpluginファイルについての詳
1033 細は|ftplugin|を参照のこと。例えば、拡張子.f90を持つファイルについては全て自由
1034 形式として扱い、それ以外のものは固定形式とする場合には、次のコードをftpluginフ
1036 let s:extfname = expand("%:e")
1037 if s:extfname ==? "f90"
1038 let fortran_free_source=1
1039 unlet! fortran_fixed_source
1041 let fortran_fixed_source=1
1042 unlet! fortran_free_source
1044 これは.vimrcで"syntax on"より前に"filetype plugin indent on"が書かれていないと
1047 既存のFortranファイルを編集する時には、変数fortran_free_sourceが設定されていれ
1048 ば構文ファイルは自由形式のソースであると仮定し、変数fortran_fixed_sourceが設定
1049 されていれば固定形式のソースであると仮定する。どちらも設定されていないときには
1050 、ファイルの先頭250行の行頭5カラムを調べて、その形式が固定なのか自由なのかを決
1051 定しようと試みる。自由形式コードの兆候が見られない場合には、ファイルは固定形式
1052 コードとして取り扱われる。このアルゴリズムはほとんどのケースにおいて有効に機能
1053 する。しかしいくつかのケース、例えば先頭250行以上が行コメントで占められている
1054 ようなファイルでは、構文ファイルが固定形式コードであると誤った判断をしてしまう
1055 だろう。そのような場合には、ファイルの先頭250行の行頭5桁のどこかに、コメント以
1056 外の命令文を追加し、ファイルの保存(:w)そして再読込(:e!)を行なえば良い。
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を >
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 なファイルに対してこのように構文による折り畳みを使用すると、非常に遅くなること
1083 fortran_foldを設定し、fortran_fold_conditionalsか
1084 fortran_fold_multilinecomments(どちらか片方でも両方でも)を設定した場合には、
1085 foldmethod=syntaxを設定してある時に、Vimはファイルを折り畳む。2つのプログラム単
1086 位の間にあるコメントや空行は折り畳まれない。なぜならそれらは構文によって定義され
1087 るプログラム単位に属していないからである。
1090 変数fortran_more_preciseを >
1091 :let fortran_more_precise=1
1092 このようなコマンドで設定した場合には、構文ハイライトがより正確になるが動作は遅
1093 くなる。とりわけ、do、goto、そして算術if命令文に使用される命令ラベルが、do、if、
1094 selectもしくはforall構造の終端で使用される名前として認識されるようになる。
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としてハイライトされ、これらの方言で必要とされる自由
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ファイルに次のようなコードを書き足す
1123 let s:extfname = expand("%:e")
1124 if s:extfname ==? "f90"
1125 let fortran_dialect="elf"
1127 unlet! fortran_dialect
1129 これは.vimrcで"syntax on"より前に"filetype plugin indent on"が書かれていないと
1132 拡張子が方言を一意に決定できない場合には、もっと良い制御方法が必要になる。各
1133 ファイルの先頭3行以内にコメントで"fortran_dialect=xx"という命令を書けば方言の
1134 設定を上書することができる(xxにはf77やelfやFやf90やf95が入る)。これによりファ
1135 イル毎に方言を設定できる。例えば、古い.fファイルはf77の拡張を使用して書かれて
1136 いるが、新しい.fファイルがFで書かれている場合には >
1138 このような形で新しいファイルの先頭3行以内にコメントを追加することで、Fで書かれ
1139 ていることが判別できるようになる。Fとelfの両方が指定された場合には、Fの方が優
1143 丸カッコチェックは、閉じカッコの不足については捕捉できない。ホレリス定数は認識
1144 されない。幾つかのキーワードはFortran90の予約語ではないので誤ってハイライトさ
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の設定ファイルと認識させるに
1159 :au! BufNewFile,BufRead /etc/X11/fvwm2/* let b:fvwm_version = 2 |
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グループは、
1184 書かれた大抵の場所のインラインJavaコードは適切にハイライトされるが、幾つかの特
1185 殊なケースではそうはならない。他のHTMLグループ内にインラインJavaコードを書いて
1186 それが正しくハイライトされない場合には、必要な行を|html.vim|からコピーして
1187 gspJavaをconstains節に加えれば、正しくハイライトされるようになる。
1189 インラインJavaを示すバッククォートは、目立ちやすくするためにhtmlErrorグループ
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
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 もあるため、これらが干渉する。これらをエラーでなく演算子としてハイライトしたい
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'が使用される(あなたの環境でこれらがどう定義されているかについては
1247 既知のタグ名はC命令文と同じようにハイライトされる。未知のタグ名は間違いを見分
1248 けやすくするために、<>や</>と同じようにハイライトされる。
1250 引数(もしくは属性)名にも同じことが言える。既知の属性名と未知の属性名には異なる
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 それらのテキストの文字種を変更するには、以下の構文グループを再定義する必要があ
1264 - htmlBoldUnderlineItalic
1266 - htmlUnderlineItalic
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 エラーをハイライトする。しかしその間違ったスタイル(<!--で始まり--!>で終わる)を
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構文をオンにしなければならない: >
1320 HTML/OSコードのブロックの開始と終了を示す文字は、それぞれ<<または[[,
1324 IA64 *ia64.vim* *intel-itanium* *ft-ia64-syntax*
1326 Intel Itanium 64アセンブリ言語用のハイライト。このファイル形式を認識させる方法
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()をシステム関数としてハイ
1348 Informコンパイラはある古いキーワードをエラーとみなす。普通、これらのキーワード
1349 はエラーとしてハイライトされる。これをエラーとしてハイライトするのをやめるには、
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 たアプローチができる。その結果は巨大でいくぶん冗長であるが、一応は機能するよう
1367 idl ファイルには Microsoft 拡張がある。それらのうちいくつかは
1368 idl_no_ms_extensions を定義すると無効になる。
1370 より複雑な拡張は idl_no_extensions を定義すると無効になる。
1374 idl_no_ms_extensions Microsoft 独自の拡張の一部を無効にする
1375 idl_no_extensions 複雑な拡張を無効にする
1376 idlsyntax_showerror IDL エラーを表示する (少々うるさいがとても助け
1378 idlsyntax_showerror_soft エラーに対してデフォルトでよりソフトな色を使う
1381 JAVA *java.vim* *ft-java-syntax*
1383 java.vim構文ハイライトファイルはいくつかのオプションを提供している:
1385 Java 1.0.2では丸括弧の内側に波括弧が入ることは絶対になかったため、これはエラー
1386 と判断された。Java1.1以降では(無名クラスとともに)これが可能になったため、エラ
1387 ーと判断されなくなった。もし以前のようにしたいなら、vimの初期化ファイルに次の
1389 :let java_mark_braces_in_parens_as_errors=1
1391 java.lang.*中の全ての識別子は常に全てのクラスから見える。これらをハイライトす
1393 :let java_highlight_java_lang_ids=1
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個のいずれかでインデントされているな
1407 :let java_highlight_functions="indent"
1409 しかし、関数とクラスの命名(大文字・小文字についての)に関するJavaガイドラインに
1411 :let java_highlight_functions="style"
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 の色でハイライトさせるには、以下のグループに対して新しいハイライトを定義するこ
1424 Debug, DebugSpecial, DebugString, DebugBoolean, DebugType
1425 これらはそれぞれ、文、デバッグ文字列に使われる特別な文字、文字列、ブール型定
1426 数、型(this, super)に使われる。私はこれらの文に異なる背景色をつけることにして
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を書くこともで
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コメントがあるときだけ意味がある。これらを有効化するため
1452 :let java_javascript=1
1456 ネストした丸括弧に異なる色をつけるには、javaParen、javaParen1、javaParen2に異
1458 :hi link javaParen Comment
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
1486 LISP *lisp.vim* *ft-lisp-syntax*
1488 lisp の構文ハイライトには2つのオプションがある: >
1490 g:lisp_instring : この変数が存在すると "(...)" 形式の文字列が、その中
1491 身が lisp であるかのようにハイライトされる。AutoLisp
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のファイルに対してはモードラインを使うこと。
1530 LPCと認識されてしまうCファイルには:
1534 変数をセットしたくないなら全てのLPCファイルでモードラインを使うこと。
1536 LPCには複数の実装がある。我々はもっとも広く使われているものをサポートしたいと
1537 思っている。デフォルトのLPC文法はMudOSシリーズ用である。MudOS v22以前を使って
1538 いるなら、次をセットすることによりsensible モディファイヤをオフにし、v22以降の
1539 新しいefunを無効にするとよい。MudOSの最新版を使っているときはこの変数をセット
1542 :let lpc_pre_v22 = 1
1544 LPCのLpMud 3.2シリーズには: >
1546 :let lpc_compat_32 = 1
1550 :let lpc_use_lpc4_syntax = 1
1553 uLPCはPike用に開発されている。なので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個のスペースが続いてもよい)で引
1586 デフォルトではmail.vimは先頭表示行の100行前までの構文をシンクロナイズさせる。
1587 遅いマシンを使っていて、一般的に短いヘッダのemailを扱っているなら、これをより
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に以下を書くと、全てのパッケージ関数がハイライトされる: >
1610 あるいは以下の表から任意のサブセット変数/パッケージを選んで.vimrcファイル中で
1611 その変数を1にセットしてもよい($VIMRUNTIME/syntax/syntax.vimを読み込む前に行う
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 のファ
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グループに自分自身の拡張を加えること。こ
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用の拡張構文ハイライト機能を有効化するには、次のオプ
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"というリクエストを受けつ
1714 g/troffによって得られる最良の整形された出力を得るには、スペースと句読点に関す
1715 るいくつかの単純なルールに従うべきである。
1717 1. 行の末尾に空のスペースを置かないこと
1719 2. 文末のピリオド、エクスクラメーションマークなどの後にはちょうど1個のスペース
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
1747 ソースファイル中のプリプロセッサのエントリをセクションマーカーと同じくらい容易
1748 に表示させたいなら、.vimrc中で次のオプションを有効化する: >
1750 let b:preprocs_as_sections = 1
1752 同様に、構文ファイルはmsパッケージ中の拡張段落マクロ(.XP)用の余分な段落マーカー
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
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 使って表示するどうかを制御する。演算子記号を色づけするには、次の行を初期化ファ
1814 :let pascal_symbol_operator=1
1816 いくつかの関数はデフォルトでハイライトされる。これをオフにするには: >
1818 :let pascal_no_functions=1
1820 さらに、いくつかのコンパイラ用に個別の変数がある。pascal_delphi,
1821 pascal_gpc, pascal_fpcがある。デフォルトの拡張はTurbo Pascalに合うようになって
1830 文字列が1行で定義されるものとするなら、変数pascal_one_line_string variableを定
1833 :let pascal_one_line_string=1
1835 タブ文字が好きでないなら、変数pascal_no_tabsをセットするとよい。するとタブがエ
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" を設定するとこの機
1860 '@{${"foo"}}'のように複雑なものをパースさせたくないなら次のようにする: >
1862 :let perl_no_extended_vars = 1
1864 (Vim 6.x では違う方法だった: "perl_extended_vars" を設定するとこの機能が有効に
1867 文字列の色づけは変更できる。デフォルトでは文字列とqq friendsは第1行と同じよう
1868 にハイライトされる。変数perl_string_as_statementをセットすると第2行のようにハ
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 オフにしてみること。その誤りを引き起こした行を特定できるなら、それを知らせてく
1883 1つのトリガーは"^\s*sub\s*"に関するもので、もう1つはほぼ"^[$@%]"に関するもので
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をセットすること: >
1897 if 文などでも同様にブロックを折り畳みたければ、次のように設定する: >
1899 :let perl_fold_blocks = 1
1901 perl の折り畳みが有効になっているとき、package や sub を折り畳みたくなければ、
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もサポートしているの
1914 php用の構文ハイライトには以下のオプションがある。
1916 文字列中でSQL構文ハイライトを行いたいなら: >
1918 let php_sql_query = 1
1920 Baselibメソッドのハイライトを行いたいなら: >
1924 文字列中でHTML構文ハイライトを行いたいなら: >
1926 let php_htmlInStrings = 1
1930 let php_oldStyle = 1
1932 ASPスタイルのショートタグを有効化したいなら: >
1934 let php_asp_tags = 1
1938 let php_noShortTags = 1
1940 ] や ) の対応エラーをハイライトしたいなら: >
1942 let php_parent_error_close = 1
1944 対応する閉じ括弧がない開き括弧( や [が存在する場合、php終了タグをスキップさせ
1947 let php_parent_error_open = 1
1949 クラスや関数の折り畳みを有効化するには: >
1955 let php_sync_method = x
1957 x = -1 で検索によるシンクロナイズ(デフォルト)
1958 x > 0 少なくともx行上までシンクロナイズ
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ファイル用のプリプロセッサである。
1980 - ppwiz_highlight_defs : PPWizardの定義についてのハイライトモードを決める。
1983 ppwiz_highlight_defs = 1 : #define 文においてその内容の色を保つ(例. PPWizard
1986 ppwiz_highlight_defs = 2 : 行継続記号を除き、#defineと#evaluate文が単一の色
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言語のどのレベルをハイライトす
2021 :let postscr_level=2
2023 この変数が定義されていないときはデフォルトの2(レベル2)になる。これが現在のとこ
2026 すべてのPSインタープリタがその言語レベルのすべての言語機能をサポートしているわ
2027 けではないことに注意。とくに、PSファイルの先頭の%!PS-Adobe-3.0は現在の
2028 PostScriptがレベル3であることを示すわけではない!
2030 以下のように変数postscr_displayを定義すると、Display PostScriptの言語機能もハ
2033 :let postscr_display=1
2035 以下のように変数postscr_ghostscriptを定義すると、Ghostscript固有の言語機能もハ
2038 :let postscr_ghostscript=1
2040 PostScriptはたくさんの定義済み要素を持つ巨大な言語である。これらの要素すべてを
2041 ハイライトすると便利であるが、そうすると遅いマシンではVimの動作が遅くなってし
2042 まう。マシンフレンドリーにするために、デフォルトではフォント名と文字エンコーディ
2043 ングはハイライトされない、これらをハイライトさせるには、以下の変数のどちらか
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ファイルと識別させるように
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
2084 PROGRESS *progress.vim* *ft-progress-syntax*
2086 "*.w"にマッチするファイルのタイプはProgressかCWEBである。自動判別がうまく機能
2087 しないなら、またはcwebファイルを一切編集しないとわかっているなら、次をvimrcに
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つある。
2102 :let python_highlight_numbers = 1
2105 :let python_highlight_builtins = 1
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つの変数には次のような効果が
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以降。一部それ以前)が追加するコマンドもハイライ
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"を定義することによっ
2167 :let ruby_no_expensive = 1
2169 この場合すべての制御キーワードに同じ色が使われる。
2171 この機能を有効化したいが、上にスクロールしているときにハイライトがおかしくなり、
2172 それがCTRL-Lで再描画すると直るようなら、変数"ruby_minlines"を50以上の値にセッ
2175 :let ruby_minlines = 100
2177 理想的にはこの値はファイル中の最も大きいクラスやモジュールの長さよりも大きくし
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" などの重要なメソッ
2195 Rubyの演算子をハイライトすることができる。これは"ruby_operators"を定義すると有
2198 :let ruby_operators = 1
2200 "ruby_space_errors" を定義するとホワイトスペースのエラーがハイライトされるよう
2203 :let ruby_space_errors = 1
2205 これによって行末のホワイトスペースやタブ文字の前のスペース文字がエラーとして強
2206 調されるようになる。これは "ruby_no_trail_space_error" と
2207 "ruby_no_tab_space_error" を定義すると改善することができる。これらはそれぞれ行
2208 末のホワイトスペースとスペース文字の後のタブ文字を無視する。
2210 "ruby_fold" を定義すると折り畳みを有効にすることができる: >
2214 これを定義すると、オプション 'foldmethod' が "syntax" になり、クラス、モジュー
2215 ル、メソッド、コードブロック、ヒアドキュメント、コメントの折り畳みを行うように
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 固有の設
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 い。構文ハイライトにこれを反映させるには次の変数をセットすればよい: >
2244 これはたくさんの新しいキーワードもセットする。古いキーワードを無効にするには(
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文字にするとよい。そうすると文字
2265 変換コマンド(y)は置換コマンドとまったく同様に扱われる。つまり、この構文ファ
2266 イルにおいては、変換は置換と同じフラグを受け取ると判断される。これは間違いで
2267 ある(変換は一切フラグを受け取らない)。これに関係したコマンドは非常に複雑な処
2268 理を要求するため(95パターン、もっともらしいパターンデリミタごとに1つ)、私は
2272 SGML *sgml.vim* *ft-sgml-syntax*
2274 SGMLファイル中のタグをハイライトする方法は以下のように動作する。
2276 開きタグ<>と閉じタグ</>は異なる色がつけられる。これは意図されたものである。開
2277 きタグには'Function'の色が使われ、閉じタグには'Type'の色が使われる(これらがど
2278 う定義されているかを確かめたいならsyntax.vimを見ること)。
2280 登録されているタグ名はCの文と同じ方法で色づけされる。エラーを見つけやすくする
2281 ため、登録されていないタグ名は色づけされない。
2283 引数名(や属性名)も同様である。登録されている属性名は登録されていない属性名と異
2286 いくつかのSGMLタグはテキストの外見を変更するのに使われる。以下のタグは構文ファ
2287 イルsgml.vimによって認識され、通常のテキストの表示法を変更する:
2288 <varname> <emphasis> <command> <function> <literal> <replaceable> <ulink>
2291 そのテキストの表示法を変えたいなら以下の構文グループを再定義しなければならない
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のヘルプテキストから一部借
2310 SH *sh.vim* *ft-sh-syntax* *ft-bash-syntax* *ft-ksh-syntax*
2312 これは「普通の」Unix (Bourne) sh、bashそしてKornシェルをカバーしている。
2314 Vimは様々なファイル名がどのタイプであるかを指定することによって、どのシェルが
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で定義することにより、デフォルトを設定すること
2330 let g:is_kornshell = 1
2331 < posix: (これは is_kornshell を1に設定することと同じ) >
2335 < sh: (デフォルト) Borne shell >
2338 "#! ..." という行がなく、かつユーザが上の方法でデフォルトの sh.vim の構文を設
2339 定していない場合、sh.vim は Borne シェルの構文であると仮定する。エラーレポート
2340 に RFC や市場浸透統計の引用を含める必要はありません。単に .vimrc でシステムで
2341 使われるデフォルトの sh のバージョンを選択してください。
2343 .vimrcで以下のように設定すると >
2344 let g:sh_fold_enabled= 1
2346 様々な構文要素(ヒアドキュメントと関数の中身)がsyntaxメソッドによって折り畳み可
2349 上方向にスクロールしているときにハイライトがおかしくなり、それがCTRL-Lで再描画
2350 すると直るようなら、変数"sh_minlines"の値を大きくしてみるとよい。例: >
2352 let sh_minlines = 500
2354 こうすると構文シンクロナイズが画面最上行の500行前から始まるようになる。デフォ
2355 ルトの値は200である。大きい値を設定することの欠点は、動作が遅くなるかもしれな
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 ション中に現れる型である;ユーザが自分用の型を定義しているならそれらを構文ファ
2380 - oneline_comments : この値は1から3までの間になり、#スタイルのコメントのハイラ
2383 oneline_comments = 1 : 偶数個の#の後にも通常のSpeedupコードが現れることを許す
2385 oneline_comments = 2 : 2番目の#で始まるコードをエラーとして表示する。これが
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*
2435 <syntax/tex.vim>のバージョン28以降では、構文による部分、章、節、小節などの折り
2436 畳みに対応している。それを有効にするには次の行を<.vimrc>に書き、 >
2437 let g:tex_fold_enabled=1
2438 :set fdm=syntaxとする。後者をLaTeXファイルの末尾にモードラインとして書いておく
2445 <syntax/tex.vim>の構文ハイライトはTeX, LaTeX, AmsTeXをサポートしている。normal,
2446 texZone, texMathZoneの3つの主な区間・範囲がサポートされている。これらの区間を
2447 適切に区切るようかなりの努力がされたが、$..$と$$..$$で線引きされる区間は開始・
2448 終了のパターンとまったく同じにシンクロナイズさせることは出来ない。その結果、特
2449 別な"TeX comment"が提供されている >
2451 このコメントがあると、ここで強制的にtexZoneまたはtexMathZoneのハイライトを終わ
2457 遅いコンピュータを使っているなら、これらの値を減らすとよいかもしれない >
2458 :syn sync maxlines=200
2459 :syn sync minlines=50
2460 (特に後者を)。速いコンピュータを使っているならこれらの値を増やしてもよい。これ
2461 らは第一にシンクロナイズ(つまり、画面最上行のテキストがどのグループに入るか)に
2464 *tex-morecommands* *tex-package*
2467 LaTeXはプログラミング言語であり、特殊化されたLaTeXのコマンド、構文、フォントが
2468 つまったパッケージがたくさんある。そのようなパッケージを使っている人は、標準の
2469 syntax/tex.vimにそのパッケージを対応させてほしいと思うだろう。しかしそれは明ら
2470 かに非現実的である。そこで、|mysyntaxfile-add|で使われているテクニックを使って
2471 、syntax/tex.vimで提供されているハイライトを拡張・修正してみてください。
2476 <tex.vim>は様々な種類のレキシカルエラーチェックをサポートしている。すなわち、
2477 エラーチェックはとても便利だが、実際にはエラーでない箇所もエラーと示すかもしれ
2478 ない。それが嫌なら、次の行を<.vimrc>に置くとよい: >
2480 すると<syntax/tex.vim>によるすべてのエラーチェックが行われなくなる。
2485 新しいmathグループをLaTeXに含めるには、以下のコードがその例となるだろう: >
2487 call TexNewMathZone(sfx,mathzone,starform)
2488 新しいmathグループに一意な接尾辞をつけたいと思うだろう(現在のところ、AからLま
2489 でとVからZまでは<syntax/tex.vim>自身によって取得されている)。
2490 例として、<syntax/tex.vim>でeqnarrayがどのように設定されているかを見てみよ
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に加えること。
2504 *.texファイルで"\makeatletter"を使う人がいるかもしれないので、コマンド中で"@"
2505 が使えるようになっている。しかし*.texファイルは次の拡張子: sty cls clo dtx ltx
2506 を持たないので@をエラーと判断してハイライトする。これを解決するにはこうする: >
2508 :let b:tex_stylish = 1
2511 "let g:tex_stylish=1"を<.vimrc>に書くと<syntax/tex.vim>は常にこのような@の使用
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スクリプト用の構文ハイライトの読み込み
2538 g:vimembedscript == 1 (デフォルト) <vim.vim>埋め込みスクリプト言
2539 g:vimembedscript が存在しない 語: perl, python, ruby, tclの
2542 g:vimembedscript == 0 埋め込みスクリプト言語用の構
2545 syntax/vim.vimによるエラーのハイライトは必ずしも正しいとは限らない。Vimスクリ
2546 プトは正しくハイライトするのが難しい言語である。エラーのハイライトをやめるには
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
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名前空間がデフォルトでハイライトされる。次のグローバル変数をセットするとそ
2571 :let g:xml_namespace_transparent=1
2574 xml構文ファイルを使うと、開始タグと終了タグの間を折りたたむ|folding|ことができ
2575 る(|:syn-fold|を参照)。これをオンにするには >
2577 :let g:xml_syntax_folding = 1
2578 :set foldmethod=syntax
2581 構文による折り畳みは、構文ハイライトを著しく遅くする可能性がある。特に巨大なファ
2585 X Pixmaps (XPM) *xpm.vim* *ft-xpm-syntax*
2587 xpm.vimは編集中のXPMファイルの内容から、動的に構文要素を生成する。そのため、色
2588 設定文字列などを変更したときは":set syn=xpm"などとしてxpm.vimを読み直さなけれ
2591 色つきのピクセルをコピーするには"yl"で"pixel"をヤンクし、どこかで"P"としてそれ
2594 マウスで図を描くには、次のようにしてみるとよい: >
2595 :function! GetPixel()
2596 : let c = getline(".")[col(".") - 1]
2598 : exe "noremap <LeftMouse> <LeftMouse>r".c
2599 : exe "noremap <LeftDrag> <LeftMouse>r".c
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*
2617 これはオプション'iskeyword'で定義されるキーワード文字だけからなる。他の構文
2618 要素を含むことはできない。完全な単語(マッチの前後にキーワード文字が存在しな
2619 い)にのみマッチする。キーワード"if"は"if(a=b)"にはマッチするが、"ifdef x"に
2620 はマッチしない。"("はキーワード文字でなく、"d"はキーワード文字だから。
2626 正規表現パターン"start"のマッチ位置から始まり、正規表現パターン"end"のマッ
2627 チ位置で終わる。その間にどんなテキストがあってもよい。正規表現パターン
2628 "skip"を使うとパターン"end"にマッチするのを避けることができる。
2630 複数の構文アイテムを1つの構文グループに入れることができる。構文グループにはハ
2631 イライト属性を与えることができる。例えば、"/* .. */"のコメントを定義する要素と
2632 "// .."のコメントを定義する要素を作り、両方を"Comment"グループに入れる。そして
2633 "Comment"を青のボールドフォントで表示するように指定すると、両方のタイプのコメ
2634 ントに対して同じハイライトがされるようになる。1つの構文要素に対し1つの構文グルー
2635 プを作ってもよいし、すべての要素を1つのグループに入れてもよい。これはハイライ
2636 ト属性をどう指定したいかによる。各要素をそれ自身のグループに入れるとすると、た
2637 くさんのグループに対して色を指定しなければならなくなる。
2639 構文グループとハイライトグループは似ているが異なることに注意。ハイライトグルー
2640 プに対してはハイライト属性を与えることになる。それらの属性が同名の構文グループ
2643 同じ箇所に対して複数のアイテムがマッチした場合には、最後に定義されたものが有効
2644 になる。よって同じテキストにマッチする要素を使って、以前に定義された構文アイテ
2645 ムを上書きすることができる。大文字・小文字の違いも含めてマッチするキーワードが
2646 ある場合は、そうでないものより優先される。
2649 優先順位 *:syn-priority*
2651 複数の構文アイテムがマッチするときは、以下のルールが適用される:
2653 1. 複数のマッチまたはリージョンアイテムが同じ場所で始まるときは、後に定義され
2655 2. マッチとリージョンよりキーワードが優先される。
2656 3. より前の位置から始まる要素が優先される。
2659 大文字・小文字の区別 *:syn-case* *E390*
2661 :sy[ntax] case [match | ignore]
2662 これ以降の":syntax"コマンドが大文字・小文字を区別するかどうかを定義す
2663 る。"match"を使うと区別し、"ignore"を使うと区別しなくなる。これ以前の
2664 要素には影響せず、次の":syntax case"コマンドまでのすべての要素に影響
2668 スペルチェック *:syn-spell*
2670 :sy[ntax] spell [toplevel | notoplevel | default]
2671 構文アイテムに入っていないテキストに対して、どこでスペルチェック
2674 toplevel: テキストのスペルチェックを行う。
2675 notoplevel: テキストのスペルチェックを行わない。
2676 default: クラスタ@Spellがあるときスペルチェックを行わない。
2678 構文アイテムに入っているテキストはクラスタ@Spellと@NoSpellを使う
2679 |spell-syntax|。クラスタ@Spellと@NoSpellがないときは、スペルチェックは
2680 "default"と"toplevel"に対して行われる。
2682 スペルチェックを有効化するにはオプション'spell'をオンにしなければなら
2686 キーワードの定義 *:syn-keyword*
2688 :sy[ntax] keyword {group-name} [{options}] {keyword} .. [{options}]
2692 {group-name} "Comment"のような構文グループ名。
2693 [{options}] 後述の|:syn-arguments|を参照。
2694 {keyword} .. このグループに含めるキーワードのリスト。
2697 :syntax keyword Type int long char
2699 {options}は行のどこに置いてもよい。それらは与えられたキーワード全てに
2700 適用される。オプションがキーワードの後にあっても同じ。以下の例はまった
2702 :syntax keyword Type contained int long char
2703 :syntax keyword Type int long contained char
2704 :syntax keyword Type int long char contained
2706 Vimのexコマンドのようにキーワードに短縮形があるとき、省略可能な部分を
2707 []のでくくることによって受け入れるキーワードをいっぺんに定義することが
2709 :syntax keyword vimCommand ab[breviate] n[ext]
2711 キーワードは、その文字全てがオプション'iskeyword'に含まれていないと認
2712 識されないことに注意。1文字でも含まれていないものがあると、そのキーワー
2714 マルチバイト文字を使うこともできる。マルチバイト文字は'iskeyword'に含
2717 キーワードは常にマッチやリージョンより優先される。キーワードは一要素以
2718 上マッチしたとき使われる。キーワードは入れ子にならなく、それ以外のもの
2721 オプション名と同じ単語は、それがその位置で利用できないものであったとし
2722 ても、キーワードとして定義することはできない。マッチで代用すること。
2726 containmentが異なれば、同じキーワードを複数回定義することができる。例
2727 えば、まずキーワードをcontainedでなく定義して1つのハイライトグループを
2728 設定し、次にcontainedとして定義して別のハイライトグループを設定するこ
2730 :syn keyword vimCommand tag
2731 :syn keyword vimSetting contained tag
2732 < 構文要素の外側に"tag"があったときはハイライトグループ"vimCommand"が適
2733 用される。"vimSetting"を含む構文要素の中に"tag"があったときは
2734 "vimSetting"グループが適用される。
2739 :sy[ntax] match {group-name} [{options}] [excludenl] {pattern} [{options}]
2743 {group-name} "Comment"のような構文グループ名。
2744 [{options}] 後述の|:syn-arguments|を参照。
2745 [excludenl] 行末の"$"を含んでいるパターンに対して、行末以
2746 降までマッチやリージョンを拡張しないようにす
2747 る。パターンの前に置かなければならない。
2749 {pattern} マッチを定義する検索パターン。|:syn-pattern|を
2751 パターンは複数行にもマッチする。よって検
2752 索を開始する場所によってマッチが変わってくる可
2753 能性がある。シンクロナイズが関係してくることに
2757 :syntax match Character /'.'/hs=s+1,he=e-1
2760 リージョンの定義 *:syn-region* *:syn-start* *:syn-skip* *:syn-end*
2763 :sy[ntax] region {group-name} [{options}]
2764 [matchgroup={group-name}]
2768 start={start_pattern} ..
2769 [skip={skip_pattern}]
2770 end={end_pattern} ..
2773 リージョンを定義する。複数行にわたってもよい。
2775 {group-name} "Comment"のような構文グループ名。
2776 [{options}] 後述の|:syn-arguments|を参照。
2777 [matchgroup={group-name}] 以下の開始パターンと終了パターンのマッチに
2778 のみ使われる構文グループ。マッチの開始パターン
2779 と終了パターンには使われない。開始パターンと終
2780 了パターン用に異なるグループを使わないようにリ
2782 |:syn-matchgroup|を参照。
2783 keepend 内包されたマッチが終了パターンを越えないように
2786 extend このリージョンを含むアイテムの"keepend"を上書
2787 きする。|:syn-extend|を参照。
2788 excludenl 行末の"$"を含んでいるパターンに対して、行末以
2789 降までマッチやアイテムを拡張しないようにする。
2790 終了パターンに対してのみ使い道がある。適用する
2793 start={start_pattern} リージョンの開始を定義する検索パターン。後述の
2795 skip={skip_pattern} その中ではリージョンの終了を探さないテキストを
2796 定義する検索パターン。|:syn-pattern|を参照。
2797 end={end_pattern} リージョンの終了を定義する検索パターン。
2798 後述の|:syn-pattern|を参照。
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パターンのマッチを回避しない。問題を避けるには
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 繰り返しにマッチする(最小限の個数の繰り返し)。
2834 デフォルトでは内包されたマッチはendパターンのマッチを隠す。これはネス
2835 ト用に便利である。例えば、"{"で始まり"}"で終わるリージョンがもう1つの
2836 リージョンを含むことができる。"}"に出会うと内包されたリージョンが終わ
2842 この挙動が望みでないなら、引数"keepend"をつければ、外側のリージョンの
2843 endパターンのマッチによって内包されたアイテムも終了させることができる。
2844 そうすると同一リージョンのネストが不可能になるが、内包されたアイテムで
2845 endパターンをスキップさせることなく、endパターンの一部をハイライトする
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 たところで終了し、内包されたマッチもすべてそこで終了になる。
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アイテムを拡
2872 :syn region xmlFold start="<a>" end="</a>" fold transparent keepend extend
2873 < "</a>"を別の色でハイライトしたいときなどのために、"keepend"つきでリー
2874 ジョンを定義し、内包するアイテムによって終端が変更されないようにしてい
2875 る。ただしxmlFoldがネストしたとき(それ自身を含んだとき)、"extend"が適
2876 用され、内側の"</a>"はそのリージョン自身だけを終了させ、それを含んでい
2880 マッチ用のパターンやリージョンの終了パターンが行末にマッチさせるために
2881 '$'を含んでいると、それを含むリージョンアイテムが次の行まで継続するよ
2882 うになる。例えば、"\\$"(行末のバックスラッシュ)とのマッチを使うと、通
2883 常は行末で終了するはずのリージョンを継続させることができる。これはデフ
2884 ォルトの挙動である。これが望みどおりでないなら、これをされる2つの方法
2886 1. 外側のアイテムに"keepend"を使う。こうすると含んでいるアイテム全てに
2887 対して拡張しないようにする。含んでいるアイテム全てが外側のアイテム
2889 2. 内側のアイテムに"excludenl"を使う。こうするとそのマッチに対して、そ
2890 れを含んでいるマッチやリージョンを拡張しないようにする。これはいく
2891 つかのアイテムだけが外側のアイテムを拡張してはならないときに使える。
2892 "excludenl"はそれを適用するパターンの前に置かねばならない。
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"でハイライトされる開始・終了パターン
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 ここでは共通のものを説明する。引数はどんな順序でもよく、パターンと混ざっていて
2924 全てのコマンドが全ての引数を受けいれるわけではない。次の表はどの引数がどのコマ
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つのコマンド全てに対して使える:
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 - アイテムが、行を越えて継続したり、そのコンテナを次行まで継続させる効果を持つ
2961 - それを含むどんなアイテムのサイズも変更しない。Cの例: プリプロセッサマッチ中
2962 の"\\$"とのマッチは"display"を含んではならない。なぜならこれによってプリプロ
2963 セッサマッチが短くなるかもしれないからである。
2964 - 他のアイテムがマッチすることを許さず、そうでなければマッチせず、加えてマッチ
2966 Cの例: "//"コメント用のマッチは"display"を使ってはならない。なぜならそのコメ
2967 ントの内側の"/*"がマッチするかも知れず、そうなると行末をまたぐコメントが始ま
2970 例としてC言語では次のとき"display"が使える:
2975 transparent *:syn-transparent*
2977 引数"transparent"が与えられると、そのアイテムはそれ自身ではハイライトされず、
2978 それを含むアイテムのハイライトを引き継ぐ。これはハイライトはせず、テキストの一
2979 部をスキップするためだけに使われる構文アイテムに対して有効である。
2981 transparentなアイテム自身に引数"contains"が与えられていない場合、それを含むア
2982 イテムから引数"contains="も受け継がれる。望まないアイテムが含まれるのを避ける
2983 には"contains=NONE"とすること。文字列中の単語をハイライトするが、"vim"だけは
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"を上書きし
2999 色づけされたテキストは、内包されたアイテムの層のようにみなすことができる。内包
3000 されたアイテムは内包しているアイテムより上にあり、そのため内包されたアイテムを
3001 見ることができる。内包されたアイテムがtransparentな場合、それを透過して見るこ
3002 とができ、よってそれを含んでいるアイテムが見える。図にすると:
3009 xxxx yyy さらに内包されたアイテム達
3010 .................... 内包されたアイテム (transparent)
3011 ============================= 最初のアイテム (最も外側のアイテム)
3013 'x', 'y', '='はハイライトされた構文アイテムを表す。'.'はtransparentなグループ
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パターンを使ってもこの規則を変えるこ
3039 引数"fold"はこのアイテムに対して折り畳みレベルを1増加させる。例: >
3040 :syn region myFold start="{" end="}" transparent fold
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 合は、そのアイテムはどんなグループも内包しない。ここで使うグループ名は、必ずし
3062 containsリストが"ALL"だけのとき、全てのグループがこのアイテム
3065 contains=ALLBUT,{group-name},..
3067 containsリストの最初の要素が"ALLBUT"のとき、{group-name}で列挙
3068 したグループを除く全てのグループがこのアイテムの内側で許可され
3070 :syntax region Block start="{" end="}" ... contains=ALLBUT,Function
3073 containsリストの最初の要素が"TOP"のとき、引数"contained"を持た
3075 contains=TOP,{group-name},..
3076 "TOP"と同様だが、{group-name}に列挙したグループは除かれる。
3079 containsリストの最初の要素が"CONTAINED"のとき、引数
3080 "contained"を持つグループ全てが許可される。
3081 contains=CONTAINED,{group-name},..
3082 "CONTAINED"と同様だが、{group-name}に列挙したグループは除かれ
3086 "contains"リスト内の{group-name}はパターンであってもよい。そのパターンにマッチ
3087 するグループ名全てが含まれる("ALLBUT"が使われたときはそれが除かれる)。パターン
3088 はホワイトスペースや','を含んではならない。例: >
3089 ... contains=Comment.*,Keyw[0-3]
3090 パターンの照合はそのsyntaxコマンドが実行されたときに行われる。それ以降に定義さ
3091 れたグループは照合されない。また、現在のsyntaxコマンドが新しいグループを定義し
3092 ている場合、そのグループは照合されない。ファイル内にsyntaxコマンドを書く場合、
3093 定義されていないグループを当てにすることはできないことに注意。これは、そのファ
3094 イルは以前に読み込まれているかもしれず、":syn clear"はグループ名を削除しないた
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
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 スペースとタブ文字をスキップする
3156 skipempty 空行をスキップする(自動的に"skipnl"も含むことになる)
3158 例えば"skilwhite"を指定した場合、次のどのグループもホワイトスペースにマッチし
3159 ないならば、ホワイトスペースをスキップする。
3161 "skipnl"を指定すると、nextgroupの照合が次の行からも探される。これは現在のアイ
3162 テムが行末で終わったときのみ有効である。"skipnl"を指定しない場合、nextgroupは
3163 同一行のそのアイテム以降から照合される。
3165 次のグループまでスキップされたテキストの中では他のグループの照合は無視される。
3166 次のグループの照合が見つからなかったとき、再び他のグループの照合が検索される。
3167 つまり、次のグループの照合と、ホワイトスペースと<EOL>のスキップは他のアイテム
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 パターンがダブルクォートを含んでいる場合は、そのパターンが含んでいない他の文字
3186 :syntax region Comment start="/\*" end="\*/"
3187 :syntax region String start=+"+ end=+"+ skip=+\\"+
3189 パターンの説明については|pattern|を参照。構文パターンは常に'magic'オプションが
3190 セットされているのと同じように解釈される(実際の'magic'オプションの値とは無関係)
3191 。また、'cpoptions'に'l' フラグが含まれていない場合と同じように解釈される。こ
3192 れは構文ファイルの可搬性を高め、'compatible'と'magic'の設定と無関係にするため
3195 "[a-z]*"など空文字列にマッチするパターンは避けること。これは全ての位置にマッチ
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"を過ぎた後のオフセット
3219 s+{nr} パターンのマッチ部分の先頭から右へ{nr}文字目
3220 s-{nr} パターンのマッチ部分の先頭から左へ{nr}文字目
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
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 ^^^^^^^^^^^^^^^^^^^ ここがハイライトされる
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
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 "_\+"
3281 ^^^ ^^^ Underlineにマッチする
3282 ^ ^ ZNoBackslashにマッチする
3283 ^^^^ WNoBackslashにマッチする
3285 "ms"を指定しないと自動的に"lc"と同じ値にセットされる。
3288 Multi-line patterns *:syn-multi-line*
3290 パターンが"\n"を含むと改行にマッチするようになる。たいていの場合これは期待通り
3293 startパターンにオフセットをつけるとき、マッチ部分の開始位置が次の行の先頭であ
3294 ってはならない。ハイライトは次の行で始まってもよい。
3296 skipパターンも"\n"を含んでよい。ただし次の行の最初の文字がskipパターンにマッチ
3297 していても、そこからendパターンの検索が続けられる。これは、再描画は領域内のど
3298 の行でも始まることができ、skipパターンが前の行から始まったかどうかはチェックさ
3299 れないからである。例えば、skipパターンが"a\nb"で、endパターンが"b"のとき、次の
3300 テキストの2行目でendパターンがマッチする。 >
3303 つまり、skipパターンは"\n"以降の文字にはマッチしないことになる。
3306 外部マッチ *:syn-ext-match*
3308 リージョンのパターンでは特別に以下の正規表現が使える:
3310 */\z(* */\z(\)* *E50* *E52*
3311 \z(\) 一部を「external」としてマークする。これをつけると他のパターン
3312 からアクセスできるようになる。現在はリージョンのstartパターン
3315 */\z1* */\z2* */\z3* */\z4* */\z5*
3316 \z1 ... \z9 */\z6* */\z7* */\z8* */\z9* *E66* *E67*
3317 startパターンにマッチしたテキスト中からマークしておいた部分を
3320 リージョンのstartとendパターンで正規表現の一部を共有したい場合がある。
3321 一般的な例としてはPerlやUnixシェルのヒアドキュメントがある。これは特別な正規表
3322 現アイテム"\z"を使えば達成できる。これは正規表現の一部を"external"としてマーク
3323 しておく。するとその部分を他のパターンから参照できるようになる。例えば、ヒアド
3325 :syn region hereDoc start="<<\z(\I\i*\)" end="^\z1$"
3327 このように、\zは2つの役割を果たす。startパターンにおいては正規表現の一部
3328 "\(\I\i*\)"をexternalとしてマークする。endパターンでは\1によってstartパターン
3329 中の最初のマークされた部分への外部参照とする。外部参照はskipパターン中でも使え
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(...\)\)"のようにネストさせれば
3340 一行内でマッチした部分しか参照できないことに注意。複数行にわたってマッチした部
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}..
3357 remove={group-name}..
3358 指定したグループをクラスタからとり除く。
3360 定義したクラスタはcontains=..やnextgroup=..、add=..、remove=..などの文脈で使う
3361 ことができる。そのとき、クラスタ名の頭に"@"をつける。クラスタを定義する前にそ
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内でマ
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|コマンドを使えばよい: >
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 インクルードされるファイル中のトップレベルの構文アイテム全てに対して
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} | ...]
3429 1. 常にファイルの最初からパースする。
3431 2. Cスタイルのコメントに基づく。VimはCコメントの仕様を理解し、現在行がコメント
3432 の内側から始まっているか外側から始まっているかを判定することができる。
3434 3. 一定行さかのぼり、そこからパースを開始する。
3436 4. テキストをさかのぼり、シンクロナイズを始める目印の正規表現を検索する。
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 変更を施すと、それ以降の一部をパースし直さなければならなくなる(最悪の場合はファ
3470 "fromstart"を使うことは"minlines"を非常に大きな値にすることと同じ効果を持つ。
3473 第二の方法: *:syn-sync-second* *:syn-sync-ccomment*
3475 第二の方法を使うには、単に引数"ccomment"をつければよい。
3477 :syntax sync ccomment
3479 画面最上行がCスタイルコメントの内側にあると判断される場合、グループ名が
3480 "Comment"のリージョン構文アイテムが使われる。この方法を使うには"Comment"という
3481 グループ名のリージョンがなければならないことに注意。他のグループ名を指定するこ
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}行余分にパースされることを意味する。その
3504 :syntax sync minlines=50
3506 "lines"は"minlines"と同じ意味である(古いバージョンで使われている)。
3508 第四の方法: *:syn-sync-fourth*
3510 第四の方法は、シンクロナイズパターンと呼ばれる特定のリージョンの末尾でシンクロ
3511 ナイズするものである。行をまたげるのはリージョンだけなので、リージョンの末尾に
3512 出会ったら、どの構文アイテムの中にいるのかを知ることができる。再描画が始まる行
3513 のすぐ上から検索を開始し、ファイルの上方に向かって検索する。
3515 これはシンクロナイズしない構文アイテムとちょうど同じように機能する。内包された
3516 マッチ、nextgroupなどを使うことができる。ただし少しだけ違いがある。
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 なければならない。行をまたぐリージョンが他のリージョンを含んではならない場
3537 2. ハイライトのためのパースはマッチの直後から継続される。マッチの直後に現れる
3538 と期待される構文グループを指定しなければならない。
3539 これは前の方法がうまくいかないときに使われる。より多くのテキストをパースす
3543 シンクロナイズパターンだけでなく、他のマッチとリージョンを指定して望まないマッ
3546 [シンクロナイズパターンが別々に与えられる理由は、シンクロナイズポイントの検索
3547 はたいていの場合、ハイライトするところを判別するよりずっと単純だからである。パ
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 ならない。最初に定義されたリージョンが使われる。マッチの後に構文グルー
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 "*/"があるかもしれないので、もう少し込み入っている。これは読者の練習問
3572 :syntax sync match ..
3573 :syntax sync region ..
3575 引数"groupthere"なしの場合。シンクロナイズポイントの検索の際にスキップ
3579 :syntax sync linecont {pattern}
3581 {pattern}とのマッチが次の行にも継続されるとみなされる。つまりシンクロ
3582 ナイズポイントの検索の際、行は連結されているものと見なされる。
3584 引数"maxlines={N}"が同時に与えられると、マッチを検索する行がN行に制限される。
3585 これは遅いマシンを使っていて、シンクロナイズするものが少ないとわかっているとき
3587 :syntax sync maxlines=100
3589 全てのシンクロナイズの設定をクリアするには: >
3592 あるシンクロナイズパターンをクリアするには: >
3593 :syntax sync clear {sync-group-name} ..
3595 ==============================================================================
3596 11. 構文アイテムのリストを表示する *:syntax* *:sy* *:syn* *:syn-list*
3598 次のコマンドは全ての構文アイテムのリストを表示する: >
3602 ある構文グループに属する構文アイテムを表示するには: >
3604 :sy[ntax] list {group-name}
3606 あるクラスタに属する構文グループを表示するには: *E392*
3608 :sy[ntax] list @{cluster-name}
3610 ":syntax"コマンドに対する他の引数については上を参照。
3612 ":syntax"コマンドは":sy"とも略記できる。しかし":syn"の方が見栄えがよいため、普
3615 ==============================================================================
3616 12. ハイライトコマンド *:highlight* *:hi* *E28* *E411* *E415*
3618 ハイライトグループには3つのタイプがある:
3619 - 特定の構文言語用のもの。名前がその言語の名前で始まる。このタイプのほとんど
3620 は属性を持たず、2番目のタイプのグループにリンクされる。
3621 - 全ての構文言語に対して使われるもの。
3622 - 'highlight'オプションに使われるもの。
3624 現在有効な全てのグループを知るにはこのコマンドを使う: >
3625 :so $VIMRUNTIME/syntax/hitest.vim
3626 このコマンドは新しいウィンドウを開き、そこに全てのハイライトグループ名を、それ
3629 *:colo* *:colorscheme* *E185*
3630 :colo[rscheme] {name} カラースキーム{name}を読み込む。これは'runtimepath'中
3631 から"colors/{name}.vim"というファイルを検索する。最初
3633 現在使われているカラースキームの名前を見るには: >
3635 < 再帰的な読み込みはされない。つまりカラースキームスクリ
3636 プト中で":colorscheme"を使うことはできない。
3637 カラースキームが読み込まれた後、自動コマンドイベント
3638 |ColorScheme|が発生する。カラースキームファイルを書く
3640 :edit $VIMRUNTIME/colors/README.txt
3642 :hi[ghlight] 属性がセットされたハイライトグループを全て表示する。
3644 :hi[ghlight] {group-name}
3647 :hi[ghlight] clear 全てのハイライトをデフォルトに戻す。ユーザによって加え
3648 られたグループに対するハイライトが全て消去される。
3649 現在の'background'の値によってデフォルトの色が決まる。
3651 :hi[ghlight] clear {group-name}
3652 :hi[ghlight] {group-name} NONE
3653 1つのハイライトグループに対するハイライトを無効にする。
3656 :hi[ghlight] [default] {group-name} {key}={arg} ..
3657 ハイライトグループを追加する、または既存のグループに対
3659 引数{key}={arg}については|highlight-args|を参照。
3660 オプショナルな引数[default]については
3661 |:highlight-default|を参照。
3663 通常、ハイライトグループは起動時に一度だけ追加される。そこでハイライトのデフォ
3664 ルト値をセットする。その後、ハイライトコマンドを使うことによってデフォルトでな
3665 い値に変えることができる。値"NONE"を使うとその値をオフにしたりデフォルト値に戻
3668 色を変える簡単な方法は|:colorscheme|コマンドを使うことである。すると、次のよう
3669 な":highlight"コマンドが書かれたファイルが読み込まれる: >
3671 :hi Comment gui=bold
3673 このファイルに含まれない設定は変更されないままである。指定されたフィールドだけ
3674 が更新され、それ以前の設定とマージされる。なのでその結果は次のコマンド1つを実
3676 :hi Comment term=bold ctermfg=Cyan guifg=#80a0ff gui=bold
3678 *:highlight-verbose*
3679 'verbose'を0でない値にしてハイライトグループの一覧を表示すると、最後に設定され
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エントリ
3695 ハイライトはこれらのタイプごとに指定できる。そうすることによって、同じ構文ファ
3696 イルを全てのターミナルに対して使用でき、ターミナルごとに最善のハイライトを利用
3699 1. highlightコマンドの引数(通常のターミナル用)
3701 *bold* *underline* *undercurl*
3702 *inverse* *italic* *standout*
3703 term={attr-list} *attr-list* *highlight-term* *E418*
3704 attr-listはカンマ区切りのリスト(スペースは入れない)で、要素は以下の通
3708 undercurl 必ずしも使用できるとは限らない
3713 NONE 属性を使用しない(属性をリセットするために使う)
3715 この引数で"bold"を指定してもよいし、太文字のフォントを指定してもよい。
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 これらのターミナルコードのリストを使ってターミナルについての標準的でな
3726 引数"start"でエスケープシーケンスを指定すると、ハイライトするテキスト
3727 の前にそれが書き込まれる。そのテキストをハイライトする際にターミナルに
3728 送りたいものをなんでも指定できる。引数"stop"でエスケープシーケンスを指
3729 定すると、強調されるテキストの後にそれが書き込まれる。"start"で行った
3730 ことを"stop"で元に戻すべきである。そうしないとスクリーンがごちゃごちゃ
3733 {term-list}は2つの形を持つ:
3735 1. エスケープシーケンス付きの文字列。
3736 これは"t_"で始まるものと空文字列を除く任意の文字列である。"<Esc>"や
3737 "<Space>"のような<>記法が利用できる。例:
3738 start=<Esc>[27h;<Esc>[<Space>r;
3741 ターミナルコードは"t_xx"の形を持つ。"xx"はtermcapエントリ名である。
3742 ターミナルコードはカンマで区切る。ホワイトスペースは使えない。例:
3744 対応するターミナルコードが存在しなければならない。
3746 2. highlightコマンドの引数(カラーターミナル用)
3748 cterm={attr-list} *highlight-cterm*
3749 {attr-list}の説明は上を参照|attr-list|。
3750 色を使う場合、引数"cterm"は"term"と異なる結果になる。例えば、通常のタ
3751 ーミナルではコメントにアンダーラインを引き、カラーターミナルではコメン
3753 注意:DOSコンソールなど多くのターミナルでは色づけの際にこれらの属性を混
3754 在させることはできない。"cterm="か"ctermfg="が"ctermbg="のどれか1つだ
3757 ctermfg={color-nr} *highlight-ctermfg* *E421*
3758 ctermbg={color-nr} *highlight-ctermbg*
3759 引数{color-nr}で色番号を指定する。色番号の範囲は0からtermcapエントリ
3761 この色番号で実際に表示される色はターミナルの種類とその設定に依存する。
3762 "cterm"の設定によって色が変わる場合もある。例えば、あるシステムでは
3763 "cterm=bold ctermfg=3"でそのまま3番の色を表示し、他のシステムでは異な
3766 xtermにおいてはこれはユーザのリソースに依存し、やや予測ができない。デ
3767 フォルトについてはxtermのドキュメントを参照のこと。カラーxterm用の色は
3768 .Xdefaultsファイルで変更することができる。このため、ユーザごとに表示さ
3769 れる色が異なるかもしれない。カラーxtermについては|xterm-color|を参照。
3771 コンソールウィンドウ内のMSDOS標準色は固定されている。そのため、これら
3772 の色を名前に使っている。一方、X11の色名の意味は固定されている。そこで
3773 ハイライトの設定に可搬性を持たせるため、X11の色設定が使われている(複雑
3774 であるが)。以下の色名を、色番号の代わりに使うことができる:
3777 NR-16 NR-8 COLOR NAME ~
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
3791 13 5* Magenta, LightMagenta
3792 14 3* Yellow, LightYellow
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="の後に書くこと。または
3804 16色ansiスタイルターミナル(xtermを含む)ではNR-8の列の番号が使われ
3805 ることに注意。ここで'*'は'add 8'という意味になる。つまりBlueが12
3808 カラーターミナルによっては、色名を使うと間違った色で表示される場合
3812 Normalグループに対して"ctermfg"や"ctermbg"を設定すると、これらはハイラ
3815 :highlight Normal ctermfg=grey ctermbg=darkblue
3816 < Normalグループに対して"ctermbg"を設定すると、オプション'background'が
3817 自動的に調整される。これによって'background'に依存するハイライトグルー
3818 プが変更される。そのため、まずNormalに対する色を設定し、それから他の色
3820 カラースキーム使用時に'background'を変更するとカラースキームが再読み込
3821 みされる。そしてNormalを含む全ての色がリセットされる。これが嫌なら最初
3822 に変数"colors_name"を削除すること。
3824 Normalグループの"ctermfg"や"ctermbg"を変更した場合、Vim終了時にその色
3825 をリセットする必要がある。これはtermcapエントリ"op"|t_op|を使ってなさ
3826 れる。リセットがうまくいかない場合は.vimrc中で't_op'を設定してみること。
3828 Vimが通常の文字色と背景色を知っている場合、色名として"fg"と"bg"を使用
3829 できる。これはNormalグループの色とMS-DOSコンソールの色を設定しないと使
3831 :highlight Visual ctermfg=bg ctermbg=fg
3832 < このコマンドを実行した時点で有効な色が使われることに注意。この後で
3833 Normalグループを変更しても"fg"と"bg"は調整されない。
3836 3. highlightコマンドの引数(GUI用)
3838 gui={attr-list} *highlight-gui*
3839 これらはGUIモードで使われる属性を設定する。
3841 ここで"bold"を設定しても太字のフォントを使ってもよい。どちらも同じ効果
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'が変更されるまでは; 最後に設定したものが使わ
3854 以下のものはMotifとAthena上でのみ動作し、他のGUI上では利用できない:
3855 "Menu"グループに対してフォントを設定すると、メニューが変更される。
3856 "Tooltip"グループに対してフォントを設定するt、ツールチップが変更され
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で
3869 background 通常の背景色を使う
3871 foreground 通常の文字色を使う
3872 埋め込みスペースや他の特別な文字に対して色名を使うには、色名をシングル
3873 クォートでくくる。それゆえシングルクォートを使うことはできない。
3875 :hi comment guifg='salmon pink'
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
3887 Orange Purple Violet
3889 Win32 GUIバージョンでは他にもシステムカラーが利用できる。
3892 RGB値によって色を指定することもできる。
3893 フォーマットは"#rrggbb"、ここで
3897 これらの値は16進であり、範囲は"00"から"ff"。例: >
3898 :highlight Comment guifg=#11f0c3 guibg=#ff00ff
3900 *highlight-groups* *highlight-default*
3901 以下はデフォルトのハイライトグループである。これらのグループはデフォルトでオプ
3902 ション'highlight'によって使われる。ただしハイライトは'background'の値に依存す
3903 ることに注意。":highlight"コマンドで現在の設定を知ることができる。
3907 CursorIM Cursorと同じだが、IMEモードにいるとき使われる|CursorIM|。
3909 CursorColumn 'cursorcolumn'がオンになっているときのカーソルがある画面上の桁
3911 CursorLine 'cursorline'がオンになっているときのカーソルがある画面上の行
3913 Directory ディレクトリ名(とリストにある特別な名前)
3915 DiffAdd diffモード: 追加された行 |diff.txt|
3917 DiffChange diff モード: 変更された行 |diff.txt|
3919 DiffDelete diff モード: 削除された行 |diff.txt|
3921 DiffText diff モード: 変更された行中の変更されたテキスト |diff.txt|
3923 ErrorMsg コマンドラインに現れるエラーメッセージ
3925 VertSplit 垂直分割したウィンドウの区切りとなる桁
3929 FoldColumn 'foldcolumn'
3931 SignColumn 目印|signs|が表示される行。
3933 IncSearch 'incsearch'のハイライト; ":s///c"で置換されたテキストにも使わ
3936 LineNr ":number"と":#"コマンドの行番号。オプション'number'がセットさ
3939 MatchParen カーソル下の文字、または直後の文字が括弧であるとき、その文字と
3940 対応する括弧に使われる。|pi_paren.txt|
3943 ModeMsg 'showmode'のメッセージ (例. "-- INSERT --")
3945 MoreMsg |more-prompt|
3947 NonText ウィンドウの端の'~'と'@'、'showbreak'で設定された文字など、実
3948 際のテキストには存在しない文字(例. 全角文字が行末に収まらない
3953 Pmenu ポップアップメニュー: 通常の項目。
3955 PmenuSel ポップアップメニュー: 選択されている項目。
3957 PmenuSbar ポップアップメニュー: スクロールバー。
3959 PmenuThumb ポップアップメニュー: スクロールバーのつまみ部分。
3961 Question ヒットエンタープロンプト|hit-enter|とyes/noクエスチョン
3963 Search 最後に検索した語のハイライト('hlsearch')を参照。
3964 quickfixウィンドウ内の現在行のハイライトや、それに類するものに
3967 SpecialKey ":map"でリストされるメタキーと特別なキー。テキスト中の
3968 unprintableな文字を表示するのにも使われる。
3969 一般に: 実際とは異なる文字で表示されるテキスト
3971 SpellBad スペルチェッカに認識されない単語。|spell|
3972 これは他のハイライトと同時に組み合わせられる。
3974 SpellCap 大文字で始まるべき単語。 |spell|
3975 これは他のハイライトと同時に組み合わせられる。
3977 SpellLocal スペルチェッカによって他の地域で使われると判断される単語。
3978 |spell|これは他のハイライトと同時に組み合わせられる。
3980 SpellRare スペルチェッカによってまず使わないと判断される単語。|spell|
3981 これは他のハイライトと同時に組み合わせられる。
3983 StatusLine カレントウィンドウのステータスライン
3985 StatusLineNC 非カレントウィンドウのステータスライン。
3986 Note: これが"StatusLine"に等しい場合、カレントウィンドウのステー
3989 TabLine タブページの行の、アクティブでないタブページのラベル
3991 TabLineFill タブページの行の、ラベルがない部分
3993 TabLineSel タブページの行の、アクティブなタブページのラベル
3995 Title ":set all"、":autocmd"などによる出力のタイトル。
3999 VisualNOS vimが"Not Owning the Selection"のときのビジュアルモード選択。
4000 これをサポートしているのはX11GUI|gui-x11|と|xterm-clipboard|の
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つだけが効果を持つ。
4016 Menu メニューのフォント、文字、背景。ツールバーにも使われる。
4017 使用可能なhighlightの引数: font, guibg, guifg.
4019 NOTE: MotifとAthenaでは'guifontset'が空かどうかに関わらず、常
4020 に引数fontで実際のフォントセットを指定する。そしてそれが現在の
4021 |:language|に結び付けられる。
4024 Scrollbar メインウィンドウのスクロールバーの文字と背景。
4025 使用可能なhighlightの引数: guibg, guifg.
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 つの強調グループにリンクを作り、リンク先に対して色属性を与えると簡単である。
4043 :hi[ghlight][!] [default] link {from-group} {to-group}
4047 :hi[ghlight][!] [default] link {from-group} NONE
4050 - {from-group}か{to-group}のどちらかが存在しない場合、リンクは作成されない。こ
4052 - リンクされたグループに対して":highlight"を使うと、即座にリンクが削除される。
4053 - 既に{from-group}にハイライト設定がされている場合、'!'をつけないとリンクは作
4054 成されない。sourceされたファイル中の":highlight link"コマンドに関して、エラー
4055 メッセージは表示されない。そのため既に設定を持つグループに対するリンクがスキッ
4058 *:hi-default* *:highlight-default*
4059 引数[default]によってグループに対するデフォルトのハイライトを設定することがで
4060 きる。そのグループに対して既にハイライトが指定されている場合、このコマンドは無
4061 視される。既にリンクが存在する場合も同様。
4063 [default]は特定の構文ファイルのハイライトを上書きするのに特に便利である。例え
4064 ばC構文ファイルは次の行を含んでいる: >
4065 :highlight default link cComment Comment
4066 Cコメントに対してQuestionのハイライトをつけたい場合、これをvimrcファイルに加え
4068 :highlight link cComment Question
4069 もしC構文ファイル中の"default"がないと、構文ファイルが読み込まれた時点でハイラ
4071 訳注: "default" がないと、.vimrc に書いた設定が、後に読み込まれる
4072 訳注: C構文ファイルによって上書きされてしまうということ。
4074 ==============================================================================
4075 14. 構文の消去 *:syn-clear* *E391*
4077 カレントバッファに対する構文設定を消去したいときはこのコマンドを使う: >
4080 このコマンドは、構文ハイライトをオフにしたいときや他の構文を適用したいときに使
4081 う。通常、これを構文ファイル内で行う必要はない。なぜなら、構文ファイルを読み込
4082 む自動コマンドによって構文がクリアされる。
4083 また、このコマンドは変数"b:current_syntax"を削除する。このコマンドの実行後には
4086 全てのバッファに対して構文ハイライトを無効にしたいときは、構文ファイルを読み込
4087 む自動コマンドを削除する必要がある: >
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 色を変えたため、色がごちゃごちゃになってしまったときは、次のコマンドを使うとデ
4109 これはオプション'highlight'に対する色は変更しない。
4111 ユーザのvimrcファイル中で設定した構文色もVimのデフォルト値に戻ることに注意。
4112 カラースキームを使っている場合、カラースキームによって定義された色は失われるこ
4115 このコマンドが実際に行うことは次と同じ: >
4117 let g:syntax_cmd = "reset"
4118 runtime! syntax/syncolor.vim
4120 ここでオプション'runtimepath'が使われていることに注意。
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
4133 highlight comment ctermfg=green guifg=green
4136 カラースキームを使用すると、ユーザ定義の色が使われるのか、それともカラースキー
4137 ムで定義された色が使われるのかわからなくなる場合がある。これはカラースキーム
4138 ファイルに依存する。|:colorscheme|を参照。
4141 このsyncolor.vimが"syntax on"を実行しないこと、また、オプション'background'を
4142 設定したりコマンド"colorscheme"を実行しないように注意すること。もしこれらを実
4146 syntax/syncolor.vimファイルが読み込まれると、変数"syntax_cmd"に次の3つの値のど
4148 "on" ":syntax on" コマンド。ハイライト色が上書きされるがリンクはそ
4150 "enable" ":syntax enable" コマンド。まだハイライトが定義されていないグ
4151 ループに対して色を定義するだけ。":syntax default"を使うこと。
4152 "reset" ":syntax reset" コマンドまたはカラースキームを読み込む。全ての
4154 "skip" 色を定義しない。'runtimepath'で前にあるsyncolor.vimファイルが
4155 既にデフォルト設定をセットしているとき、そのデフォルト設定をス
4158 ==============================================================================
4159 15. 関数名などのハイライト *tag-highlight*
4161 ファイル中の全てのタグ(関数名など)をハイライトするには、次のマッピングを使うと
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ファイルが大きくなるほどこの操作は遅くなり、消費するメモリ量も多
4173 typedef、union、structだけをハイライトすることもできる。そのためにはExuberant ctags
4174 (http://ctags.sf.netで入手可能)が必要である。
4176 以下をあなたのMakefileに加える:
4178 # 型用のハイライトファイルを作成する。Exuberant ctagsとawkが必要
4181 ctags --c-kinds=gstu -o- *.[ch] |\
4182 awk 'BEGIN{printf("syntax keyword Type\t")}\
4183 {printf("%s ", $$1)}END{print ""}' > $@
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")
4201 : set t_Sf=<Esc>[3%p1%dm
4202 : set t_Sb=<Esc>[4%p1%dm
4205 : set t_Sf=<Esc>[3%dm
4206 : set t_Sb=<Esc>[4%dm
4209 < [<Esc>はエスケープ文字そのもの。CTRL-V <Esc>とタイプして入力する]
4211 最初の"if"を自分のターミナル名にマッチするように変更する必要があるかもしれない
4212 例: "xterm"でなく"dtterm"。
4214 Note: これらの設定は":syntax on"の前に行うこと。そうでないと色がおかしくなって
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
4223 色設定をテストするためのファイルがVimディストリビューションに入っている。これ
4225 :runtime syntax/colortest.vim
4227 xtermのあるバージョン(とlinuxコンソールのようなターミナル)は、たとえ色数が8に
4228 定義されていても、より明るい文字色を出力することができる。そのため't_Co'が8の
4229 とき、Vimは明るい文字色に対して"cterm=bold"属性をセットする。
4232 16色以上を使うにはxtermの最新バージョンを入手すること(XFree86 3.3以降に含まれ
4233 ているはずである)。また、以下の場所でも最新バージョンを入手できる: >
4234 http://invisible-island.net/xterm/xterm.html
4235 次にそれをconfigureするよい方法を示す。これは88色を使い、termcap-query機能を有
4236 効化する。これによってVimがxtermに何色をサポートしているか問い合わせることがで
4238 ./configure --disable-bold-color --enable-88-color --enable-tcap-query
4239 もし8色しか使えなかったらxtermのコンパイル設定を確認すること。
4240 (このxtermをUTF-8エンコーディングで使う場合には|UTF8-xterm|も参照)。
4242 以下を.vimrcに加えるとこのxtermで動くはずである(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
4249 : set t_Sf=<Esc>[3%dm
4250 : set t_Sb=<Esc>[4%dm
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"にセットし、うまくい
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以上を使い(入手場所は上を参照)、以下のリソースを設定す
4295 XTerm*cursorBlink: on
4296 XTerm*cursorOnTime: 400
4297 XTerm*cursorOffTime: 250
4298 XTerm*cursorColor: White
4301 次の設定はhptermで(大体)うまく機能する。文字色は8色だけサポートしている: >
4304 : set t_Sf=<Esc>[&v%p1%dS
4305 : set t_Sb=<Esc>[&v7S
4308 : set t_Sf=<Esc>[&v%dS
4309 : set t_Sb=<Esc>[&v7S
4311 < [<Esc>はエスケープ文字そのもの。CTRL-V <Esc>とタイプして入力する]
4313 *Eterm* *enlightened-terminal*
4314 次の設定がEnlightenedターミナルエミュレータまたはEtermで機能すると報告されてい
4315 る。また、明るい色を表示するのにbold属性を使うxtermライクターミナル全てで機能
4316 すると思われる。必要なら前述のように":if"をつけること。 >
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
4322 次の設定がTTpro telnet用にうまくいく。Tera Term ProはMS-Windows用のフリーウェ
4323 ア/オープンソースプログラムである。 >
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: