syntax.txt For Vim バージョン 9.1. Last change: 2024 Nov 10
VIMリファレンスマニュアル by Bram Moolenaar
構文ハイライト syntax syntax-highlighting coloring
Vimは構文ハイライトによってテキストの一部を別のフォントや色で表示することがで
きる。ハイライトされるテキストは、特定のキーワードや正規表現パターンにマッチす
るテキストである。動作を速く保つため、ファイル全体を構文解析するわけではないか
ら、このハイライト方法には限界が存在する。単語(レキシカル)ハイライトと呼ぶのが
より正しいが、皆が構文ハイライトと呼ぶのでそう呼び続けている。
Vimは全ての端末で構文ハイライトをサポートしている。しかし、多くの普通の端末に
はごく限られたハイライト手段しか提供されていないので、GUI版のgvimで動作させた
ときに見栄えが最もよくなる。
ユーザーマニュアルにおける記述:
usr_06.txt 構文ハイライトの紹介。
usr_44.txt 構文ファイルの記述方法の紹介。
1. クイックスタート :syn-qstart
2. 構文ファイル :syn-files
3. 構文ファイル読込の手順 syntax-loading
4. HTMLへの変換 2html.vim
5. 構文ファイルの覚書 :syn-file-remarks
6. 構文を定義する :syn-define
7. :syntaxの引数 :syn-arguments
8. syntaxのパターン :syn-pattern
9. クラスタ :syn-cluster
10. 構文ファイルのインクルード :syn-include
11. 表示のシンクロナイズ :syn-sync
12. 構文アイテムのリストを表示する :syntax
13. カラースキーム color-schemes
14. ハイライトコマンド :highlight
15. グループのリンク :highlight-link
16. 構文の消去 :syn-clear
17. 関数名などのハイライト tag-highlight
18. ウィンドウローカル構文 :ownsyntax
19. カラー対応xterm xterm-color
20. シンタックスが遅い時には :syntime
{Vi にはこれらのコマンドはない}
コンパイル時に+syntax機能を無効にした場合には構文ハイライトは利用することは
できない。
==============================================================================
1. クイックスタート :syn-qstart
:syn-enable :syntax-enable
次のコマンドで構文ハイライトが有効になる:
このコマンドにより実際には次のコマンドが実行される
環境変数VIMが設定されていない場合は、Vimは別の方法($VIMRUNTIME参照)でパスの
検索を試みる。通常はこれでうまくいく。うまく動作しない場合は、環境変数VIMにVim
の構成ファイルが置いてあるディレクトリの設定を試みる。例えば、構文ファイルが
ディレクトリ "/usr/vim/vim82/syntax" にあるならば、$VIMRUNTIMEに
"/usr/vim/vim82" を設定する。これはVimを起動する前に、シェルで設定しておかなけ
ればならない。このコマンドは、GUIが実行されている、もしくは間もなく立ち上がる
場合、スクリプトmenu.vim の読み込みも行う。これを避けるには 'go-M' を参照。
:syn-on :syntax-on
コマンド :syntax enable は現在の色設定のほとんどを保持する。そのため、このコ
マンドを使用する前後にコマンド :highlight で好みの色を設定することができる。
現在の設定を破棄して、デフォルトの色を設定させたい場合は次のコマンドを使用する:
:hi-normal :highlight-normal
GUIを使用している場合は、次のコマンドで黒地に白文字を設定できる:
自分自身で色を設定する方法についてはsyncolorを参照。
NOTE: MS-Windowsの構文ファイルは改行コードが<CR><NL>である。UNIXでは<NL>であ
る。自分のシステムに合った改行コードのファイルを使わなければならない。しかし、
MS-Windowsではオプション 'fileformats' が空でなければ正しい形式が自動的に選択
される。
NOTE: 反転表示("gvim -fg white -bg black")を使用する場合、gvimrcが読込まれた
後、GUIウィンドウが開かれるまでは 'background' のデフォルト値が設定されない。
そのせいで誤ったデフォルトのハイライトが使用されてしまう。ハイライト表示を有効
化する前に 'background' のデフォルト値を設定するには、gvimrcにコマンド
":gui" を含めればよい:
NOTE: .gvimrcの中で ":gui" を使用すると "gvim -f" によりフォアグラウンドで開
始することができなくなる。その際は ":gui -f" を使用すること。
g:syntax_on
次のコマンドで構文ハイライトの有効・無効を切換えることができる:
これをキーマップに設定するには、以下のように書く:
詳細
コマンド ":syntax" はファイルをsourceすることで実装されている。その際にsource
されるファイルの中身を見れば、このコマンドがどのように動作しているのか正確に知
ることができる。
コマンド ファイル
:syntax enable $VIMRUNTIME/syntax/syntax.vim
:syntax on $VIMRUNTIME/syntax/syntax.vim
:syntax manual $VIMRUNTIME/syntax/manual.vim
:syntax off $VIMRUNTIME/syntax/nosyntax.vim
syntax-loadingも参照。
NOTE: 長い行があって表示が遅く、構文ハイライトをオフにしたくなるような場合は、
'synmaxcol' をもっと小さい値にすることも考えてみること。
==============================================================================
2. 構文ハイライトファイル :syn-files
ある1つの言語用の構文とハイライト色定義コマンドは通常1つのファイル(以下構文ファ
イル)に格納される。名前は "{name}.vim" と付ける慣習になっている。{name}はその
言語の名前か短縮名となる(DOSファイルシステムで要求される、8.3文字の形式にあわ
せることが望ましい)。
例:
c.vim perl.vim java.vim html.vim
cpp.vim sh.vim csh.vim
構文ファイルには、vimrcファイルと同様にExコマンドを記述できる。しかし1つのファ
イルには、1つの言語のためのコマンドだけを記述するよう取り決めている。ある言語
が別の言語のスーパーセットである時には、他のファイルを内包していても良く、例え
ば、ファイルcpp.vimはファイルc.vimを取り込むようになっている:
通常これらの構文ファイルは自動コマンドにより読込まれる。例:
独自構文ファイルの作成 mysyntaxfile
独自の構文ファイルを作成し、":syntax enable" をしたとき自動的にそのファイルが
使われるようにするには、以下のようにする:
1. ユーザーランタイムディレクトリを作成する。通常はオプション 'runtimepath' に
示される最初のディレクトリを使用する。UNIXの例では:
2. "syntax" という名のディレクトリを作成する。UNIXでは:
3. Vimの構文ファイルを作成する。もしくはインターネットからダウンロードする。そ
のファイルはディレクトリsyntaxに置く。構文 "mine" の例では:
これで独自構文ファイルを手動で使うことはできるようになっている:
このファイルタイプが認識されるようにするには、new-filetypeを参照。
システム管理者としてユーザー全てに独自構文ファイルを使わせるには、各ユーザーに
同じ構文ファイルをインストールさせる必要はなく、全ユーザー共通の 'runtimepath'
ディレクトリにインストールすればよい。
既存の構文ファイルに設定を追加する mysyntaxfile-add
既存の構文ファイルでほぼ満足だが、いくつかの設定を追加したりハイライト手法を変
更したい場合には、以下の手順に従う:
1. 上同様、'runtimepath' に示されるユーザーディレクトリを作成する。
2. "after/syntax" というディレクトリを作成する。UNIXの例:
3. 追加設定を行うコマンドを含む Vim script ファイルを作成する。例として、C言語
のコメントの色を変更するには:
4. その設定ファイルをディレクトリ "after/syntax" に置く。名前には構文名に
".vim" を追加して使用する。Cの構文を拡張するならば:
以上。次回Cのファイルを編集する時にはコメントが異なった色で表示される。Vimを再
起動する必要はない。
構文ファイルが複数になるときは、ファイルタイプの名前のディレクトリに置くとよ
い。そのディレクトリの中の全ての "*.vim" ファイルが読み込まれるようになる。例:
既存の構文ファイルを置き換える mysyntaxfile-replace
標準の構文ファイルが気に入らない場合や、新しいバージョンをダウンロードした際に
は、上で述べたmysyntaxfileに従えば良い。ただ 'runtimepath' で、前の方に記され
たディレクトリに構文ファイルを置くように気をつければ良い。Vimは適合する構文ファ
イルのうち最初に見つけた1つだけを読込む (それが b:current_syntax を設定すると
想定している)。
名前付けの慣習 group-name {group-name} E669 W18
構文グループとは、同じ種類の構文アイテムをグループ化したものである。構文グルー
プからハイライトグループにリンクされ、ハイライトグループに対して色が設定され
る。構文グループそれ自体は、色や属性を指定するものではない。
ハイライトや構文のグループ名はASCII文字、数字、アンダースコア、ドット、または
ハイフンだけでつけなければならない。正規表現では: "[a-zA-Z0-9_.-]*" しかしそ
れ以外の文字を使ってもVimはエラーを出力しない。グループ名の最大長は約200バイト
である。 E1249
各ユーザーが好みの色セットを使用できるように、多くの言語に共通するハイライトグ
ループには優先名が与えられている。推奨されているグループ名は以下のとおり(構文
ハイライトがちゃんと機能していれば、"Ignore" 以外はそのグループに設定された色
で表示されるだろう):
*Comment o コメント
*Constant o 定数
String o 文字列定数: "これは文字列です"
Character o 文字定数: 'c', '\n'
Number o 数値定数: 234, 0xff
Boolean o ブール値の定数: TRUE, false
Float o 浮動小数点数の定数: 2.3e10
*Identifier o 変数名
Function o 関数名(クラスメソッドを含む)
*Statement o 命令文
Conditional o if, then, else, endif, switch, その他
Repeat o for, do, while, その他
Label o case, default, その他
Operator o "sizeof", "+", "*", その他
Keyword o その他のキーワード
Exception o try, catch, throw
*PreProc o 一般的なプリプロセッサー命令
Include o #include プリプロセッサー
Define o #define プリプロセッサー
Macro o Defineと同値
PreCondit o プリプロセッサーの #if, #else, #endif, その他
*Type o int, long, char, その他
StorageClass o static, register, volatile, その他
Structure o struct, union, enum, その他
Typedef o typedef宣言
*Special o 特殊なシンボル
SpecialChar o 特殊な文字定数
Tag o この上で CTRL-] を使うことができる
Delimiter o 注意が必要な文字
SpecialComment o コメント内の特記事項
Debug o デバッグ命令
*Underlined o 目立つ文章, HTMLリンク
*Ignore o (見た目上)空白, 不可視 hl-Ignore
*Error o エラーなど、なんらかの誤った構造
*Todo o 特別な注意が必要なもの; 大抵はTODO FIXME XXXなど
のキーワード
*Added o 差分内の追加行
*Changed o 差分内の変更行
*Removed o 差分内の削除行
マーク(*)されている名前が優先グループ、その他はマイナーグループである。優先グ
ループには、"syntax.vim" によりデフォルトのハイライト手法が定義されている。マ
イナーグループは優先グループにリンクされ、リンクした先と同じハイライト手法にな
る。ファイル "syntax.vim" が読込まれた後でコマンド ":highlight" を使えば、その
デフォルトを上書することができる。
ハイライトグループ名には大文字小文字の区別がないことに注意。"String" と
"string" はどちらも同じグループを意味する。
以下の名前は予約されているのでグループ名として使用することはできない:
NONE ALL ALLBUT contains contained
hl-Ignore
Ignore グループを使うときは、conceal 機能も使うと便利かもしれない。
conceal 参照。
==============================================================================
3. 構文ファイル読込の手順 syntax-loading
ここではコマンド ":syntax enable" を実行した時に何が起こるかの詳細を説明する。
Vimは初期化の時に、ランタイムファイルの在り処を自動的に発見する。ここでは変数
$VIMRUNTIMEにその場所が格納されているとする。
":syntax enable" と ":syntax on" では以下のことが起こる:
$VIMRUNTIME/syntax/syntax.vimを読込む
|
+- $VIMRUNTIME/syntax/nosyntax.vimを読込んで古い構文を削除する
|
+- 'runtimepath' からsyntax/synload.vimを読込む
| |
| +- 構文ハイライトの色を設定する。カラースキームが定義されている場合は
| | ":colors {name}" で再度読込む。そうでない場合は
| | ":runtime! syntax/syncolor.vim" が使用される。":syntax on" は既存
| | の色設定を上書設定し、":syntax enable" はまだ設定されていないグルー
| | プのみを設定する。
| |
| +- 適切な構文ファイルをオプション 'syntax' が設定される時に読込む自動
| | 実行コマンドを設定する。 synload-1
| |
| +- ユーザーによる追加ファイルを変数mysyntaxfileから読込む。これは
| Vim 5.xとの互換性のためだけに存在する。 synload-2
|
+- ":filetype on" を実行し ":runtime! filetype.vim" が実行される。これは
| 見つけることのできる全てのfiletype.vimを読込む。
| $VIMRUNTIME/filetype.vimは常に読込まれ、以下のことが実行される。
| |
| +- 拡張子に基づいてオプション 'filetype' を設定する自動コマンドをイン
| | ストールする。これにより既知のファイル形式に付いて、ファイル名と当
| | 該形式との関連付けが成される。 synload-3
| |
| +- ユーザーによる追加ファイルを変数 myfiletypefile から読込む。これは
| | Vim 5.xとの互換性のためだけに存在する。 synload-4
| |
| +- ファイル形式が検出されなかった時にscripts.vimを読込むための自動実
| | 行コマンドをインストールする。 synload-5
| |
| +- 構文メニュー設定のため$VIMRUNTIME/menu.vimを読込む。 menu.vim
|
+- ファイル形式が検出された時にオプション 'syntax' を設定するための
| FileType自動コマンドを設定する。 synload-6
|
+- 既に読込まれているバッファに対して構文ハイライトを行うために、関連した
自動コマンドを実行する。
ファイルを読込む時には、Vimは以下のように関連した構文ファイルを見つける:
ファイルを読込むとBufReadPost自動コマンドが起動する。
|
+- synload-3(既知ファイル形式)かsynload-4(ユーザー定義ファイル形式)の自
| 動実行コマンドがヒットした場合、オプション 'filetype' にそのファイル形
| 式名が設定される。
|
+- synload-5の自動コマンドが実行される。まだファイル形式が決定されてい
| ない場合は、'runtimepath' からscripts.vimが検索される。これは常に以下
| のことを行う$VIMRUNTIME/scripts.vimを読込む。
| |
| +- ユーザーによる追加ファイルを変数 myscriptsfile から読込む。これは
| | Vim 5.xとの互換性のためだけに存在する。
| |
| +- 未だにファイル形式が決定できない場合、ファイルの内容を検査する。検
| 査は "getline(1) =~ pattern" のように認識できるファイル形式かどう
| か行われ、認識できるならば 'filetype' を設定する。
|
+- ファイル形式が決定されて 'filetype' が設定された時に、上記synload-6
| のFileType自動コマンドが実行される。決定したファイル形式名がそれにより
| 'syntax' へ設定される。
|
+- 上記でオプション 'syntax' が設定されると、synload-1(とsynload-2)の
| 自動実行コマンドが実行される。これにより次のコマンドでメインとなる構文
| ファイルが 'runtimepath' から読込まれる。
| runtime! syntax/<name>.vim
|
+- ユーザーがインストールしたその他のFileTypeおよびSyntax自動コマンドが実
行される。これは特定の構文のハイライトを変更するのに使うことができる。
==============================================================================
4. HTMLへの変換 2html.vim convert-to-HTML
これは構文ファイルではなくて、現在のウィンドウの内容をHTMLに変換するスクリプト
である。Vimは新しいウィンドウを作成しそこにHTMLファイルを構築する。
変換結果を保存すればブラウザーでそれを表示できる。Vim での表示と同じ色で表示さ
れるはずである。g:html_line_ids を有効化すると、ブラウザーのアドレスバーで
URL の末尾に (例えば) #L123 や #123 と付け加えることで、その行にジャンプでき
る。また、g:html_dynamic_folds を有効化すると、Vim の折り畳みを表示したり隠
したりできる。
使う際にはオプション 'filetype' や 'syntax' に "2html" を設定してはならない!
現在のファイルをコンバートするためにはこのスクリプトを読込む:
2html.vim に影響する変数はたくさんある。下記参照。下記の on/off オプションは指
定された値を明示的に設定することで有効化/無効化できる。また、:unlet で変数を
削除することでデフォルトに戻すことができる。
覚書き:
- いくつかの本当に古いブラウザーでは背景色が表示されないことがある。
- 大半のブラウザーでは(なんとカラーで)印刷することができる!
- このバージョンの TOhtml はおそらく古い Vim でも動作するが、例えば conceal サ
ポートのようないくつかの機能は動作しない。また、GUI サポート無しでコンパイル
された古い Vim では色がおかしくなるかもしれない。
例えば次の Unix シェルスクリプトですべての .c と .h ファイルを変換できる:
g:html_start_line g:html_end_line
変換の範囲を指定するには、:TOhtml コマンドに範囲を指定するか、
"g:html_start_line" と "g:html_end_line" に変換したい範囲の最初と最後の行を設
定する。例えば、最後に選択された範囲だけを変換するには:
:TOhtml
[range]TOhtml ":TOhtml" コマンドは標準プラグインで定義されている。
このコマンドは 2html.vim を実行する。範囲が指定され
た場合は g:html_start_line と g:html_end_line をそ
の範囲に設定する。範囲省略時はファイル全体が対象とな
る。
もしカレントウィンドウが diff の一部で、
g:html_diff_one_file が設定されていない場合、:TOhtml
はカレントタブ内の diff を表示しているすべてのウィンド
ウを変換して <table> 要素で並べた HTML を生成する。
g:html_line_ids が有効なら、(例えば) #W1L42 で 1 番
目のウィンドウの 42 行目、#W3L87 で 3 番目の 87 行目に
ジャンプできる。
例:
g:html_diff_one_file
デフォルト: 0
0 なら、:TOhtml を使うとカレントタブ内の diff を表示しているすべてのウィン
ドウが変換され、<table> 要素で並べられた HTML が生成される。
1 なら、カレントバッファのみが変換される。
例:
g:html_whole_filler
デフォルト: 0
0 なら、もし g:html_diff_one_file が 1 なら、3 行以上の連続した詰め行は 3 行
で表示され、真ん中の行に挿入された行数の合計が表示される。
1 なら、g:html_diff_one_file が設定されていないときのように、常に挿入された
行が表示される。
TOhtml-performance g:html_no_progress
デフォルト: 0
0 なら、2html.vim の変換過程の各段階で進行状況のプログレスバーをステータスライ
ンに表示する。
1 なら、プログレスバーを表示しない。若干スピードは速くなるが、変換がいつごろ終
わるかを知ることはできない。大きなファイルならとても時間がかかるのに!
例:
Vim を非対話で実行すれば、スクリプトでバッファやウィンドウなどを走査するごとに
表示を更新しなくてもよくなるので、速度はもっと速くなる:
Note -s フラグは .vimrc とプラグインの読み込みを抑制する。したがって、HTML 変
換に必要な設定などは明示的に読み込まなければならない。詳細は -E と -s-ex
を参照。このように各コマンドを指定して実行するよりは、上記の -c で設定している
ようなことがらをすべてスクリプトファイルに書き込み、-u フラグで読み込んで実行
するといいだろう。
hl-TOhtmlProgress TOhtml-progress-color
プログレスバーは HTML 変換が進むにつれ、ステータスラインに沿って色付きの四角で
表示される。デフォルトでは背景色は現在の "DiffDelete" ハイライトグループの設定
が適用される。"DiffDelete" と "StatusLine" の背景色が同じ場合、TOhtml は自動で
色を調整する。自動で色を選択したくない場合は、自身でプログレスバーのハイライト
色を定義することができる。例えば:
g:html_number_lines
デフォルト: 現在の 'number' の設定
0 なら、バッファのテキストは行番号なしで HTML に表示される。
1 なら、生成される HTML に行番号が付加される。色は Vim の行番号表示と同じ
(hl-LineNr)。
'number' がオフでも強制的に行番号を表示するなら:
g:html_line_ids
デフォルト: 1。g:html_number_lines が設定されていないときは 0。
この設定が 1 なら、各行番号に HTML の id 属性を付ける。行番号が表示されていな
いときは空の <span> 要素を挿入して id を付ける。この ID 属性は、HTML が単一の
バッファから生成されたときは L123 のような形になる。diff 表示から生成されたと
きは W2L123 のような形になる。これを使って (特定の diff ウィンドウの) 特定の行
にジャンプできる。指定された行にジャンプする前にその行の折り畳みを開くための
Javascript が挿入される (g:html_dynamic_folds)。javascript はウィンドウ ID
や行番号前の L を省略できる機能も提供する。
例:
g:html_use_css
デフォルト: 1
1 なら、CSS で装飾された HTML 5 準拠の HTML が生成される。最新のブラウザーと多
くの古いブラウザーでサポートされている。
0 なら、<font> タグで装飾された時代遅れの HTML が生成される。これは推奨されて
いないが、古いブラウザー、あるいはメーラーや掲示板の投稿など、CSS が使えない場
合には必要だろう。
例:
g:html_ignore_conceal
デフォルト: 0
0 なら、Conceal されたテキストは HTML には表示されず、'conceallevel' の現在の
設定に応じて :syn-cchar や 'listchars' の文字が代わりに表示される。
1 なら、Conceal されていてもされていなくても、すべてのテキストが HTML に表示さ
れる。
次のコマンドでバッファ内のすべてのテキストを HTML に表示することができる (折り
畳まれてなければ):
g:html_ignore_folding
デフォルト: 0
0 なら、折り畳みで閉じられたテキストは Vim で折り畳み表示されているテキストに
置き換えられる (fold-foldtext)。Vim で折り畳みを開けるのと同じように、HTML
でも開けるようにしたい場合は g:html_dynamic_folds を参照。
1 なら、バッファのすべてのテキストを HTML に含める。テキストが折り畳まれている
かどうかは無視される。g:html_dynamic_folds は機能しない。
次のコマンドでバッファ内のすべてのテキストを HTML に表示することができる
(Conceal されてなければ):
g:html_dynamic_folds
デフォルト: 0
0 なら、折り畳まれたテキストは HTML に含まれない。
1 なら、Vim の動作と同じように折り畳みを開いたり閉じたりするための、javascript
が生成される。
この変数を 1 に設定すると、g:html_use_css の設定にかかわらず、2html.vim は常に
CSS を使うようになる。
この変数は g:html_ignore_folding が設定されているときは無視される。
g:html_no_foldcolumn
デフォルト: 0
0 なら、もし g:html_dynamic_folds が 1 なら、Vim の foldcolumn
(fold-foldcolumn) に似たテキストを生成する。ユーザーはそれをクリックすること
で折り畳みを開いたり閉じたりできる。生成されるテキスト幅の最小値は現在の
'foldcolumn' の設定で決まる。
1 なら、その列を生成しない。代わりに、マウスを折り畳みの上にもっていくことで折
り畳みが開くようになる (g:html_hover_unfold が設定されたときのように)。
TOhtml-uncopyable-text g:html_prevent_copy
デフォルト: 空文字列
このオプションは、例えば生成された HTML をブラウザーで開いて全体を選択してコ
ピーしたときに、特定の範囲がコピーされないようにできる。これは foldcolumn や行
番号が表示されていても、ソーステキストのみコピーできるようにしたい場合に便利で
ある。範囲の指定は次のようにする:
f: foldcolumn
n: 行番号 (折り畳みテキスト内のも)
t: 折り畳みテキスト
d: 差分詰め文字
例えば、foldcolumn と行番号をコピーできないようにするには:
生成されたページのコピーを防ぐための方法は g:html_use_input_for_pc の値に依
存している。
g:html_use_input_for_pc
デフォルト: "none"
g:html_prevent_copy の値が空文字列でないとき:
"all" なら、コピー抑制エリアにある通常テキストの代わりに読み込み専用の <input>
要素を使用する。古いブラウザーなどいくつかのブラウザーでは、ページ全体を選択し
コピーした後、<input> タグはページテキストと共にペーストされない。もし
g:html_no_invalid が 0 ならば、<input> タグは不正な属性を持つ。これにより大
抵のブラウザーで機能するようになるが、ページは正しくない。
Note: この方法は最近の Chrome やそれと同等なブラウザーでは動作しない。<input>
タグはテキストと共にペーストされてしまう。
"fallback" (デフォルト値) なら、古いブラウザーのために同様に <input> 要素を生
成するが、コピー抑制テキストを表示するために新しいブラウザー (これはCSS 機能ク
エリで決定される) では <input> 要素を隠し、::before 疑似要素で生成したコンテン
ツを代わりに使用する。この方法は新旧ほとんどのブラウザーで機能する。
"none" なら <input> 要素は生成されない。コンテンツを生成する方法のみが使用され
る。これは Internet Explorer のような古いブラウザーでは、コピーできないように
意図されたテキストがコピーできるか、コピー抑制テキストが全く表示されないことを
意味する。ただし、これが最も標準的な方法でマークアップも少なくなる。
g:html_no_invalid
デフォルト: 0
0 なら、もし g:html_prevent_copy が空でなく g:html_use_input_for_pc も
"none" でない場合、コピー抑制エリアのための <input> エレメントに不正な属性が意
図的に挿入される。これによって、いくつかのアプリケーションで <input> 要素がペー
ストされることを防ぐ。特に、いくつかのバージョンの Microsoft Word では不正な属
性を持つ <input> 要素をペーストしない。1 なら、不正な属性は挿入されない。正し
いページが生成される。ただし、いくつかのアプリケーションでは <input> 要素はペー
ストされてしまい、後で削除するのが困難になる。
g:html_hover_unfold
デフォルト: 0
0 なら、2html.vim で g:html_dynamic_folds 付きで生成された HTML の折り畳みを
開く方法は、生成された折り畳み列をクリックする方法だけになる。
1 なら、CSS 2.0 を使って、マウスを折り畳みの上にもっていくことで折り畳みを開け
るようにする。javascript を無効にしていても折り畳みを開けるようにしたい場合に
便利である。
Note 古いブラウザー (特に Internet Explorer 6) はこの機能をサポートしていない。
通常の CSS1 を使った IE6 用のマークアップが挿入され、IE6 でも表示できるように
はなっているが、foldcolumn がないとそれを開くことはできない。
g:html_id_expr
デフォルト: ""
動的折り畳みや行 ID によるジャンプが機能するにはドキュメント内における一意の
ID が必要である。例えば生成された HTML を他のドキュメント内にコピーしたりする
と、その ID は一意性が保証されなくなる。g:html_id_expr に式が設定されている
と、Vim は一意な文字列を得るためにその式を評価して、ドキュメント内で使用される
ID に付加する。その完全な ID であれば、他のドキュメントにコピーされた場合でも
一意に定めることができる。例えば、 _ とバッファ番号を ID に付加するには:
ID の末尾に "_mystring" を付加するには:
Note: diff ビューを HTML に変換するときは、この式は diff の 1 番目のウィンドウ
に対してのみ評価される。そしてその結果は他のすべてのウィンドウに対して使用され
る。
TOhtml-wrap-text g:html_pre_wrap
デフォルト: 現在の 'wrap' の設定
0 なら、もし g:html_no_pre が 0 または未設定なら、生成された HTML のテキスト
はブラウザーの端で折り返されない。
1 なら、もし g:html_use_css が 1 なら、CSS 2.0 の "white-space:pre-wrap" が
使われ、テキストはブラウザーの端で折り返される。
明示的に折り返しを有効にするには:
g:html_no_pre
デフォルト: 0
0 なら、テキストは <pre>...</pre> タグで囲まれる。スペース文字の連続はそのまま
Vim 内での表示と同じように表示され、タブ文字もそのまま含むことができる
(g:html_expand_tabs 参照)。
1 なら (非推奨)、<pre> タグは使われず、代わりに <div> タグが使われる。スペース
文字は 文字参照に変換され、改行には <br> が使われる。これは HTML で折り
返し (g:html_pre_wrap) をするためのもう一つの方法で、古いブラウザーでも動作
するが、Vim の表示とは違うページが生成されるかもしれない。
g:html_no_doc
デフォルト: 0
1 の場合、DOCTYPE, <head>, <body> などを含む完全な HTML ドキュメントは生成され
ない。g:html_use_css が有効になっている場合 (デフォルト)、CSS を手動で定義す
る必要がある。g:html_dynamic_folds および g:html_line_ids 設定 (デフォルト
ではオフ) も、いくつかの JavaScript を挿入する。
g:html_no_links
デフォルト: 0
URL のようなテキストには <a> タグを生成しない。
g:html_no_modeline
デフォルト: 0
折り畳みを無効化するモードラインを生成しない。
g:html_expand_tabs
デフォルト: 'tabstop' が 8 で 'expandtab' が 0 で 'vartabstop' が使われていな
い、かつ、foldcolumn と行番号がない場合は 0。そうでない場合は 1。
1 なら、<Tab> 文字は同等のスペース文字、または (g:html_no_pre が 1 の
場合) に置換される。
0 なら、もし g:html_no_pre が 0 または未設定なら、<Tab> 文字はそのまま HTML
に出力される。これはブラウザーで表示したときに、もとのテキストのままコピー &
ペーストできるようにしたい場合に便利である。Note これはテキストの整列やインデ
ントが崩れやすい (デフォルトとして設定された場合は別)。
強制的に <Tab> 文字を維持したい場合は:
強制的にタブ文字を展開したい場合は:
TOhtml-encoding-detect TOhtml-encoding
ウェブサーバーにコンテンツを置くような場合は、使用したいエンコーディング名を
g:html_use_encoding で指定することを強く推奨する。
エンコーディングが指定されていない場合は、'fileencoding' が設定されていれば
'fileencoding' の値から、設定されていなければ 'encoding' の値から、適切な IANA
名が使用される。特定の 'buftype' に対しては 'encoding' が常に使用される。
'fileencoding' は選択されたドキュメントエンコーディングに合うように設定され
る。
自動設定は encoding-names に挙げられたエンコーディング名に対して機能するが、
TOhtml は多くのブラウザーでサポートされているエンコーディングのみ自動設定する。
自動設定の対象外のエンコーディングを使用したい場合は明示的にそれを設定すること
ができる (下記オプション参照)。IANA 名については
http://www.iana.org/assignments/character-sets を参照。
Note: デフォルトではすべての Unicode エンコーディングは BOM なし UTF-8 として
HTML 生成される (W3C 推奨):
http://www.w3.org/International/questions/qa-choosing-encodings
http://www.w3.org/International/questions/qa-byte-order-mark
g:html_use_encoding
デフォルト: なし。上述のとおり、'fileencoding' の値に応じて IANA 名が使われる。
文字セットの自動設定を上書きするには、g:html_use_encoding に使用したい文字セッ
トの名前を設定する。ウェブサーバーに上げるような場合には、UTF-8 のような広くサ
ポートされている文字セットを設定することが推奨される:
(非推奨):
g:html_encoding_override
デフォルト: なし。encoding-names で挙げられているエンコーディングに対しては
autoload/tohtml.vim で既定の変換が定義されている。
自動設定されない文字セットを g:html_use_encoding で明示的に設定したときに、
それに対応する 'fileencoding' を指定することができる。
これは文字セット-エンコーディング組の辞書で、TOhtml が使用する組を置き換えたり
追加したりできる。
例えば HTML 文字セットの "windows-1252" を "8bit-cp1252" エンコーディングに対
応させるなら:
g:html_charset_override
デフォルト: なし。encoding-names で挙げられているエンコーディングに対しては
autoload/tohtml.vim で既定の変換が定義されている。それは多くのブラウザーでサ
ポートされている。
2html.vim が 'fileencoding' や 'encoding' から適切な HTML 文字セットを自動的
に決定できない場合に設定する。既定のエンコーディング-文字セット組を上書きする
こともできる。例えば、TOhtml はすべての Unicode/UCS エンコーディングに対しては
UTF-8 を使用するが、代わりに UTF-16 や UTF-32 を使うようにするには次のように設
定する:
Note: UTF-32 か UTF-16 でエンコードされたドキュメントはいくつかのメジャーブラ
ウザーで互換性の問題があることが知られている。
g:html_font
デフォルト: "monospace"
g:html_font を使って1つないしは複数のフォントを変換されたドキュメントに対して
指定できる。このオプションに文字列を設定した場合はシングルクォートで囲まれる。
またオプションにリストを設定した場合は全てのリストアイテムがシングルクォートで
囲まれ、リストはコンマで結合される。どちらの場合でも、一般的なフォントファミリ
名、(CSSを使っての)フォントファミリ名、(CSSを使わない場合の)フォントフェイス名
を補う為に "monospace" が追加される。
例:
convert-to-XML convert-to-XHTML g:html_use_xhtml
デフォルト: 0
0 なら、標準 HTML 4.01 を生成する (可能なら strict)。
1 なら、XHTML 1.0 を生成する (XML 準拠の HTML)。
==============================================================================
5. 構文ファイルの覚書 :syn-file-remarks
b:current_syntax-variable
Vimは読み込んだ構文の名前を変数 "b:current_syntax" に記憶している。ある構文が
有効な場合だけある設定を行うにはこの変数が利用できる。例:
ABEL abel.vim ft-abel-syntax
ABELのハイライトにはユーザーが定義できるオプションが幾つかある。それらを有効化
するにはそれぞれの変数に何か値を設定すれば良い。例:
変数 ハイライト
abel_obsolete_ok 古いキーワードをエラーでなく命令文として扱う
abel_cpp_comments_illegal '//' をインラインコメントリーダーとして扱わない
ADA
ft-ada-syntaxを参照。
ANT ant.vim ft-ant-syntax
ANTの構文ファイルにはデフォルトでJavaScriptとPythonの構文ハイライトが含まれて
いる。関数AntSyntaxScript()の第1引数にタグ名を、第2引数にファイル名を指定する
ことでその他のスクリプト言語用構文ハイライトをインストールすることができる。
例:
これは次のようなANTのコードにPerlの構文ハイライトをインストールするものである
スクリプト言語を永続的にインストールするにはmysyntaxfile-addを参照。
APACHE apache.vim ft-apache-syntax
Apache の構文ファイルは Apache HTTP サーバーのバージョン 2.2.3 に基づいた構文
ハイライトを提供する。
asm.vim asmh8300.vim nasm.vim masm.vim asm68k
ft-asm-syntax ft-asmh8300-syntax ft-nasm-syntax
ft-masm-syntax ft-asm68k-syntax fasm.vim
アセンブリ言語
"*.i" にマッチするファイルのタイプは Progress かアセンブリである。自動判別がう
まく機能しない場合、または Progress ファイルを一切編集しない場合は、vimrcでこ
れを使用する:
同じ拡張子を使用しているアセンブリ言語はたくさんある。そのため、ユーザーは自分
が使っている種類を選択するか、もしくはアセンブリファイルそのものにVimがそれと
判断できるような行を追加しなければならない。現在は以下の構文ファイルが利用可能:
asm GNUアセンブラ(デフォルト)
asm68k モトローラ680x0アセンブラ
asmh8300 日立H-8300用GNUアセンブラ
ia64 インテルItanium 64
fasm Flat アセンブラ (http://flatassembler.net)
masm マイクロソフトアセンブラ(たぶん80x86汎用)
nasm ネットワイドアセンブラ
tasm ターボアセンブラ(80x86,Pentium,MMXの命令コードを含む)
pic PICアセンブラ(現在はPIC16F84用)
アセンブリファイルに次のような行を書き加えるのが一番柔軟である:
述はファイルの先頭 5 行以内に書いてなければならない。この文字列の前後に非空
白文字があってはならない。Note asmsyntax=foo を指定するのはモードライン
(modeline) で ft=foo と設定するのと同じであり、設定がぶつかったときはモード
ラインの設定が先に処理される (特に、例えばモードラインで ft=asm と設定すると、
asmsyntax があっても GNU 構文強調表示が使われることになる)。
構文の種類はバッファ変数b:asmsyntaxを設定することで常にそちらが優先される:
自動にしろ手動にしろb:asmsyntaxが設定されていないときには、グローバル変数
asmsyntaxが使用される。これによりデフォルトのアセンブリ言語を設定することがで
きる:
最後の手段として、何も設定されていない場合には、"asm" 構文が使用される。
ネットワイドアセンブラ(nasm.vim)の補助ハイライト
機能を有効化するには:
変数 ハイライト内容
nasm_loose_syntax 非オフィシャルな拡張構文をエラーとしない
(パーサー依存; 非推奨)
nasm_ctx_outside_macro マクロ外のコンテキストをエラーとしない
nasm_no_warn 潜在的に危険な構文をToDoとしてハイライトしない
ASTRO astro.vim ft-astro-syntax
コンフィグレーション
以下の変数は、特定の構文ハイライト機能を制御する。
これらを .vimrc に追加できる。
".astro" ファイルで TypeScript と TSX を有効にするには (デフォルト "disable"):
".astro" ファイルでスタイラスを有効にするには (デフォルト "disable"):
NOTE: astro ファイルでスタイラスをサポートするには、外部プラグインをインストー
ルする必要がある。
ASPPERL ft-aspperl-syntax
ASPVBS ft-aspvbs-syntax
*.aspと*.asaという名のファイルはどちらもPerlもしくはVisual Basicのスクリプトた
りえる。Vimにとってこれを判別するのは難しいので、グローバル変数を設定すること
でどちらを使用するのか宣言することができる。どちらでもPerlスクリプトを使用する
なら:
ASYMPTOTE asy.vim ft-asy-syntax
デフォルトでは、基本的な Asymptote キーワードのみがハイライトされる。拡張ジ
オメトリキーワードをハイライトするには:
そして、3D 構造に関連するキーワードをハイライトするには:
デフォルトでは、Asymptote で定義された色 (例: lightblue) がハイライトされる。
TeX で定義された色 (例: BlueViolet) をハイライトするには:
または、Xorg カラー (例: AliceBlue):
BAAN baan.vim baan-syntax
baan.vim は リリース BaanIV から SSA ERP LN まで、3 GL と 4 GL プログラミング
両方に対応した構文を定義している。たくさんの標準的な定義/定数がサポートされて
いる。
次を .vimrc に書いておくと、ある種のコーディング標準違反を教えてくれる:
baan-folding
以下の変数によって、様々なレベルで構文折り畳みを有効にできる (これらはユーザー
の .vimrc で設定すること)。ソースブロックと SQL についてより複雑な折り畳みを
行うと CPU に負荷がかかる。
折り畳みを有効にし、関数レベルで折り畳みをするにはこうする:
有効になる。キーワード begin/end の前のインデントが等しくなければならない (ス
ペースとタブは異なるとみなされる)。
の折り畳みが有効になる。キーワード begin/end の前のインデントが等しくなければ
ならない (スペースとタブは異なるとみなされる)。
い。.vimrc でオプション 'foldminlines' と 'foldnestmax' を :set するか、
.../after/syntax/baan.vim 内で :setlocal をする (after-directory を参照)
とよいかもしれない。例:
BASIC basic.vim vb.vim ft-basic-syntax ft-vb-syntax
Visual Basicも「通常の」BASICも、どちらも拡張子には ".bas" が使用される。どち
らが使用されているか判別するのに、Vimはファイルの先頭5行以内に "VB_Name" とい
う文字列が存在するかどうかを検査する。存在しなければ、ファイル形式は "basic"
となり、そうでなければ "vb" となる。拡張子が ".frm" のファイルは常にVisual
Basicとして扱われる。
自動判別がうまく機能しない場合、または例えば FreeBASIC ファイルのみしか編集し
ない場合は、vimrcでこれを使用する:
C c.vim ft-c-syntax
Cには幾つかの補助的なハイライト方法がある。それらを有効化するには対応した変数
に値 (0 を含む) を設定する。例:
代わりに、C++ のハイライトに切り替える方法もある:
変数 ハイライト内容
c_gnu GNU gcc固有の要素
c_comment_strings コメント内の文字列と数値
c_space_errors 行末の空白文字とタブ文字前のスペース文字
c_no_trail_space_error ... 但し行末の空白文字は除外
c_no_tab_space_error ... 但しタブ文字前のスペース文字は除外
c_no_bracket_error [] の内側の {} をエラーとして表示しない
c_no_curly_error [] と () の内側の {} をエラーとして表示しない;
... { と } が 1 桁目にある場合を除く
デフォルトでエラーとして表示される。欠落した
")" を見つけられないため。
c_curly_error 全てのペアを検証することにより対応する { がない } をハ
イライトする。これを有効にすると、ファイルの先頭から同
期が 始まるため、遅くなる
c_no_ansi ANSI標準の型と定数をハイライトしない
c_ansi_typedefs ... 但し標準ANSI型はハイライトする
c_ansi_constants ... 但し標準ANSI定数はハイライトする
c_no_utf 文字列中の\uと\Uをハイライトしない
c_syntax_for_h ファイル *.h に C++ ではなく C の構文を適用し、
objcpp ではなく objc の構文を適用する。
c_no_if0 "#if 0" のブロックをコメントとしてハイライトしない
c_no_cformat 文字列中の "%" によるフォーマットをハイライトしない
c_no_c99 C99の標準アイテムをハイライトしない
c_no_c11 C11の標準アイテムをハイライトしない
c_no_bsd BSD 特有の型をハイライトしない
c_functions 関数呼び出しと定義をハイライトする
c_function_pointers 関数ポインタの定義をハイライトする
'foldmethod' が "syntax" に設定されていると、/* */ のコメントと { } のブロック
が折り畳まれる。コメントを折り畳みたくなければこのようにする:
上方向にスクロールしているときにハイライト表示がおかしくなり、それが<CTRL-L>で
再描画すると直るようなら、内部変数 "c_minlines" にもっと大きな値を設定すれば解
決できるかもしれない:
期設定の値は50行(c_no_if0を使用した場合は15行)である。ただしこれには、大きな値
を設定すると再描画が遅くなるという短所がある。
"#if 0" / "#endif" のブロックをコメントとしてハイライトしている場合には、
"#if 0" がウィンドウのトップから "c_minlines" 以内にある時にしか正しく動作しな
いことに注意する。長い "#if 0" のブロックを使用した場合には、それは正しくハイ
ライトされない。
コメント内で追加要素にマッチを行うには、クラスタcCommentGroupを使用する。
例:
ANSIの定数はグループ "cConstant" でハイライトされる。これには "NULL", "SIG_IGN"
やその他のものが含まれる。しかしANSI標準でないもの、例えば "TRUE" は含まれな
い。もしもこれが紛らわしいならば、cConstant用のハイライトを削除する:
文法上エラーではないはずの '{' と '}' がエラーとしてハイライトされてしまう場合
には、cErrInParen及びcErrInBracketのハイライトをリセットする。
Cファイルで折り畳みをするには、以下の行を 'runtimepath' 中の "after" ディレク
トリ内のファイルに加えるとよい。Unixなら~/.vim/after/syntax/c.vimに加えるとよ
いだろう:
CH ch.vim ft-ch-syntax
C/C++ インタープリター。Ch は C に似た構文ハイライトを持ち、C の構文ファイルに
基づいている。C で利用できる設定については c.vim を参照。
変数を設定すれば、*.h ファイルに対して C, C++ でなく Ch の構文を使うようにする
ことができる:
CHILL chill.vim ft-chill-syntax
Chillの構文ハイライトはCに似ている。設定に関してはc.vimを参照。それに加えて
次のものがある:
chill_space_errors c_space_errors と同様
chill_comment_string c_comment_strings と同様
chill_minlines c_minlines と同様
CHANGELOG changelog.vim ft-changelog-syntax
ChangeLogでは行頭のスペースのハイライトできる。これをオフにしたいなら、次の行
を .vimrc に加える:
るには "b:changelog_spacing_errors" を使う(構文ファイルを読み込む前に設定する
こと)。
例えばスペースをエラーとするかどうかなどのハイライト方法を変えることができる:
CLOJURE ft-clojure-syntax
g:clojure_syntax_keywords
"clojure.core" 内の公開変数のシンタックスハイライトはデフォルトで提供されるが、
g:clojure_syntax_keywords 変数にシンボルを追加することによって、追加のシンボ
ルをハイライトすることができる。値は、それぞれが識別子の List を含む構文グ
ループ名の Dictionary である必要がある。
有効な構文グループについては、Clojure 構文スクリプトを参照。
そしてまたプラグイン作者が動的にシンボルをハイライトする意図で使用するための
バッファローカル版として変数 b:clojure_syntax_keywords もある。
変数 b:clojure_syntax_without_core_keywords への設定で、"clojure.core" の変
数をデフォルトでハイライトしなくなる。これは (:refer-clojure :only []) で設
定される名前空間に便利である。
g:clojure_fold
g:clojure_fold を 1 に設定すると、Clojureコードの折り畳みが有効になる。複
数行にまたがる任意の list, vector または map は、標準のVimの fold-commands を
使用して折り畳むことができる。
g:clojure_discard_macro
この変数を 1 に設定すると Clojure の "discard リーダーマクロ" の基本的なハイ
ライトを有効にする。
Note このオプションは、スタックされたdiscardマクロが正しくハイライトされない
(例 #_#_)。
COBOL cobol.vim ft-cobol-syntax
既存のCOBOLコードに要求されるハイライト方法と、新規に開発されるコードに要求さ
れるそれには違いがある。この違いはコードのおかれている状況(保守 vs 開発)やその
他の要素によって決定する。既存コードのハイライトを行うには .vimrc に次の行を加
える:
COLD FUSION coldfusion.vim ft-coldfusion-syntax
ColdFusionには独自版のHTMLコメントが存在する。ColdFusionのコメントハイライトを
有効化するには、次の行を起動設定ファイルに加える:
ColdFusionの構文ファイルはHTML用構文ファイルに基づいている。
CPP cpp.vim ft-cpp-syntax
大部分は ft-c-syntax と同じ。
変数 強調表示
cpp_no_cpp11 C++11 標準のアイテムを強調表示しない
cpp_no_cpp14 C++14 標準のアイテムを強調表示しない
cpp_no_cpp17 C++17 標準のアイテムを強調表示しない
cpp_no_cpp20 C++20 標準のアイテムを強調表示しない
CSH csh.vim ft-csh-syntax
これは "csh" という名前のシェルに対応している。システムによっては実際に使われ
ているのがtcshである場合もあることに注意。
ファイルがcshかtcshかを判定するのは難しいことがよく知られている。いくつかのシ
ステムでは/bin/cshを/bin/tcshにシンボリックリンクしていることが、この判別をほ
ぼ不可能にしている。Vimが間違った判定をする場合には変数 "filetype_csh" を設定
することができる。cshを使うには: g:filetype_csh
tcshを使うには:
拡張子がtcshであるか標準的なtcshファイル名(.tcshrc, tcsh.tcshrc, tcsh.login)を
持つスクリプトはすべてtcshファイル形式とされる。他のtcsh/cshスクリプトは、
"filetype_csh" 変数が存在しない限り、すべてtcshとみなされる。変数
"filetype_csh" が存在するならファイル形式はその値にセットされる。
CSV ft-csv-syntax
CSV ファイルの区切り文字を変更すると、構文ハイライトは変更されたファイルの内容
と一致しなくなる。次の変数を unlet する必要がある:
そして、ファイルを保存して再読み込みする:
これで、構文エンジンは新しく変更された CSV 区切り文字を判断するはずだ。
CYNLIB cynlib.vim ft-cynlib-syntax
Cynlibファイルは、ハードウェアのモデリングとシミュレーションを行うCynlibクラス
ライブラリを使用したC++ファイルである。通常Cynlibのファイルは.ccや.cppという拡
張子を持つので、CynlibではないC++ファイルと区別するのは非常に困難である。だか
ら.ccファイルをCynlibでハイライトする際には、ファイル.vimrcに次の行を加える:
cppファイルについても同様(この拡張子は通常Windowsだけで使用される)
これらを再び無効にするには次のコマンドを使用する:
CWEB cweb.vim ft-cweb-syntax
"*.w" にマッチするファイルのタイプは Progress か cweb である。自動判別がうまく
機能しない場合、または Progress ファイルを一切編集しない場合は、vimrcでこれを
使用する:
DART dart.vim ft-dart-syntax
Dartは、モバイル開発、デスクトップ、Web およびバックエンドアプリケーションの開
発に使用される、オブジェクト指向で型定義されたクラス定義のガベージコレクション
言語である。Dartは、C, Java および JavaScriptから派生したCに似た構文を使用し、
Smalltalk, Python, Ruby などから採用された機能を備えている。
言語とその開発環境の詳細については、公式のDart言語Webサイト https://dart.dev
を参照のこと。
dart.vim 構文は、Dartステートメント、予約語、型宣言、ストレージクラス、条件、
ループ、補間値およびコメントを検出してハイライトする。 Flutterやその他のDartフ
レームワークからサポートしているイディオムはない。
変更、修正? 以下を介して問題またはプルリクエストを送信する:
https://github.com/pr3d4t0r/dart-vim-syntax/
DESKTOP desktop.vim ft-desktop-syntax
この構文ファイルの本来の目的は、freedesktop.org 標準の .desktop と .directory
を構文ハイライトすることである:
https://specifications.freedesktop.org/desktop-entry-spec/latest/
X- で始まらない非標準の拡張子のハイライトの設定
KDEが予約している機能のハイライトの設定
DIFF diff.vim
diff 構文ハイライトは、通常ローカライズされた {訳注: 英語以外の} diff ヘッダも
検出する。ファイルにとても長い行が含まれる場合、この機能は低速になる。ローカラ
イズヘッダへの対応を無効化するには:
diff-slowも参照。
DIRCOLORS dircolors.vim ft-dircolors-syntax
dircolorsユーティリティ用のハイライト定義には、Slackware GNU/Linuxディストリ
ビューション版のdircolorsに対応するためのオプションがある。このオプションはほ
とんどのバージョンでは無視されるいくつかのキーワードを付け加える。しかし
Slackwareシステムではdircolorsはこれらのキーワードを認め、処理に用いる。
Slackwareキーワードを有効化するには次を起動設定ファイルに付け加えればよい:
DOCBOOK docbk.vim ft-docbk-syntax docbook
DOCBOOK XML docbkxml.vim ft-docbkxml-syntax
DOCBOOK SGML docbksgml.vim ft-docbksgml-syntax
DocBookファイルには2つの種類: SGMLとXMLがある。どちらのタイプを使用するのかを
指定するには変数 "b:docbk_type" をセットする。Vimがそのタイプを認識できた場合
にはこれを自動的に行う。認識できなかった場合にはデフォルトはXMLになる。
これを手動で設定するには:
込み入っている。より単純な方法はファイル形式を "docbkxml" または "docbksgml"
にセットすることである:
DocBook のバージョンを指定できる:
DOSバッチファイル dosbatch.vim ft-dosbatch-syntax
変数 dosbatch_cmdextversion でサポートされる Windows コマンドインタープリター
拡張機能のセットを選択する。Windows NT のバージョン (Windows 2000 より前) の場
合、この値は 1 である必要がある。Windows 2000 以降の場合、値は 2 である必要が
ある。
次のようにすれば使用するバージョンを選択できる:
変数が定義されていない際のデフォルトは、Windows 2000 以降をサポートする 2 とな
る。
オリジナルの MS-DOS では、コメント行を入力する代替手段としてダブルコロン(::)
を使うイディオムをサポートしている。このイディオムは現在の Windows コマンドイ
ンタープリタでも使えるが、( ... ) コマンドブロックの中で使うと問題になることが
ある。これについては Stack Overflow で議論されている -
https://stackoverflow.com/questions/12407800/which-comment-style-should-i-use-in-batch-files
Windows コマンドインタープリターでコマンドブロック内のコメントに :: イディオム
を使用できるようにするには、dosbatch_colons_comment 変数を任意の値に設定する:
この変数が設定されている場合、コマンドブロックの最後の行である :: コメントがエ
ラーとしてハイライトされる。
.btm ファイルを "dosbatch" タイプ (MS-DOS バッチファイル) として検出する
か、"btm" タイプ (4DOS バッチファイル) として検出するかを指定するオプションが
ある。デフォルトでは後者が使用される。以下の行で前者を選択することができる:
この変数が定義されていない、または0であると btm の構文が使われる。
DOXYGEN doxygen.vim doxygen-syntax
Doxygen は JavaDoc に似た特殊なフォーマットからコードのドキュメントを生成する。
この構文スクリプトは c, cpp, idl, php のファイルに対して Doxygen のハイライ
トを追加する。また、Java に対しても使える。
Doxygen のフォーマットを有効にするにはいくつかの方法がある。手動、またはモード
ラインでそのファイルの syntax に '.doxygen' を追加する。例:
C, C++, C#, IDL, PHP のファイルに対しては、グローバルまたはバッファローカルな
変数 load_doxygen_syntax を設定すれば自動的にこれが行われる。次の行を .vimrc
に加える。
構文ハイライトに影響を与える変数がいくつかある。また、これらは標準でないハイラ
イトオプションに関係している。
変数 既定値 効果
g:doxygen_enhanced_color
g:doxygen_enhanced_colour 0 Doxygen コメントに対して標準でないハイ
ライトを行う。
doxygen_my_rendering 0 HTML の太字、斜体、html_my_rendering
に対する下線の描画を無効にする。
doxygen_javadoc_autobrief 1 0にすると JavaDoc の autobrief に対す
るハイライトを無効にする。
doxygen_end_punctuation '[.]' brief の終わりを示す句読点にマッチする
正規表現。
また、次のハイライトグループを設定すると便利である。
ハイライト 効果
doxygenErrorComment code, verbatim, dot セクション中で句読点が抜け
ている終了コメントの色
doxygenLinkError \link セクションで \endlink が抜けているときの
終了コメントの色。
DTD dtd.vim ft-dtd-syntax
初期状態ではDTD構文ハイライトは大/小文字を区別する。区別しないようにするには、
起動設定ファイルに次の行を書き足す:
DTD構文ファイルでは未知のタグをエラーとしてハイライトする。これが煩わしいなら
ば、構文ファイルdtd.vimが読込まれる前に:
と設定することで無効化することができる。定義部内のパラメーターのエンティティ名
はハイライトグループ 'Type'、句読点と '%' は 'Comment' を使用してハイライトさ
れる。パラメーターエンティティの実体はハイライトグループ 'Constant' を、区切り
文字の%と;はハイライトグループ 'Type' を使用してハイライトされる。以下を設定す
るとこれを無効化できる:
XML内の埋め込みDTDをハイライト表示するために、DTDの構文ファイルはxml.vimからも
参照される。
EIFFEL eiffel.vim ft-eiffel-syntax
Eiffelは大小文字の区別をしないけれども、スタイルガイドラインが示すように、構文
ハイライトではそれらが区別される。これにより大小文字が違えば違うクラス名として
ハイライト表示することが可能になっている。大小文字の違いを無視してハイライトを
行うならば、起動設定ファイルに次の行を書き足す:
これを行ってもコメント内のクラス名とTODOの印には大小文字の区別がなされる。
逆に、もっと厳密に検査するには、次の行のいずれかを書き足す:
eiffel_strictを設定すると "Current", "Void", "Result", "Precursor" そして
"NONE" の5つの既定単語について、不正な大小文字の使用を捕捉し、機能やクラス名と
してそれらが使用されれば警告を与えるようになる。
eiffel_pedanticを設定すると、Eiffelのスタイルガイドラインを相当に厳格に強制す
る。(キーワードを大文字で書く時代遅れの方法と同様に、大小文字を任意にミックス
したようなものが捕捉される)
"Current", "Void", "Result" そして "Precursor" の小文字版を使用するには、大小
文字を区別するハイライト方法を無効化する代わりに:
という方法を使うことができる。
ISEが提案し、実験的に幾つかのコンパイラでは取り扱うことのできる、新しい生成構
文は次のコマンドで使用できるようになる:
最後に幾つかのベンダーは16進数定数値をサポートしている。それを取り扱うには:
この行を起動設定ファイルに書き足す。
EUPHORIA euphoria3.vim euphoria4.vim ft-euphoria-syntax
Euphoria には二つの構文強調表示ファイルがある。一つは Euphoria バージョン
3.1.1 用で、デフォルトではこれが使われる。もう一つは Euphoria 4.0.5 以降用であ
る。
Euphoria バージョン 3.1.1 (http://www.rapideuphoria.com/ リンク切れのようだ)
は DOS プラットフォームのアプリケーションの開発にまだ必要とされている。
Euphoria バージョン 4 (http://www.openeuphoria.org/) はそれをサポートしていな
い。
以下の拡張子のファイルは自動的に Euphoria ファイルタイプとして認識される:
*.e, *.eu, *.ew, *.ex, *.exu, *.exw
*.E, *.EU, *.EW, *.EX, *.EXU, *.EXW
Euphoria の構文強調ファイルを選択するには (*.e や *.E 拡張子のファイルが自動的
に Euphoria ファイルタイプとして認識された場合でも)、次の行を設定ファイルに加
える:
または
Elixir と Euphoria はファイル拡張子 *.ex を共有している。g:filetype_euphoria
変数でファイルタイプが Euphoria として明確に設定されている場合、またはファイル
内のキーワードに基づいてファイルが Euphoria であると判断された場合は、ファイル
タイプは Euphoria として設定される。それ以外の場合、ファイルタイプはデフォルト
で Elixir になる。
ERLANG erlang.vim ft-erlang-syntax
Erlang は Ericsson が開発した関数型プログラミング言語である。次の拡張子のファ
イルが Erlang ファイルとして認識される: erl, hrl, yaws
組み込み関数 (BIFs: built-in functions) はデフォルトで強調表示される。それを無
効化するには vimrc で次のように設定する:
いくつかの特殊アトムを強調表示するには、vimrc で次のように設定する:
ELIXIR elixir.vim ft-elixir-syntax
Elixir はスケーラブルでメンテナブルなアプリケーション向け動的関数言語である。
以下のファイル拡張子は自動的に Elixir ファイルタイプであると認識される:
*.ex, *.exs, *.eex, *.leex, *.lock
Elixir と Euphoria はファイル拡張子 *.ex を共有している。g:filetype_euphoria
変数でファイルタイプが Euphoria として明確に設定されている場合、またはファイル
内のキーワードに基づいてファイルが Euphoria であると判断された場合は、ファイル
タイプは Euphoria として設定される。それ以外の場合、ファイルタイプはデフォルト
で Elixir になる。
FLEXWIKI flexwiki.vim ft-flexwiki-syntax
FlexWiki は、ASP.NET ベースの wiki パッケージで、以前は
http://www.flexwiki.com で入手できた。
NOTE: このサイトは現在機能していない。Wikipedia によると 2009 年に開発がストッ
プした。
FlexWiki の構文のほとんどの一般的な要素に対して構文ハイライトができる。
FlexWiki のtplugin スクリプトはバッファローカルなオプションを設定し、FlexWiki
ページの編集をより便利にする。FlexWiki は改行を新しい段落の開始とみなすので、
このftplugin は 'tw' を0に設定し (行の長さを制限しない)、'wrap' をオンにし (長
い行を水平スクロールさせるのでなく、折り返す)、'linebreak' をオンにする (画面
上の最後の文字でなく 'breakat' の文字で折り返す)、などを行う。また、デフォルト
では無効にされているキーマップも含んでいる。
"j"、"k"、カーソルキーで表示行単位で移動するようにするキーマップを有効にするに
は次を .vimrc に追加する:
FORM form.vim ft-form-syntax
FORMファイルの構文要素に使用するカラースキームには、Conditional, Number,
Statement, Comment, PreProc, Type, そしてStringが、次の文献で定義される言語仕
様に沿って行われる。
文献: 'Symbolic Manipulation with FORM' by J.A.M. Vermaseren, CAN,
Netherlands, 1991.
デフォルトの色に変更を加えるには、次の構文グループを再定義すれば良い:
- formConditional
- formNumber
- formStatement
- formHeaderStatement
- formComment
- formPreProc
- formDirective
- formType
- formString
構文ファイルform.vimではFORMプリプロセッサーコマンドとディレクティブをそれぞ
れ、デフォルトでは同じ構文グループにしていることに注意。
FORM用の既定の拡張カラーモードではヘッダー命令とFORMプログラム本体での命令を区
別できるような色設定が利用可能である。拡張カラーモードを使用可能にするには、
ファイルvimrcに次の設定を書き足す:
拡張モードを使うことは、gvimで暗いディスプレイを使用した場合にも利点がある。命
令文は黄色ではなく明るい黄色で表示され、条件文は視認性のため明るい青で表示され
る。
".frm" にマッチするファイルのタイプは Visual Basic か FORM である。どちらを使
用するか検知するため、Vim はファイル先頭5行に "VB_Name" という文字列があるかを
調べる。検出したら、ファイルタイプを "vb" にし、そうでないなら "form" にする。
自動判別がうまく機能しない場合、または例えば FORM ファイルのみしか編集し
ない場合は、vimrcでこれを使用する:
FORTH forth.vim ft-forth-syntax
".f" にマッチするファイルは Fortran か Forth で、"*.fs" にマッチするファイルは
F# か Forth である。自動検出がうまくいかない場合や、F# や Fortran をまったく編
集しない場合は、スタートアップの vimrc でこれを使用する:
FORTRAN fortran.vim ft-fortran-syntax
デフォルトのハイライトと方言
Vim は、Fortran 2023 (最新の標準) に従ってハイライトする。Fortran 2023 は以前
のバージョン (Fortran 2018、2008、2003、95、90、77、および 66) のほぼスーパー
セットであるため、ほとんどの場合、この選択がほとんどのユーザーにとって適切であ
る。最近の Fortran 標準では、いくつかのレガシー構造が削除されたり、廃止予定宣
言されたりし、それぞれエラーおよび ToDo 項目としてハイライトされる。
構文スクリプトは Fortran 方言をサポートしなくなった。変数 fortran_dialect は暗
黙的に無視されるようになった。現在ではコンピュータの速度が大幅に向上しているた
め、変数 fortran_more_precise は必要なくなり、暗黙的に無視される。
Fortranソースコードの形式
Fortran のソースコードには固定形式と自由形式が有る。Note 形式が誤って設定され
ていると構文ハイライトが正しくされないことに注意。
新規にFortranのファイルを作成する場合には、構文ファイルは固定形式であると仮定
する。常に自由形式を使う場合には
使うには
ソースコードの形式もしくは標準的な方法ではないがファイルの拡張子に依存する場
合、もっとも簡単な方法は ftplugin の中で fortran_free_source を設定する。
ftplugin ファイルのより詳細な情報は ftplugin を参照。
Note あなたの .vimrc ファイルで "filetype plugin indent on" コマンドを "syntax
on" よりも前に実行した場合にのみ動作する事に注意する。
既存の Fortran ファイルを編集する時には、変数 fortran_free_source が設定されて
いれば構文ファイルは自由形式のソースであると仮定し、変数
fortran_fixed_source が設定されていれば固定形式のソースであると仮定する。これ
らの変数がどちらも設定されていないと仮定する。この場合は、ifort, gfortran Cray,
NAG, PathScale コンパイラ (.f, .for, 固定形式の .f77, .f90, .f95, .f03, 自由形
式の .f08) の共通的な拡張子の変換を試みてどのソースが使われているのかを判定す
る。.fpp および .ftn ファイル拡張子には、コンパイラによって処理方法が異なるた
め、デフォルトは使用されない。これらのどれも機能しない場合、スクリプトはファイ
ルの最初の 500 行の最初の 5 列を調べる。自由なソース形式の兆候が検出されない場
合、ファイルは固定ソース形式であると見なされる。アルゴリズムはほとんどの場合に
機能するはずである。
500 以上の全行コメントで始まるファイルなど、場合によっては、スクリプトがコード
が固定形式であると誤って判断することがある。その場合は、最初の 25 行の最初の 5
列の任意の位置で始まるコメント以外の命令文を追加し、ファイルの保存 (:w) そして
再読込 (:e!) を行う。
ベンダー拡張
固定形式 Fortran では最大 72 文字の行長とする必要があるが、過去 30 年間に作成
されたすべてのコンパイラと同様に、スクリプトでは最大 80 文字の行長が許可されて
いる。以下のようなコマンドで変数 fortran_extended_line_length を設定すると、さ
らに長い 132 文字の行長が許可される
CUDA Fortran 拡張をさらにハイライトしたい場合は、以下のようなコマンドで変数
fortran_CUDA を設定する必要がある
一般的な非標準のベンダー提供の組み込み関数の認識を有効にするには、以下のような
コマンドで変数 fortran_vendor_intrinsics を設定する必要がある
Fortranファイル内のタブ文字
標準のFortranではタブ文字は認識されない。固定桁位置での境界を必要とする固定形
式のFortranソースコードでタブ文字を使用するのは良いアイデアではない。従ってタ
ブ文字はエラーとしてハイライトされる。しかしながらプログラマによってはタブ文字
を使用することを望む場合があるだろう。Fortranファイルにタブ文字が含まれている
場合には、変数fortran_have_tabsをコマンド :syntax が実行される前に
ルによって不正な余白を検出することができなくなる。
Fortranファイルの構文による折り畳み
以下のようなコマンドで .vimrc に変数 fortran_fold を設定すると、Vim は、
foldmethod=syntax を使用してファイルを折り畳む
関数、サブプログラム、モジュール、サブモジュール、コメント行のブロック、および
ブロックデータ単位の折り畳み領域を定義するように構文スクリプトに指示する。ブ
ロック、インターフェイス、アソシエート、クリティカル、型定義、および変更チーム
の構成も折り畳まれる。以下のようなコマンドで変数 fortran_fold_conditionals も
設定する
り畳み領域が定義される。Note 大きなファイルの場合、折り畳み領域の定義が遅くな
る可能性があることに注意。
syntax/fortran.vim スクリプトにはヒントとなるコメントが含まれている。行をコメ
ントアウトしたりコメントを外したりすることで、(a) 非標準またはベンダー固有構文
の認識を有効化したり、(b) 2008 標準で削除または廃止予定となった機能を todo ア
イテムとしてハイライトしないようにしたりできる。
制限事項
丸カッコチェックは、閉じカッコの不足については捕捉できない。ホレリス定数は認識
されない。幾つかのキーワードはFortran90の予約語ではないので誤ってハイライトさ
れる。
Fortranに関するその他の情報はft-fortran-indentやft-fortran-pluginを参照。
FREEBASIC freebasic.vim ft-freebasic-syntax
FreeBASIC のファイルは利用可能な4つの方言、"fb", "qb", "fblite", "deprecated"
ごとに異なる方法でハイライトされる。適切な方言の選択方法は
ft-freebasic-plugin を参照のこと。
ハイライトは、さらに以下の変数で設定可能である。
変数 ハイライト
freebasic_no_comment_fold 複数行コメントの折り畳みを無効化
freebasic_operators 非英字オペレータ
freebasic_space_errors 末尾空白と空白の前の<Tab>
freebasic_type_suffixes QuickBASIC 形式の型接尾語
FVWM 設定ファイル fvwm.vim ft-fvwm-syntax
*fvwmrc*または*fvwm2rc*というパターンにマッチしないFvwm設定ファイルを認識させ
るには、ファイルmyfiletypefile.vimであなたのシステムに合ったパターンを設定しな
ければならない。具体的には、変数 "b:fvwm_version" にFvwmのメジャーバージョンを
指定し、オプション 'filetype' にfvwmを設定する。
例えば、/etc/X11/fvwm2/配下の全てのファイルをFvwm2の設定ファイルと認識させるに
は次のようにする:
GSP gsp.vim ft-gsp-syntax
GSPページのデフォルトカラーはhtml.vimにて定義され、Javaコード(Javaタグ内部や
インラインのバッククォート内)のカラーはjava.vimにて定義される。インライン
Javaコードをハイライトするために、html.vimで定義される以下のHTMLグループは、
再定義されている:
htmlString
htmlValue
htmlEndTag
htmlTag
htmlTagN
書かれた大抵の場所のインラインJavaコードは適切にハイライトされるが、幾つかの特
殊なケースではそうはならない。他のHTMLグループ内にインラインJavaコードを書いて
それが正しくハイライトされない場合には、必要な行をhtml.vimからコピーして
gspJavaをconstains節に加えれば、正しくハイライトされるようになる。
インラインJavaを示すバッククォートは、目立ちやすくするためにhtmlErrorグループ
でハイライトされる。
GROFF groff.vim ft-groff-syntax
groff構文ファイルはnroff.vimのラッパーであり、使用例と設定例についてはそこの
下に書かれている注意を参照。このラッパーの目的は、モードラインか個人用のファイ
ル定義ファイル(filetype.txt参照)からファイル形式をセットすることにより、
groff構文拡張を設定することである。
HASKELL haskell.vim lhaskell.vim ft-haskell-syntax
Haskell構文ファイルは、プレーンHaskellコードとliterate Haskellコード両方を
サポートしている。後者はBirdスタイルとTeXスタイル両方に対応している。Haskell用
の構文ハイライトはCプリプロセッサー命令もハイライトできる。
区切り文字もハイライトさせるには(明るい背景色を使っているなら便利)、次を.vimrc
に書き足す:
Haskell用の構文ハイライトはCプリプロセッサー命令もハイライトし、#で始まるが命
令として有効でない行をエラーとして警告する。Haskellの演算子の構文は#で始まるこ
ともあるため、これらが干渉する。これらをエラーでなく演算子としてハイライトした
いなら、次を.vimrcに書く:
literate Haskellコード用の構文ハイライトはファイルがTeXマークアップを含んでい
るかどうか、それに応じてTeX要素をハイライトするかどうかを自動的に推測しようと
する。.vimrcに次のような行を書くと、これをグローバルに上書きすることができる
数のバッファローカル版を使うこともできる。例.
文ハイライトを有効化するかファイルを読み込む前に設定しなければならない。
HTML html.vim ft-html-syntax
HTMLファイルのタグ用の構文ファイルは以下のように動作する。
開きタグの<>は、閉じタグの</>とは異なった色でハイライトされる。これは意図的に
そうしてある! 開きタグにはハイライト 'Function' が使用され、閉じタグにはハイラ
イト 'Identifier' が使用される(あなたの環境でこれらがどう定義されているかにつ
いては syntax.vim を参照すること)。
既知のタグ名はC命令文と同じようにハイライトされる。未知のタグ名は間違いを見分
けやすくするために、<>や</>と同じようにハイライトされる。
引数(もしくは属性)名にも同じことが言える。既知の属性名と未知の属性名には異なる
ハイライトがなされる。
幾つかのHTMLタグは表示する文字種を変更するために使用される。以下のタグは構文
ファイルhtml.vimによって認識され、その内容は通常の文字種とは異なる文字種で表示
される: <B> <I> <U> <EM> <STRONG> (<EM>は<I>のエイリアスとして使われ、<STRONG>
は<B>のエイリアス)、<H1> - <H6>、<HEAD>、<TITLE>そして<A>、ただしhrefが含まれ
ていてリンクとして使われている(例<A href="somefile.html">)場合。
それらのテキストの文字種を変更するには、以下の構文グループを再定義する必要があ
る:
- htmlBold
- htmlBoldUnderline
- htmlBoldUnderlineItalic
- htmlUnderline
- htmlUnderlineItalic
- htmlItalic
- htmlTitle タイトル用
- htmlH1 - htmlH6 見出し用
この再定義が機能するためには最後の2つを除くすべてを再定義しなければならない。
最後の2つ、htmlTitleとhtmlH[1-6]は任意である。そして次の変数をvimrcで設定しな
ければならない(初期化の際に読み込まれるファイルの順序のせい)。
この例については以下からmysyntax.vimをダウンロードすること。
http://www.fleiner.com/vim/download.html
次の行をvimrcに加えればこの描画を無効にできる:
デフォルトでは、Vim は最初の表示行の 250 行前に構文を同期する。これは以下のよ
うに設定できる:
HTMLコメントはむしろ特別で(詳細はHTMLリファレンスドキュメントを参照)、すべての
エラーをハイライトする。しかしその間違ったスタイル(<!--で始まり-->で終わる)を
使いたいならこれを定義する
HTMLドキュメント中に埋め込まれたJavaScriptやVisual Basicについては、文は
'Special' でハイライトされ、コメントや文字列などは標準のプログラミング言語と同
じように色づけされる。現在のところサポートされているのはJavaScriptとVisual
Basicだけであり、他のスクリプト言語はまだ加えられていない。
カスケードスタイルシート(CSS)の埋め込みとインラインもハイライトされる。
htmlプロセッサー言語は複数ある。html.vimはインクルードしやすいように簡素に書か
れている。html.vimをインクルードするには以下の2行をその言語用の構文ファイルに
書き足すこと(この例はasp.vimからとった):
そしてプリプロセッサー言語を含むすべての領域をクラスタhtmlPreprocに加えればよ
い。
html-folding
HTML 構文ファイルは、開始タグと終了タグ間の構文折り畳み folding (:syn-fold
を参照) を提供する。これは次の方法でオンにできる
Note: 構文による折り畳みは、構文ハイライトを著しく遅くする可能性がある。特に巨
大なファイルではそうである。
HTML/OS (BY AESTIVA) htmlos.vim ft-htmlos-syntax
HTML/OS用のカラースキームは以下のように機能する:
デフォルトでは関数名と変数名は同じである。これは、Vimは関数と識別子に異なる色
を指定しないためである。これを変えるには(関数名を違う色にしたいならこうすると
よい)次の行を~/.vimrcに書き加える:
もちろん好みに応じてctermfgは違う色にしてよい。
HTML/OSに関するもう1つの問題は、ファイルがHTML/OSコーディングであることを示す
特別なファイル形式が存在しないことである。そのため、ファイルを開いた後に次のよ
うにしてHTML/OS構文をオンにしなければならない:
HTML/OSコードのブロックの開始と終了を示す文字は、それぞれ<<または[[,
>>または]]のどちらであってもよい。
IA64 ia64.vim intel-itanium ft-ia64-syntax
Intel Itanium 64アセンブリ言語用のハイライト。このファイル形式を認識させる方法
についてはasm.vimを参照。
*.incファイルをIA64と認識させるには次を.vimrcに書き足す:
INFORM inform.vim ft-inform-syntax
Inform構文ハイライトはInform Libraryによって提供されるシンボルを含んでいる。ほ
とんどのプログラムがそれを利用しているためである。Libraryのシンボルをハイライ
トさせたくないなら、次をvim初期化ファイルに加える:
デフォルトではInformプログラムはZ-machineターゲットと仮定され、Z-machineアセン
ブリ言語シンボルが適切にハイライトされる。もしプログラムがGlulx/Glk環境をター
ゲットとしたものなら、次を初期化ファイルに加える:
こうすると代わりにGlulxオペコードをハイライトし、glk()をシステム関数としてハイ
ライトする。
Informコンパイラはある古いキーワードをエラーとみなす。普通、これらのキーワード
はエラーとしてハイライトされる。これをエラーとしてハイライトするのをやめるに
は、次を初期化ファイルに加える:
デフォルトではハイライトされる言語機能はコンパイラのバージョン6.30とライブラリ
のバージョン6.11に従う。これより古いInform開発環境を使っているなら、次の行を初
期化ファイルに加えるとよいかもしれない:
IDL idl.vim idl-syntax
IDL (Interface Definition Language) ファイルは RPC 呼び出しを定義するために使
われる。Microsoft の世界では COM インターフェイスと呼び出しの定義にも使われる。
IDL の構造は単純であるため、ヒューリスティックな方法でなく、完全に文法にのっ
とったアプローチができる。その結果は巨大でいくぶん冗長であるが、一応は機能する
ようである。
idl ファイルには Microsoft 拡張がある。それらのうちいくつかは
idl_no_ms_extensions を定義すると無効になる。
より複雑な拡張は idl_no_extensions を定義すると無効になる。
変数 効果
idl_no_ms_extensions Microsoft 独自の拡張の一部を無効にする
idl_no_extensions 複雑な拡張を無効にする
idlsyntax_showerror IDL エラーを表示する (少々うるさいがとても助け
になる)
idlsyntax_showerror_soft エラーに対してデフォルトでよりソフトな色を使う
JAVA java.vim ft-java-syntax
java.vim構文ハイライトファイルはいくつかのオプションを提供している。
Java 1.0.2では、丸括弧の内側に波括弧が入ることは絶対になかったため、これはエ
ラーと判断された。Java1.1以降では、(無名クラスとともに) これが可能になったた
め、エラーと判断されなくなった。もし以前のようにしたい場合、Vim の初期化ファイ
ルに次の行を加えること:
java.lang で宣言されたすべての (エクスポートされた) パブリック型は常に自動的
にインポートされ、単純な名前として使用できる。これらをハイライトするには、以下
を使用する:
http://www.fleiner.com/vim/download.html で javaid.vim スクリプトをダウンロー
ドすると、ほとんどの標準 Java パッケージの型をハイライトすることもできる。特定
のパッケージ (例えば、java.io) の型のみをハイライトしたい場合は、以下のよう
にする:
インデントされた関数宣言のヘッダーは (ラムダ式やメソッド参照式の一部とともに)
ハイライトできるが、これは Java コードの記述方法によって異なる。認識される形式
は 2 つある:
1) 関数宣言をタブ、または、8 つまでのスペース文字で一貫してインデントして記述
する場合は、以下のいずれか設定する
意。
2) しかし、関数や型の名前の付け方 (大文字小文字の区別) に関する Java ガイドラ
インに従っており、インデントがある場合は、以下のように設定するとよいかもしれな
い
さらに、"g:java_highlight_functions" の任意の値を以下と組み合わせて、
ら区別してハイライトしたり、矢印が付いたラムダ式の引数リストの括弧を、その仮引
数または識別子から区別してハイライトしたりすることができる。
もし、どちらの設定も機能せず、それでも関数宣言のヘッダーをハイライトしたい場合
は、現在の構文定義を変更するか、新しい構文定義を作成すること。
高階関数型は目視で解析するのが難しいため、一部のコンポーネントを統一的にトーン
ダウンすると効果的かもしれない。このような型名が Java 命名ガイドラインに準拠し
ている限り、以下で並べ替えることができる
Java 1.1 では、関数 System.out.println() と System.err.println() はデバッ
グのためだけに使用すべきである。スタートアップファイルに以下の定義を追加するこ
とを検討するとよい:
*Debug debugging statements,
さらに、独自の項目のいくつかをグループ化してリンクする:
*Special as DebugSpecial,
*String as DebugString,
*Boolean as DebugBoolean,
*Type as DebugType,
これらはそれぞれ、文字列内に表示される特殊文字、文字列自体、真偽値リテラル、お
よび特殊なインスタンス参照 (super、this、null) に使用される。
Javadoc は、Java プログラムファイルから特別なコメントを取り出し、HTML ページを
作成するプログラムである。標準設定では、この HTML コードは HTML ファイルと同様
にハイライトされる (html.vim を参照)。このコード内に JavaScript と CSS を追
加することもできる (以下を参照)。HTML および Markdown のレンダリングは次のよう
に分岐する:
1. 最初の文 (後ろに空白文字または行末文字が続く最初のピリオド . までのすべ
ての文字、または最初のブロックタグまでのすべての文字。例: @param、
@return) は以下として色付けされる
*SpecialComment special comments.
2. テキストは以下として色付けされる
*Comment comments.
3. HTML コメントは以下として色付けされる
*Special special symbols.
4. 標準の Javadoc タグ (@code、@see 等) は以下として色付けされる
*Special special symbols
そして、それらの引数の一部は以下として色付けされる
*Function function names.
HTML と Markdown の両方でこの機能をオフにするには、スタートアップファイルに以
下の行を追加する:
Markdown コメントの追加サポートについては ft-java-plugin を参照。
上で説明した特別な Javadoc コメントのハイライトを使用する場合、JavaScript、
Visual Basic スクリプト、埋め込み CSS (スタイルシート) の特別なハイライトもオ
ンにすることができる。これは、これらの言語のいずれかが実際に Javadoc コメント
に現れる場合にのみ意味がある。使用する変数は以下:
数字と文字列は、以下で Javadoc 以外のコメントでも認識される
'foldmethod' が "syntax" に設定されている場合、コードブロックと複数行コメント
は折り畳まれる。複数行コメントの最初の行には通常テキストが書かれていないため、
デフォルトの 'foldtext' 値では、Javadoc コメントの折り畳まれた内容は情報が少な
くなる。この方法で書かれたコメントの場合は 2 行目の内容を表示し、それ以外の場
合は 1 行目の内容を表示するように以下で選択できる
末尾の空白文字またはタブ文字の前の連続したスペース文字は、以下でエラーとして
マークされる
ネストされた括弧を異なる色でハイライトするには、javaParen、javaParen1、
javaParen2 の色を定義する。例えば、
特定の修飾子は互いに相容れられない。例: abstract と final:
後方スクロール中に CTRL-L で再描画すると修正されるハイライトエラーが発生する
場合は、"g:java_minlines" 変数をより大きな数値に設定してみて欲しい:
10 である。大きな数値を使用すると、再描画が遅くなる可能性があるという欠点があ
る。
Java プラットフォームへの重要な変更は、リリース用に実装されたり、プレビュー機
能として提供される JDK Enhancement Proposals (JEPs) の形で徐々に導入される。こ
のような機能がプラットフォームに統合されるか、この取り組みから取り下げられるま
でには、複数の JEP とリリースサイクルが必要になる場合がある。アーリーアダプター
に対応するため Vim には実装されている構文関連のプレビュー機能に対するオプショ
ンのサポートがある。以下のようにプレビュー機能番号のリストを指定して、これをリ
クエストできる:
サポートされている JEP 番号は以下の表から取得される:
430: String Templates [JDK 21]
455: Primitive types in Patterns, instanceof, and switch
476: Module Import Declarations
Note 特定のプレビュー機能が Java プラットフォームに統合されると、すぐにそのエ
ントリはテーブルから削除され、関連するオプション機能は廃止されることに注意。
JSON json.vim ft-json-syntax g:vim_json_conceal
g:vim_json_warnings
json構文ファイルは、標準で conceal サポート付きのシンタックスハイライトを提供
する。conceal を無効にするには:
エラーのシンタックスハイライトを無効にするには:
JQ jq.vim jq_quote_highlight ft-jq-syntax
数字に独自の色を付けないようにするには、vimrc に以下のコードを追加する:
引用符を文字列とは異なるハイライトにしたい場合は
LACE lace.vim ft-lace-syntax
Lace (Language for Assembly of Classes in Eiffel)は大文字・小文字を無視する。
しかしスタイルガイドラインはそうでない。大文字・小文字を区別してハイライトさせ
るには、vim変数 'lace_case_insensitive' を初期化ファイル中で定義すればよい:
LF (LFRC) lf.vim ft-lf-syntax g:lf_shell_syntax
b:lf_shell_syntax
lf ファイルマネージャー構成ファイル (lfrc) の場合、以下の変数を使用して異なる
'include' コマンド検索パターンを設定することにより、シェルコマンド構文のハイラ
イトをグローバルおよびバッファごとに変更できる:
これらの変数はデフォルトでは設定されていない。
デフォルトの 'include' コマンド検索パターンは 'syntax/sh.vim' である。
LEX lex.vim ft-lex-syntax
"^%%$" セクションデリミタが、その後にどんなセクションが続くかの手がかりを与え
ないため、Lexはブルートフォースなシンクロナイズを行う。それゆえ(巨大なlexファ
イルなどで)同期の問題が起こる場合には:
LIFELINES lifelines.vim ft-lifelines-syntax
廃止された関数をエラーとしてハイライトしたい場合は .vimrc で次のように設定する
こと:
LISP lisp.vim ft-lisp-syntax
lisp の構文ハイライトには2つのオプションがある:
オプション g:lisp_rainbow は括弧とバッククォートされた括弧に対して10段階の異な
る色をつける。色づけ段階の多さのため、rainbow モード自身が ctermfg とguifg を
使ってハイライトを指定する (rainbow モードでない場合はそうではない)。それゆえ、
ハイライトグループを使う普通のカラースキームの影響を受けない。実際にどうハイラ
イトされるかはdark/bright の設定 ('bg' を参照) による。
LITE lite.vim ft-lite-syntax
lite構文ハイライトには2つのオプションがある。
文字列中でSQL構文ハイライトを行ってほしいならこうする:
シンクロナイズの最小行数はデフォルトで100になっている。他の値に変えたいなら
"lite_minlines" をセットすればよい。例:
LPC lpc.vim ft-lpc-syntax
LPCはシンプルでメモリ効率的な言語、Lars Pensjö Cの略である。LPCのファイル名は
通常*.cである。これらのファイルをLPCと認識するとCプログラムのみを書くユーザー
の迷惑になる。LPC構文を使用したいなら、.vimrcでこの変数をセットすること:
これでも適切に動作しないCまたはLPCのファイルに対してはモードラインを使うこと。
LPCファイルには:
LPCと認識されてしまうCファイルには:
変数をセットしたくないなら全てのLPCファイルでモードラインを使うこと。
LPCには複数の実装がある。我々はもっとも広く使われているものをサポートしたいと
思っている。デフォルトのLPC文法はMudOSシリーズ用である。MudOS v22以前を使って
いるなら、次をセットすることによりsensible モディファイヤをオフにし、v22以降の
新しいefunを無効にするとよい。MudOSの最新版を使っているときはこの変数をセット
しないこと:
LPCのLpMud 3.2シリーズには:
LPCのLPC4シリーズには:
LPCのuLPCシリーズには:
uLPCはPike用に開発されている。なのでPike構文を代わりに使い、ソースファイルの名
前を.pikeとすること。
LUA lua.vim ft-lua-syntax
Lua 構文ファイルはバージョン 4.0, 5.0, 5.1, 5.2 に対して使える (5.2 がデフォル
ト) グローバル変数 lua_version と lua_subversion を設定することでバージョンを
指定することができる。例えば、Lua 5.1 の構文ハイライトを有効にするには次のよう
に変数を設定する:
MAIL mail.vim ft-mail.vim
Vimはemailの標準的な要素(ヘッダー、シグネチャ、引用文、URL / emailアドレス)の
全てをハイライトする。標準的な慣習に従い、シグネチャは、"--" とそれに続く任意
個の空白、そして改行のみからなる行で始まる。
Vimは ']', '}', '|', '>' で始まる行または '>' が続く単語を引用文とみなす。引用
文中のヘッダーとシグネチャについては、テキストが '>' (1個のスペースが続いても
よい)で引用された場合のみハイライトする。
デフォルトではmail.vimは先頭表示行の100行前までの構文をシンクロナイズさせる。
遅いマシンを使っていて、一般的に短いヘッダーのemailを扱っているなら、これをよ
り小さい値に変えることができる:
MAKE make.vim ft-make-syntax
Makefileではエラーを見つけやすくするためにコマンドがハイライトされる。しかし、
これは色が多すぎるかもしれない。この機能をオフにするにはこうする:
コメントもデフォルトでハイライトされる。これをオフにするには:
Microsoft Makefile は変数の展開とコメントを異なる方法で処理する (エスケープに
バックスラッシュは使用されない)。このために間違ったハイライトが表示される場合
は、以下を試すこと:
MAPLE maple.vim ft-maple-syntax
Waterloo Maple IncによるMaple Vは記号代数をサポートしている。その言語はユーザー
によって選択的にロードされる関数のパッケージをたくさんサポートしている。Maple
V release 4で供給される標準的なパッケージセットの関数がユーザーの判断によって
強調される。ユーザーは.vimrcに以下を書くと、全てのパッケージ関数がハイライトさ
れる:
あるいは以下の表から任意のサブセット変数/パッケージを選んで.vimrcファイル中で
その変数を1にセットしてもよい($VIMRUNTIME/syntax/syntax.vimを読み込む前に行う
必要がある)。
Maple V パッケージ関数選択肢の表
MARKDOWN ft-markdown-syntax g:markdown_minlines
g:markdown_fenced_languages g:markdown_syntax_conceal
長い領域がある場合、間違ったハイライトがおこなわれる可能性がある。表示を遅くす
る代償として、エンジンに領域の開始を同期するためにもっと後方を見るようにするこ
とができる。500行の例 (デフォルトは 50):
markdown ドキュメントで囲われたコードブロックの構文ハイライトを有効にしたい場
合は、以下のようにする:
markdown 構文の conceal を無効にするには、vimrc に以下を追加する:
MATHEMATICA mma.vim ft-mma-syntax ft-mathematica-syntax
次を .vimrc に書いておかないかぎり、空の *.m ファイルは自動的に Matlab のファ
イルであるとみなされる:
MEDIAWIKI ft-mediawiki-syntax
デフォルトでは、構文のハイライトにはスタイルやヘッダーなどの基本的な HTML タグ
が含まれる html.vim。厳密な Mediawiki 構文のハイライトは以下:
HTML のハイライトが必要な場合は、以下によって太字や斜体などの端末ベースのテキ
スト書式設定が可能:
MODULA2 modula2.vim ft-modula2-syntax
Vim は方言タグを持つコメントを認識し、特定の方言を自動的に選択する。
方言タグのコメントの構文は次のとおり:
方言タグのコメントは、ソースファイルの最初の 200 行以内にある場合に Vim によっ
て認識される。そのようなコメントは最初のものだけが認識され、追加の方言タグのコ
メントは無視される。
例:
変数 g:modula2_default_dialect は、Modula-2 ファイルの内容から方言を決定できな
い場合に、デフォルトの Modula-2 方言を設定する。定義されて 'm2pim' に設定され
ている場合、デフォルトの方言は PIM になる。
例:
ハイライトは、以下の変数を使用して方言ごとにさらに構成できる。
変数 ハイライト
modula2_iso_allow_lowline 識別子内のアンダースコアを許可する
modula2_iso_disallow_octals 8 進数リテラルを禁止する
modula2_iso_disallow_synonyms "@", "&" および "~" の同義語を禁止する
modula2_pim_allow_lowline 識別子内のアンダースコアを許可する
modula2_pim_disallow_octals 8 進数リテラルを禁止する
modula2_pim_disallow_synonyms "&" および "~" の同義語を禁止する
modula2_r10_allow_lowline 識別子内のアンダースコアを許可する
MOO moo.vim ft-moo-syntax
式の中でCスタイルのコメントを使っていて、それがハイライトを乱している場合は、C
スタイル用の拡張マッチ(これは遅い!)を使うことができる:
文字列中の代名詞置換パターンのハイライトを無効化させるには:
正規表現演算子 '%l' のハイライトと文字列中の '%(' と '%)' のマッチを無効化させ
るには:
対応していないダブルクォートを認識してエラーとしてハイライトすることができる:
組み込みプロパティ(.name, .location, .programmerなど)をハイライトするには:
未知の組み込み関数を認識してエラーとしてハイライトすることができる。このオプ
ションを使うなら、mooKnownBuiltinFunctionグループに自分自身の拡張を加えること。
このオプションを有効化するには:
既知の組み込み関数のリストにsprintf()を加える例:
MSQL msql.vim ft-msql-syntax
msql構文ハイライトには2つのオプションがある。
文字列中でSQL構文ハイライトをさせるにはこうする:
シンクロナイズは、minlinesはデフォルトで100になっている。この値を変えるには、
"msql_minlines" の望む値にすればよい。例:
NEOMUTT neomutt.vim ft-neomuttrc-syntax
ft-neomuttlog-syntax
デフォルトの NeoMutt ログの色を無効にするには:
N1QL n1ql.vim ft-n1ql-syntax
N1QL は、Couchbase Server データベースで JSON 文書を操作するための SQL ライク
な宣言型言語である。
Vim は、N1QL ステートメント、キーワード、オペレータ、型、コメントおよび特殊な
値を構文ハイライトする。COLUMN や CHAR のような、N1QL に存在しない SQL 特有な
構文要素やその他たくさんある方言は無視される。
NCF ncf.vim ft-ncf-syntax
NCF構文ハイライトには1つのオプションがある。
ncf.vimによって認識されない文をエラーとしてハイライトさせるにはこうする:
これらをエラーとしてハイライトさせたくない場合は、この変数をセットしないでお
く。
NROFF nroff.vim ft-nroff-syntax
nroff構文ファイルはそのままでAT&T n/troffに対応している。構文ファイルに含まれ
ているGNU groff拡張機能を使うには、それを有効化する必要がある。
例えば、LinuxとBSDディストリビューションは、デフォルトではテキスト処理パッケー
ジとしてgroffを使う。groff用の拡張構文ハイライト機能を有効化するには、ファイル
を groff (ft-groff-syntax を参照)として認識されるように調整する、あるいは次
のオプションを初期化ファイルに加える:
groffは、Solarisでまだ使われているかもしれない古いAT&T n/troffとは異なる。
groffのマクロとリクエスト名は2文字以上の長さであってもよく、言語プリミティブに
拡張がされている。例えば、AT&T troffではリクエスト\(yrを使い、2桁の数で年にア
クセスする。groffでは互換性のために同じリクエストを使うこともできるし、または
groffネイティブの構文,\[yr]を使うこともできる。さらに、\[year]として4桁の年を
直接使うこともできる。マクロリクエストは2文字以上の長さであってもよい。例えば、
GNU mmはverbatim環境を作るのに ".VERBON" と ".VERBOFF" というリクエストを受け
つける。
g/troffによって得られる最良の整形された出力を得るには、スペースと句読点に関す
るいくつかの単純なルールに従うべきである。
1. 行の末尾に空のスペースを置かないこと
2. 文末のピリオド、エクスクラメーションマークなどの後にはちょうど1個のスペース
を置くこと。
3. 後述の理由により、全てのピリオドの後に改行(carriage return)を置くとよい。
これらの妙なtipsの理由は、g/n/troffが改行に、これらのルールに従わないとすぐに
混乱してしまうアルゴリズムを使っているためである。
troffはTeXと違い、段落ごとでなく行ごとにテキストを書き込む。さらに、glueや
stretchの概念を持たず、入力に水平、垂直の空白があると全てそのまま出力される。
それゆえ、最終的なドキュメントで意図する以上の空白を文と文の間にはさまないよう
に注意すること。この理由のため、全ての句読点記号の後すぐに改行を入れるという習
慣がある。最終的に処理された出力が「一様な」テキストになってほしければ、入力の
テキストで正しくスペースを置いておく必要がある。行末の空白と句読点の後の2個以
上の空白をエラーとしてハイライトしたいならこうする:
正しい活字組みと干渉するかもしれないが、余分な空白や他のエラーを検出するもう1
つの方法は、設定ファイル中で構文グループ "nroffDefinition" と "nroffDefSpecial"
に目立つハイライト定義を定義することである。例:
ソースファイル中のプリプロセッサーのエントリをセクションマーカーと同じくらい容
易に表示させたいなら、.vimrc中で次のオプションを有効化する:
同様に、構文ファイルはmsパッケージ中の拡張段落マクロ(.XP)用の余分な段落マーカー
も含んでいる。
最後に、構文ファイルgroff.vimが存在する。これはデフォルトでfile basisとグ
ローバルの両方でgroff構文ハイライトすることができる。
OCAML ocaml.vim ft-ocaml-syntax
OCaml構文ファイルは以下の拡張子を持つファイルに対応している: .ml, .mli, .mll
.mly。以下の変数をセットする:
標準的OCaml構文からcamlp4プリプロセッサでサポートされている修正構文に切り替え
ることができる:
"end" がエラーとしてハイライトされるのを防ぐ。これは、ソースに Vim が同期しな
い非常に長い構造が含まれている場合に便利である。
PANDOC ft-pandoc-syntax
デフォルトでは、markdown ファイルはファイルタイプ "markdown" として検出される。
あるいは、代わりにファイルタイプ "pandoc" として検出されるようにすることもで
る。これを行うには、g:filetype_md 変数を設定する:
Pandoc 構文プラグインは、きれいにハイライトするために conceal を使用する。デ
フォルトは 1
非表示にすべきでない要素を指定するには、以下の変数を設定する:
ここで使用できるルールのリストは以下のとおり:
- titleblock
- image
- block
- subscript
- superscript
- strikeout
- atx
- codeblock_start
- codeblock_delim
- footnote
- definition
- list
- newline
- dashes
- ellipses
- quotes
- inlinecode
- inlinemath
非表示の動作方法をカスタマイズできる。例えば、脚注に * 記号を付けたい場合は、
以下のようにする:
リンク内の URL を非表示にするには、次を使用する:
特定のコードブロックタイプをハイライトしないようにして、通常のままにする。コー
ドブロックの種類には、定義ブロック内のコードブロックの "definition" と、区切ら
れたコードブロックの "delimited" が含まれる。デフォルト = []
言語が指定されている場合は、区切り文字で区切られたコードブロックに埋め込みハイ
ライトを使用する。デフォルト = 1
埋め込みをハイライトする言語と構文ファイルを指定する。これは言語名のリストであ
る。Pandoc と vim が使用する言語が一致しない場合は、"PANDOC=VIM" 構文を使用で
きる。例:
イタリックと強調を使用する。デフォルト = 1
"0" を指定すると、g:pandoc#syntax#conceal#blacklist に "block" が追加される。
そうしないと、スタイルがどこに適用されているかが分からなくなるからである。
下線付き文字、上付き文字、取り消し線のテキストスタイルを追加する。
デフォルト = 1
定義リストを検出してハイライトする。これを無効にするとパフォーマンスが向上する
可能性がある。デフォルト = 1 (つまり、デフォルトで有効)
Pandoc 構文スクリプトには、次のコマンドも付属している:
コードブロック内の言語 LANG の埋め込み強調表示を有効にする。
g:pandoc#syntax#codeblocks#embeds#langs の項目の構文を使用する。
コードブロック内の言語 LANG の埋め込み強調表示を無効にする。
PAPP papp.vim ft-papp-syntax
PApp構文ファイルは.pappファイルと、その小さな拡張、トップレベルのファイル
フォーマットとしてxmlを用いたperl/xml/html/その他の混合である.pxml, .pxslファ
イルを扱う。デフォルトでは、phtmlやpxmlセクションの内側の全ては埋め込みプリプ
ロセッサーコマンドつきの文字列として扱われる。次の変数を初期化ファイルで設定す
るとphtmlセクションの内側のhtmlコードを構文ハイライトしようとする:
しかしこれは比較的遅く、実用的に編集するにはカラフルすぎる。
構文ファイルpapp.vimの最新版は、通常以下で得られる。
http://papp.plan9.de
PASCAL pascal.vim ft-pascal-syntax
"*.p" にマッチするファイルのタイプは Progress か Pascal で、"*.pp" にマッチす
るファイルのタイプは Puppet か Pascal ある。自動判別がうまく機能しない場合、ま
たは Pascal ファイルしか編集しない場合は、vimrcでこれを使用する:
Pascal構文ファイルはTurbo Pascal, Free Pascal CompilerとGNU Pascal Compilerで
提供される拡張に対応するための拡張が施されてきた。Delphiのキーワードもサポート
されている。デフォルトではTurbo Pascal 7.0の機能が有効化されている。標準的な
Pascalのキーワードだけを使いたいなら、次の行を初期化ファイルに加えること:
Delphi固有の構文(1行コメント、キーワード等)を有効化したいなら:
オプションpascal_symbol_operatorは、+, *などのような演算子記号をOperatorの色を
使って表示するどうかを制御する。演算子記号を色づけするには、次の行を初期化ファ
イルに加えること:
いくつかの関数はデフォルトでハイライトされる。これをオフにするには:
さらに、いくつかのコンパイラ用に個別の変数がある。pascal_delphi, pascal_gpc,
pascal_fpcがある。デフォルトの拡張はTurbo Pascalに合うようになっている。
または
文字列が1行で定義されるものとするなら、変数pascal_one_line_string variableを定
義するとよい。
タブ文字が好きでないなら、変数pascal_no_tabsをセットするとよい。するとタブがエ
ラーとしてハイライトされる。
PERL perl.vim ft-perl-syntax
perl用の構文ハイライトにはたくさんのオプションがある。
インライン POD 強調表示はデフォルトで有効化される。Perl ファイル内に埋め込まれ
たPOD を強調表示して複雑にしたくない場合は、'perl_include_pod' オプションを 0
に設定する:
パースの複雑さを軽減するために (そしてパフォーマンスを上げるために)、変数名と
内容のパースにおける2つの要素をオフにすることができる。
変数名と関数名中のパッケージ参照 ('$PkgName::VarName' 中の 'PkgName::' のよう
な) を他の名前と区別しないようにするには次のようにする:
(Vim 6.x では違う方法だった: "perl_want_scope_in_variables" を設定するとこの機
能が有効になった)
'@{${"foo"}}' のように複雑なものをパースさせたくないなら次のようにする:
(Vim 6.x では違う方法だった: "perl_extended_vars" を設定するとこの機能が有効に
なった)
文字列の色づけは変更できる。デフォルトでは文字列とqq friendsは第1行と同じよう
にハイライトされる。変数perl_string_as_statementをセットすると第2行のようにハ
イライトされる。
"hello world!"; qq|hello world|;
^^^^^^^^^^^^^^NN^^^^^^^^^^^^^^^N (unlet perl_string_as_statement)
S^^^^^^^^^^^^SNNSSS^^^^^^^^^^^SN (let perl_string_as_statement)
(^ = perlString, S = perlStatement, N = None at all)
シンクロナイズには3つのオプションがある。最初の2つは、シンクロナイズのトリガー
の一部をオフにするもので、ハイライトが適切に機能しないときのみ必要になる。スク
ロール中に突然スクリーン全体の色がすっかり変わってしまったらこれらのうち1つを
オフにしてみること。その誤りを引き起こした行を特定できる場合、それを開発者に知
らせてください。
1つのトリガーは "^\s*sub\s*" に関するもので、もう1つはほぼ "^[$@%]" に関するも
のである。
以下のようにして、どこから構文ハイライトを始めるかの最大距離を設定できる:
perlで折りたたみを使いたいならperl_foldをセットすること:
if 文などでも同様にブロックを折り畳みたければ、次のように設定する:
デフォルトでは 'perl_fold' が設定されていればサブルーチンの折り畳みは有効化さ
れる。無効化したい場合は 'perl_nofold_subs' を設定する:
デフォルトでは無名サブルーチンは折り畳まれない。折り畳みを有効化するには
'perl_fold_anonymous_subs' を設定する:
デフォルトでは 'perl_fold' が設定されていればパッケージは折り畳まれる。無効化
したい場合は 'perl_nofold_packages' を設定する:
PHP3 and PHP4 php.vim php3.vim ft-php-syntax ft-php3-syntax
[Note: これは以前は "php3" と呼ばれていた。しかし現在はphp4もサポートしている
ので "php" と名前が変更された]
php用の構文ハイライトには以下のオプションがある。
文字列中でSQL構文ハイライトを行いたいなら:
Baselibメソッドのハイライトを行いたいなら:
文字列中でHTML構文ハイライトを行いたいなら:
古いカラースタイルを使いたいなら:
ASPスタイルのショートタグを有効化したいなら:
ショートタグを無効化したいなら:
] や ) の対応エラーをハイライトしたいなら:
対応する閉じ括弧がない開き括弧 ( や [ が存在する場合、php終了タグをスキップさ
せたいなら:
クラスや関数の折り畳みを有効化するには:
シンクロナイズ方法を選ぶには:
x = -1 で検索によるシンクロナイズ(デフォルト)
x > 0 少なくともx行上までシンクロナイズ
x = 0 最初からシンクロナイズ
PLAINTEX plaintex.vim ft-plaintex-syntax
TeX とは組版言語であり、plaintex は「素の」TeX に対して使われるファイルタイプ
である。*.tex ファイルを決して素の TeX と認識してほしくないならば
ft-tex-plugin を参照。
この構文ファイルは次のオプションを持つ
角括弧 "[]" と波括弧 "{}" をハイライトさせるには上の変数を設定する。
PPWIZARD ppwiz.vim ft-ppwiz-syntax
PPWizardはHTMLとOS/2 INFファイル用のプリプロセッサーである。
構文ファイルは以下のオプションを持つ:
- ppwiz_highlight_defs : PPWizardの定義についてのハイライトモードを決める。
とりうる値は
ppwiz_highlight_defs = 1 : #define 文においてその内容の色を保つ(例. PPWizard
マクロと変数)。
ppwiz_highlight_defs = 2 : 行継続記号を除き、#defineと#evaluate文が単一の色
で表示される。
ppwiz_highlight_defsのデフォルトは1である。
- ppwiz_with_html : この値が1(デフォルト)なら、HTMLコードをハイライトする。0な
らHTMLコードを通常のテキストのように扱う。
PHTML phtml.vim ft-phtml-syntax
phtml用の構文ハイライトには2つのオプションがある。
文字列中でSQL構文ハイライトをさせたいならこうする:
シンクロナイズについては、minlinesのデフォルトは100になっている。他の値にした
いなら "phtml_minlines" を望む値にセットすればよい。例:
POSTSCRIPT postscr.vim ft-postscr-syntax
PostScript用の構文ハイライトにはいくつかのオプションがある。
まず、どのバージョンのPostScript言語をハイライトするかである。現在のところ、言
語の3つのバージョン、あるいはレベルが定義されている。レベル1はオリジナルの基本
バージョンで、レベル2のリリース以前のすべての拡張を含んでいる。レベル2はもっと
も一般的なバージョンで、レベル3リリース以前のすべての拡張を含んでいる。レベル3
は現在のところサポートされている中でもっともレベルが高い。次のように変数
postscr_levelを定義することによって、PostScript言語のどのレベルをハイライトす
るか選ぶことができる:
この変数が定義されていないときはデフォルトの2(レベル2)になる。これが現在のとこ
ろもっとも普及しているためである。
Note: すべてのPSインタープリターがその言語レベルのすべての言語機能をサポートし
ているわけではない。とくに、PSファイルの先頭の%!PS-Adobe-3.0は現在の
PostScriptがレベル3であることを示すわけではない!
以下のように変数postscr_displayを定義すると、Display PostScriptの言語機能もハ
イライトさせることができる:
以下のように変数postscr_ghostscriptを定義すると、Ghostscript固有の言語機能もハ
イライトさせることができる:
PostScriptはたくさんの定義済み要素を持つ巨大な言語である。これらの要素すべてを
ハイライトすると便利であるが、そうすると遅いマシンではVimの動作が遅くなってし
まう。マシンフレンドリーにするために、デフォルトではフォント名と文字エンコー
ディングはハイライトされない、これらをハイライトさせるには、以下の変数のどちら
かまたは両方をセットすること:
and、or、notのハイライトについて、スタイル上のオプションが存在する。PostScript
では、これらの演算子の機能はオペランドの型に依存する。オペランドが両方ブール型
なら論理演算子となり、両方整数型なら2項演算子となる。2項演算子と論理演算子を区
別してハイライトすることができるので、どちらにしてもこれらはハイライトされなけ
ればならない。デフォルトではどちらも論理演算子としてハイライトされる。変数
postscr_andornot_binaryを定義すると、どちらも2項演算子としてハイライトされる:
ptcap.vim ft-printcap-syntax
PRINTCAP + TERMCAP ft-ptcap-syntax ft-termcap-syntax
この構文ファイルはprintcapとtermcapデータベースに適用される。
*printcap*または*termcap*というパターンにマッチしないprintcap/termcapファイル
を認識させるためには、ファイルmyfiletypefileにおいて、あなたのシステムに合っ
たパターンを追加しなければならない。これらのパターンには、変数 "b:ptcap_type"
を "print" か "term" のどちらかにセットしなければならない。するとオプション
'filetype' の値がptcapになる。
例えば、/etc/termcaps/以下の全てのファイルをtermcapファイルと識別させるように
するには次を書き加える:
上方向にスクロールしているときハイライトがおかしくなり、それがCTRL-Lで再描画す
ると直るようなら、変数 "ptcap_minlines" の値を大きくしてみるとよい:
(デフォルトは20行)
PROGRESS progress.vim ft-progress-syntax
"*.w" にマッチするファイルのタイプは Progress か cweb である。自動判別がうまく
機能しない場合、または cweb ファイルを一切編集しない場合は、vimrcでこれを使用
する:
える。アセンブリと Pascal を使わないとわかっているならこれを使用する:
PYTHON python.vim ft-python-syntax
Python構文ハイライトをコントロールするオプションは 6 つある。
数字のハイライト:
組み込み関数のハイライト:
標準例外のハイライト:
doctest とその中のコードのハイライト:
行末の空白と、スペースとタブの混在のハイライト:
全てのハイライトを有効化させるには:
じ効果がある。
Python 2 や straddling code (Python 2 と 3 の互換性) を使っている場合、Python 2
と Python 3.5 までをサポートした古い構文ファイルの使用を強制することができる
Note: 変数が定義されているかどうかが意味を持つ。値は関係ない。設定値は 1 以外
でも構わない。
QUAKE quake.vim ft-quake-syntax
Quake構文定義はQuakeエンジンのどれかに基づくほとんどのFPS(First Person Shooter)
用に対応するはずである。しかし3つのゲーム(Quake, Quake 2, Quake 3 Arena)間でコ
マンド名が少々異なる。そのため、3つのグローバル変数により、どのコマンドが有効
であるか指定できるようになっている。3つの変数には次のような効果がある:
Quakeでのみ利用可能なコマンドをハイライトするように設定:
Quake 2でのみ利用可能なコマンドをハイライトするように設定:
Quake 3 Arenaでのみ利用可能なコマンドをハイライトするように設定:
これら3つのコマンドを自由に組み合わせることができる。しかしゲームで利用できな
いコマンドもハイライトしてしまうかもしれない。
R r.vim ft-r-syntax
構文ハイライトのためのRコードの構文解析は、40行後ろから開始するが、vimrc に
異なる値を設定することができる。例:
また、ROxygenの構文ハイライトをオフにすることもできる:
丸括弧、角括弧、波括弧で区切られたコードの折り畳みを有効にする:
そして、キーワードの後に開き丸括弧がつくすべてを関数としてハイライトする:
R MARKDOWN rmd.vim ft-rmd-syntax
YAMLヘッダーの構文ハイライトを無効にするには、vimrc に追加する:
引用キーの構文ハイライトを無効にする:
knitrチャンクヘッダー内のRコードをハイライトする:
デフォルトでは、R言語の規則に従って、Rコードのチャンクがハイライトされる。さら
に、バッファが保存されるたびに、Vim はバッファをスキャンし、新しいチャンクに他
の言語が存在する場合はそれをハイライトする。LaTeX コードも、バッファが保存され
るときに自動的に認識され、ハイライトされる。この動作は、変数
rmd_dynamic_fenced_langages および rmd_include_latex で制御できる。有効な
値は次のとおり:
rmd_dynamic_fenced_langages の値が 0 の場合でも、次の例のように、コードのチャ
ンクを適切にハイライトする必要がある言語のリストを設定できる:
R RESTRUCTURED TEXT rrst.vim ft-rrst-syntax
knitrチャンクヘッダー内のRコードをハイライトするには、vimrc に追加する:
RASI rasi.vim ft-rasi-syntax
Rasi は Rofi Advanced Style Information の略である。これは、検索ウィンドウのレ
ンダリングをスタイル設定するために、プログラム rofi によって使用される。この言
語は、CSS スタイルシートに大きく影響を受けている。次の拡張子を持つファイルは、
rasi ファイルとして認識される: .rasi。
READLINE readline.vim ft-readline-syntax
readlineライブラリは主としてBASHシェルで使われ、BASHはかなりの数のコマンドとオ
プションを追加している。これらの項目を同様にハイライトするには次をvimrcに加
えるか、readline構文ファイルを読み込む前にこれをタイプすればよい:
こうするとBASH(バージョン2.05a以降。一部それ以前)が追加するコマンドもハイライ
トするようになる。
REGO rego.vim ft-rego-syntax
Rego は Styra が開発したクエリ言語である。主に kubernetes のポリシー言語として
使用されるが、ほぼ全てのアプリケーションに適用できる。次の拡張子のファイルが
rego ファイルとして認識される: .rego
RESTRUCTURED TEXT rst.vim ft-rst-syntax
選択したファイルタイプの数について、文書内のコードブロックに対して構文ハイライ
トが有効になる。デフォルトの構文リストについては、$VIMRUNTIME/syntax/rst.vim
を参照。
ユーザー定義のコードブロック構文ハイライトの一覧を設定するには:
複数のコードブロックタイプを単一の構文に割り当てるには、マッピングとして
rst_syntax_code_list を定義する:
強調テキストにカラーハイライトを使用するには:
セクションの折りたたみを有効にするには:
Note 一部のプラットフォームでは、折りたたみによってパフォーマンスの問題が発生
する可能性がある。
REXX rexx.vim ft-rexx-syntax
上方向にスクロールしているときにハイライトがおかしくなり、それがCTRL-Lで再描画
すると直るようなら、変数 "rexx_minlines" の値を大きくしてみるとよい:
くすることの欠点は、再描画が遅くなることである。
Vim は ".r" ファイルのタイプを推測しようとする。(コメント行から) タイプを特定
できなかった場合、デフォルトは "r" である。デフォルトを rexx にするには次の行
を .vimrc に追加すること: g:filetype_r
RUBY ruby.vim ft-ruby-syntax
Ruby: 演算子のハイライト ruby_operators
Ruby: ホワイトスペース エラー ruby_space_errors
Ruby: 折り畳み ruby_fold ruby_foldable_groups
Ruby: 負荷の高い処理の削減 ruby_no_expensive ruby_minlines
Ruby: スペルチェック ruby_spellcheck_strings
ruby_operators
Ruby: 演算子のハイライト
"ruby_operators" を定義すると、演算子をハイライトできる:
ruby_space_errors
Ruby: ホワイトスペース エラー
"ruby_space_errors" を定義すると、ホワイトスペースのエラーをハイライトできる:
これは、行末のホワイトスペースとスペース文字に続くタブ文字をエラーとしてハイラ
イトする。"ruby_no_trail_space_error" と "ruby_no_tab_space_error" の定義によ
り、行末のホワイトスペースやスペース文字直後のタブ文字を無視するよう個別に制御
できる。
ruby_fold ruby_foldable_groups
Ruby: 折り畳み
"ruby_fold" を定義すると、折り畳みを有効化できる:
これは、'foldmethod' の値として "syntax" を現在のバッファまたはウィンドウに限
定で設定し、Ruby ファイルの編集時に、構文に基づく折り畳みを有効にする。
デフォルトの折り畳みはある程度、精密である。すなわち、"if", "do", "%w[]" など
の小さな構文ユニットは、対応する折り畳みレベルを構成する。
"ruby_foldable_groups" をセットすることで、折り畳み可能なグループを制限できる:
値は、キーワードのリストをスペース文字区切りで指定:
キーワード 意味
---------- -------------------------------------
ALL 大部分のブロック構文 (デフォルト)
NONE なし
if "if" or "unless" ブロック
def "def" ブロック
class "class" ブロック
module "module" ブロック
do "do" ブロック
begin "begin" ブロック
case "case" ブロック
for "for", "while", "until" ループ
{ 波カッコ ブロック、またはハッシュ リテラル
[ 配列リテラル
% "%" 記法によるリテラル。 例: %w(STRING), %!STRING!
/ 正規表現
string 文字列とシェルコマンドの出力 (', ", ` でくくられた)
: シンボル
# 複数行コメント
<< ヒアドキュメント
__END__ "__END__" ディレクティブ以降のソースコード
ruby_no_expensive
Ruby: 負荷の高い処理の削減
デフォルトではキーワード "end" はそれに対応するブロック開始文にしたがって色づ
けされる。この機能は便利だが、コストがかかる。再描画が遅くなったら(または色機
能の貧弱なターミナルを使っているなら)変数 "ruby_no_expensive" を定義することに
よってこの機能をオフにできる:
この場合すべての制御キーワードに同じ色が使われる。
ruby_minlines
この機能を有効化したいが、上にスクロールしているときにハイライトがおかしくな
り、それがCTRL-Lで再描画すると直るようなら、変数 "ruby_minlines" を50以上の値
にセットしてみるとよい:
理想的には、ファイル中の最も行数の多いクラスやモジュールをカバーできるほどの十
分な行数を値として設定するべき。
ruby_spellcheck_strings
Ruby: スペルチェック
"ruby_spellcheck_strings" を定義すると、Ruby シンタックスはスペルチェックを行
う:
SCHEME scheme.vim ft-scheme-syntax
デフォルトでは R7RS のキーワードだけをハイライトし、正しくインデントする。
scheme.vim は CHICKEN Scheme->C コンパイラの拡張子にも対応している。それを有効
にするには b:is_chicken または g:is_chicken を定義する。
SDL sdl.vim ft-sdl-syntax
SDL用のハイライトにはいくつかのキーワードが抜けているかもしれない。しかしSDLに
はたくさんのキーワードがあるので、すべてに対応することはほとんど不可能である。
新しい標準SDL-2000ではすべての識別子の大文字・小文字が区別される(以前はそうで
はなかった)。また、すべてのキーワードが全部大文字または全部小文字であってもよ
い。構文ハイライトにこれを反映させるには次の変数をセットすればよい:
これはたくさんの新しいキーワードもセットする。古いキーワードを無効にするには
(これはよい考えである)こうする:
インデントもおそらく不完全であるが、今のところ私はこれでとても満足している。
SED sed.vim ft-sed-syntax
タブをハイライトして通常の空白と区別しやすくするには、次の行をvimrcに書いて
"g:sed_highlight_tabs" を定義する(TODOと同じ構文グループが使われる)
(タブのハイライトは、検索パターン、置換テキスト、アドレス、
Append/Change/Insertコマンドに含まれるテキストいずれかの中のタブにだけ適用され
る)。このオプションを有効化するなら、タブ幅を1文字にするとよい。そうすると文字
列中のタブの数を数えやすくなる。
GNU sed では、同じ行のテキストの後ろにコメントを書くことができる。BSD sed では
"#" が行頭である場合にしかコメントとみなされない。BSD 形式のコメントを強制す
る、すなわち行末コメントをエラーとして表示するには:
Note GNU sed と BSD sed の間には、この設定によって (まだ) 影響を受けていない他
の違いがある。
バグ:
変換コマンド(y)は置換コマンドとまったく同様に扱われる。つまり、この構文ファ
イルにおいては、変換は置換と同じフラグを受け取ると判断される。これは間違いで
ある(変換は一切フラグを受け取らない)。これに関係したコマンドは非常に複雑な処
理を要求するため(95パターン、もっともらしいパターンデリミタごとに1つ)、私は
このバグを容認している。
SGML sgml.vim ft-sgml-syntax
SGMLファイル中のタグをハイライトする方法は以下のように動作する。
開きタグ<>と閉じタグ</>は異なる色がつけられる。これは意図されたものである。開
きタグには 'Function' の色が使われ、閉じタグには 'Type' の色が使われる(これら
がどう定義されているかを確かめたいならsyntax.vimを見ること)。
登録されているタグ名はCの文と同じ方法で色づけされる。エラーを見つけやすくする
ため、登録されていないタグ名は色づけされない。
引数名(や属性名)も同様である。登録されている属性名は登録されていない属性名と異
なる色がつけられる。
いくつかのSGMLタグはテキストの外見を変更するのに使われる。以下のタグは構文ファ
イルsgml.vimによって認識され、通常のテキストの表示法を変更する:
<varname> <emphasis> <command> <function> <literal> <replaceable> <ulink>
<link>。
そのテキストの表示法を変えたいなら以下の構文グループを再定義しなければならない:
- sgmlBold
- sgmlBoldItalic
- sgmlUnderline
- sgmlItalic
- sgmlLink リンク用
この再定義を機能させるにはこれらすべてを再定義し、以下の変数をvimrc中で定義し
なければならない(初期化の際にファイルが読み込まれる順序のため)
この表示法を無効にしたければ次の行をvimrcに加える:
(Claudio Fleiner <claudio@fleiner.com>によるhtml.vimのヘルプテキストから一部借
用した)
ft-posix-syntax ft-dash-syntax
SH sh.vim ft-sh-syntax ft-bash-syntax ft-ksh-syntax
これは、古い UNIX (Bourne) sh と bash や dash、POSIX、Korn シェルのような新し
い UNIX シェルの構文ハイライトをカバーする。
Vimは様々なファイル名がどのタイプであるかを指定することによって、どのシェルが
使われているかを決定しようとする。例えば:
パターンの完全なリストについては、$VIMRUNTIME/filetype.vim を参照すること。こ
れらのうちどれにも当てはまらなければ、ファイルの第一行によって判断される(例.
/bin/sh /bin/ksh /bin/bash を探す)。第一行でシェルを指定されていれば、そのシェ
ルが使用される。しかしいくつかのファイル(例. .profile)はシェルファイルであるこ
とはわかっていても、どのタイプか明らかではない。さらに、多くのシステムでshは
"bash" (Linux, Windows+cygwin) や "ksh" (Posix) へのシンボリックリンクになって
いる。
以下の変数のどれかを.vimrcで定義することにより、デフォルトを設定すること
ができる:
ksh:
(dash 使用者は posix を使用するべき)
"#! ..." という行がなく、かつユーザーが上の方法でデフォルトの sh.vim の構文を
設定していない場合、sh.vim は Bourne シェルの構文であると仮定する。エラーレポー
トで RFC や市場浸透統計を引用する必要はありません。ただただ、デフォルトでシス
テムに使用されるバージョンのシェルを選択し、それに対応する "let..." をあなたの
.vimrc に導入してください。
syntax/sh.vim は構文ベースの折り畳みを数種類用意している:
様々な構文要素(例: ヒアドキュメントと関数の中身)がsyntaxメソッドによって折り畳
み可能になる(:syn-fold)。これらのうち複数を組み合わせることもできる:
上方向にスクロールしているときにハイライトがおかしくなり、それがCTRL-Lで再描画
すると直るようなら、変数 "sh_minlines" の値を大きくしてみるとよい。例:
こうすると構文シンクロナイズが画面最上行の500行前から始まるようになる。デフォ
ルトの値は200である。大きい値を設定することの欠点は、動作が遅くなるかもしれな
いことである。
シンクロナイズさせるものがあまりないときは表示がとても遅くなるかもしれない。こ
れを減らすために、変数 "sh_maxlines" をセットすることができる。例:
デフォルトはsh_minlinesの2倍の値が使われる。表示を高速化するにはこれをもっと小
さい値にすること。欠点はハイライト間違いが出るかもしれないことである。
syntax/sh.vim は特定のプログラムをエラーとして表示しようとする。通常は、余分な
"]", "done", "fi" などがこれに当たる。もしもこのエラーの扱いがあなたの目的で問
題を起こす場合は、.vimrc に以下を書くことでエラーの強調表示を抑制できる:
sh-embed sh-awk
Sh: 埋め込み言語
sh に言語を埋め込みたい場合。Lorance Stinson が awk を埋め込む例を出してくれた
のでそれを載せる。以下のファイルを $HOME/.vim/after/syntax/sh/awkembed.vim
に置くこと:
この例では次のようなシングルクォートで囲まれた awk コードが awk 言語として強調
表示されるようになる:
SPEEDUP spup.vim ft-spup-syntax
(AspenTech plant simulator)
Speedup構文ファイルにはいくつかのオプションがある:
- strict_subsections : この変数が定義されていると、セクションとサブセクション
用のキーワードだけが文としてハイライトされ、他のキーワードにはされなくなる
(OPERATIONセクションのWITHINと同様)。
- highlight_types : この変数が定義されていると、温度や圧力のようなストリーム
型が単純な識別子でなくTypeとしてハイライトされる。Includedは通常DECLAREセク
ション中に現れる型である; ユーザーが自分用の型を定義しているならそれらを構文
ファイルに含めなければならない。
- oneline_comments : この値は1から3までの間になり、#スタイルのコメントのハイラ
イトを決定する。
oneline_comments = 1 : 偶数個の#の後にも通常のSpeedupコードが現れることを許す
oneline_comments = 2 : 2番目の#で始まるコードをエラーとして表示する。これが
デフォルトの設定である。
oneline_comments = 3 : 1個以上の#を含む行全体をエラーとしてハイライトする。
変数のPRESETにより、OPERATIONセクションはとても大きくなりがちであり、そのため
シンクロナイズが追いつかなくなるかもしれない。あなたのコンピュータが十分速いな
ら構文ファイルの最後近くでminlinesとmaxlinesの値を大きくするとよいかもしれな
い。
SQL sql.vim ft-sql-syntax
sqlinformix.vim ft-sqlinformix-syntax
sqlanywhere.vim ft-sqlanywhere-syntax
SQLにはANSI標準があるのだが、ほとんどのデータベースエンジンは独自の拡張を追加
している。現在のところ、VimはOracleとInformixのSQL方言をサポートしている。
デフォルトではVimは "*.sql" のファイルをOracle SQLであると判断する。
現在のところ、Vimは構文スクリプトによって、様々なベンダーのSQLに対応している。
デフォルト設定をOracleから他の対応しているSQLに変更することができる。また、
バッファごとに使うSQLの方言を変えることも簡単にできる。
より詳しい説明はft_sql.txtを参照。
SQUIRREL squirrel.vim ft-squirrel-syntax
Squirrel はハイレベルな命令型オブジェクト指向プログラミング言語であり、ビデオ
ゲームなどのアプリケーションのサイズ、メモリ帯域幅、リアルタイム性の要件に適す
る軽量なスクリプト言語として設計されている。次の拡張子のファイルは、Squirrel
ファイルとして認識される: .nut
TCSH tcsh.vim ft-tcsh-syntax
これは "tcsh" という名前のシェルをカバーしている。これはcshのスーパーセットで
ある。ファイル形式がどのように判定されるかはcsh.vimを参照。
tcshはシェル変数 backslash_quote をセットしていない限り文字列中に \" が現れる
ことを許さない。Vimにバックスラッシュクォート構文が存在しないと判断させたいな
ら、次の行を.vimrcに加えること:
上方向にスクロールしているときにハイライトがおかしくなり、それがCTRL-Lで再描画
すると直るようなら、変数 tcsh_minlines の値を大きくしてみるとよい:
こうすると構文シンクロナイズが画面最上行の1000行前から始まるようになる。
tcsh_minlines に "fromstart" をセットすると、ファイルの先頭からシンクロナイズ
が行われるようになる。tcsh_minlines の既定値は 100。大きな値にすることの欠点
は、再描画が遅くなることである。
TEX tex.vim ft-tex-syntax latex-syntax
syntax-tex syntax-latex
Tex 目次
Tex: 構文折り畳みをするには tex-folding
Tex: スペルチェックを行いたくない場合 g:tex_nospell
Tex: コメントの中ではスペルチェックを行いたくない場合 tex-nospell
Tex: Verbatim ゾーンをスペルチェックするには tex-verb
Tex: コメントや MathZone の区切り tex-runon
Tex: 構文ハイライトが遅いならば tex-slow
Tex: もっとコマンドをハイライトさせるには tex-morecommands
Tex: エラーのハイライトが行き過ぎならば tex-error
Tex: 新しいMathグループが必要ならば tex-math
Tex: 新しいスタイルを始めるには tex-style
Tex: Conceal モードを活用する tex-conceal
Tex: Conceal モードの選択 g:tex_conceal
Tex: iskeyword を制御する g:tex_isk
Tex: 下付き記号と上付き記号を制御する tex-supersub
Tex: 一致のチェックの制御 tex-matchcheck
tex-folding g:tex_fold_enabled
Tex: 構文折り畳みをするには
<syntax/tex.vim>のバージョン28以降では、構文による部分、章、節、小節などの折り
畳みに対応している。それを有効にするには次の行を<.vimrc>に書き、
といいかもしれない:
g:tex_nospell
Tex: スペルチェックを行いたくない場合
LaTeX 文章でどこにもスペルチェックを行わせたくない場合は、
は、g:tex_comment_nospell を参照せよ。
tex-nospell g:tex_comment_nospell
Tex: コメントの中ではスペルチェックを行いたくない場合
LaTeX ファイルのコメントの中にソースコードのようなものを含めることがあるので、
コメントの中ではスペルチェックを無効にしたいという人もいる。そのようにするには
次の行を .vimrc に加える:
照せよ。
tex-verb g:tex_verbspell
Tex: Verbatim ゾーンをスペルチェックするには
たいてい verbatim リージョンはソースコードのようなものを書くのに使われる。
ソースコードをスペルチェックしたいと思うことはほとんどないだろう。とはいえ、も
し verbatim ゾーンの内容をスペルチェックしたいときは <.vimrc> で次のように設定
すること:
tex-runon tex-stopzone
Tex: コメントや MathZone の区切り
<syntax/tex.vim>の構文ハイライトはTeX, LaTeX, AmsTeXをサポートしている。normal,
texZone, texMathZoneの3つの主な区間・範囲がサポートされている。これらの区間を
適切に区切るようかなりの努力がされたが、$..$と$$..$$で線引きされる区間は開始・
終了のパターンとまったく同じにシンクロナイズさせることはできない。その結果、特
別な "TeX comment" が提供されている
らせる。
tex-slow tex-sync
Tex: 構文ハイライトが遅いならば
遅いコンピュータを使っているなら、これらの値を減らすとよいかもしれない
らは第一にシンクロナイズ(つまり、画面最上行のテキストがどのグループに入るか)に
影響を与える。
構文による折り畳みによって遅くなる場合もある。回避方法については
tex-folding を参照のこと。
g:tex_fast
最後に、もし構文強調表示がまだ遅い場合は、.vimrc で次のように設定するとよい
g:tex_fast 変数を設定すると、構文強調表示でリージョンや同期が定義されなくな
る。それによって構文強調表示が速くなる。ただし、豊富な強調表示、構文ベースの折
り畳み、構文ベースのエラーチェックはできなくなる。
特定の構文のみを有効化することもできる。次の一覧の中から有効化したい構文強調表
示を選ぶことができる:
例えば、let g:tex_fast= "M" は 数学関連の強調表示を有効化する。他のリージョン
ベースの構文強調表示は有効化されない。
(g:tex_conceal と tex-supersub も参照)
tex-morecommands tex-package
Tex: もっとコマンドをハイライトさせるには
LaTeXはプログラミング言語であり、特殊化されたLaTeXのコマンド、構文、フォントが
つまったパッケージがたくさんある。そのようなパッケージを使っている人は、標準の
syntax/tex.vimにそのパッケージを対応させてほしいと思うだろう。しかしそれは明ら
かに非現実的である。そこで、mysyntaxfile-addで使われているテクニックを使っ
て、syntax/tex.vimで提供されているハイライトを拡張・修正してみてください。拡張
(典型的には $HOME/after/syntax/tex/[pkgname].vim に置いて使う) を書いたら、そ
れを http://vim.sf.net/ にアップロードすることを検討してみてください。
私のウェブサイトで様々な人気パッケージのいくつかのサポートを含めた:
そこにある構文ファイルを、あなたの .../after/syntax/tex/ ディレクトリに入れる
といい。
tex-error g:tex_no_error
Tex: エラーのハイライトが行き過ぎならば
<tex.vim>は様々な種類のレキシカルエラーチェックをサポートしている。すなわち、
エラーチェックはとても便利だが、実際にはエラーでない箇所もエラーと示すかもしれ
ない。それが嫌なら、次の行を<.vimrc>に置くとよい:
tex-math
Tex: 新しいMathグループが必要ならば
新しいmathグループをLaTeXに含めるには、以下のコードがその例となるだろう:
でとVからZまでは<syntax/tex.vim>自身によって取得されている)。
例として、<syntax/tex.vim>でeqnarrayがどのように設定されているかを見てみよ
う:
また、それが呼ばれるようにするために.vim/after/syntax/tex.vimに書くこと。
変数 "starform" が真ならば、あなたが作ったmathグループがアスタリスクつきの形を
もつことを意味する(例. eqnarray*)。
tex-style b:tex_stylish
Tex: 新しいスタイルを始めるには
*.tex ファイルで "\makeatletter" を使用すると、"@" を含むコマンドを使用できる
ようになる。しかしながら、*.tex ファイルは sty cls clo dtx ltx のいずれかの接
尾辞ではないため、構文の強調表示によって @ の使用箇所がエラーとして表示される。
これを解決するには:
"let g:tex_stylish=1" を<.vimrc>に書くと<syntax/tex.vim>は常にこのような @ の
使用法を受け入れるようになる。
tex-cchar tex-cole tex-conceal
Tex: Conceal モードを活用する
'conceallevel' が 2 に設定され、エンコーディングとして utf-8 が使われていると
き、さまざまな文字シーケンスがそれに対応した utf-8 グリフとして表示される。対
応している文字としてはアクセント付き文字、Math ゾーンの中のギリシャ文字、Math
ゾーンの中の上付き記号と下付き記号などがある。すべての上付き記号と下付き記号を
表示できるわけではない。utf-8 がサポートしている範囲でのみ利用可能である。実際
のところ、サポートされている下付き記号は少ししかない。
使用例としては、ウィンドウを垂直分割して (CTRL-W_v 参照)、一つのウィンドウは
'conceallevel' を 0 に設定してもう一方は 2 に設定し、両方で 'scrollbind'
を設定するような使い方がある。
g:tex_conceal
Tex: Conceal モードの選択
g:tex_conceal を <.vimrc> で設定することで Conceal モードの表示を変更できる。
デフォルトでは、g:tex_conceal には "admgs" が設定されており、これによって次の
文字セットが Conceal 表示される:
これらの文字を設定から外すことで、それに関連した文字が Conceal 表示されなくな
る。
g:tex_isk g:tex_stylish
Tex: iskeyword を制御する
通常、LaTeX キーワードは 0-9、a-z、A-z、192-255 のみがサポートされる。Latex
キーワードはアンダースコアをサポートしない (*.sty ファイルを除く)。構文強調表
示スクリプトは次の手順でそれを判断する:
* g:tex_stylish が存在して値が 1 なら
ファイルは "sty" ファイルとして扱われる。"_" はキーワードの一
部として認識される。
(g:tex_isk に左右されない)
* または、ファイル名の末尾は sty, cls, clo, dtx, ltx なら
ファイルは "sty" ファイルとして扱われる。"_" はキーワードの一
部として認識される。
(g:tex_isk に左右されない)
* g:tex_isk が存在するなら、'iskeyword' のローカル値として使用される。
* 存在しない場合、'iskeyword' のローカル値として 48-57,a-z,A-Z,192-255
が設定される。
tex-supersub g:tex_superscripts g:tex_subscripts
Tex: 下付き記号と上付き記号を制御する
Conceal による文字の代替表示を有効にするには tex-conceal を参照。
g:tex_conceal を設定することでアクセント、太字/斜体、数学記号、ギリ
シャ文字、上付き記号/下付き記号のどれを Conceal 表示するかを選択でき
る。
どの上付き記号/下付き記号を構文に基づいて Conceal 表示 (:syn-cchar
参照) するかを制御できる。すべてのフォントがすべての文字をサポートして
いるわけではないので、Conceal 表示する文字を変更できるようになってい
る。デフォルトでは次のように設定されている:
例えば、私は Luxi Mono Bold を使っているが、これは "hklmnpst" に対する
下付き記号をサポートしていない。そこで私は
示されないようにしている。
tex-matchcheck g:tex_matchcheck
Tex: 一致のチェックの制御
実際には時として、かっこ、角かっこ、中かっこが一致しないことが必要な場
合があり; 例えば、\text{(1,10]} は範囲の開始に1を含まず10を含む。
この要望はもちろん、区切りの不一致を検知したいという要望と衝突する。
この衝突の調整のゴールを、syntax/tex.vim が提供する
一致をチェックさせるなら、次のようにする
TF tf.vim ft-tf-syntax
tfの構文ハイライトには1つのオプションがある。
シンクロナイズについて、minlinesのデフォルトは100になっている。この値を変える
には、"tf_minlines" に望みの値をセットする。例:
TYPESCRIPT typescript.vim ft-typescript-syntax
typescriptreact.vim ft-typescriptreact-syntax
TypeScript 構文のハイライトを制御する 1 つのオプションがある。
g:typescript_host_keyword
この変数を 1 に設定すると、addEventListener などのホスト固有の API がハイラ
イトされる。無効にするには、.vimrc で 0 に設定する:
デフォルト値は 1 である。
TYPST ft-typst-syntax
g:typst_embedded_languages
Typst ファイルでは、g:typst_embedded_languages 変数を設定することで、他の言
語の構文強調表示を埋め込むことができる。この変数は、構文定義が Typst ファイル
に含まれる言語名のリストである。例:
VIM vim.vim ft-vim-syntax
g:vimsyn_minlines g:vimsyn_maxlines
正確な構文ハイライトと画面更新速度はトレードオフの問題である。正確さを向上させ
るには、変数 g:vimsyn_minlines の値を大きくすればよい。g:vimsyn_maxlines も画
面更新頻度を高めるのに使える(これについては:syn-syncを参照)。
(g:vim_minlines と g:vim_maxlines はこれらのオプションの以前の名前であ
る)
g:vimsyn_embed
g:vimsyn_embed オプションは、どの外部スクリプト言語の埋め込みに対応するかを指
定する。
デフォルトでは、g:vimsyn_embed には Vim がサポートしている言語が設定される。指
定された文字を連結して、複数のタイプの埋め込みインタープリタをサポートする (例
えば、g:vimsyn_embed = "mp" は、埋め込み mzscheme と埋め込み perl をサポートす
る)。
g:vimsyn_folding
'foldmethod' が "syntax" に設定されている場合、一部の折り畳みがサポートされる
ようになった:
デフォルトでは、g:vimsyn_folding は設定されていない。複数の構文構造の折りたた
みをサポートするには、指定する文字を連結する (例えば、g:vimsyn_folding = "fh"
は、関数とヒアドキュメントの両方の折り畳みを有効にする)。
g:vimsyn_comment_strings
デフォルトでは、コメント内の文字列はハイライトされる。これは、
g:vimsyn_comment_strings を false に設定することで無効にできる。
g:vimsyn_noerror
syntax/vim.vimによるエラーのハイライトは必ずしも正しいとは限らない。Vim script
は正しくハイライトするのが難しい言語である。エラーのハイライトをやめるには次
をvimrcに書けばよい:
WDL wdl.vim wdl-syntax
ワークフロー記述言語は、人間が読み書きできる構文でデータ処理ワークフローを指定
する方法である。これはバイオインフォマティクスでよく使われる。仕様詳細について
は、以下を参照。
https://github.com/openwdl/wdl
XF86CONFIG xf86conf.vim ft-xf86conf-syntax
XF86Configファイルの構文はXFree86 v3.xとv4.xで異なっている。両方のバージョンが
サポートされている。自動的に判定がされるが、完全からはほど遠い。手動でバージョ
ンを設定する必要があるかもしれない。使用しているXFree86に応じて、.vimrc中で変
数xf86conf_xfree86_versionを3または4にセットすること。例:
変数b:xf86conf_xfree86_versionをセットすること。
Note オプション名の中のスペースとアンダースコアはハイライトされない。オプショ
ン名をハイライトさせるには "__s yn con gr_e_e_n" でなく "SyncOnGreen" と書くこ
と。
XML xml.vim ft-xml-syntax
Xml名前空間がデフォルトでハイライトされる。次のグローバル変数をセットするとそ
れが無効化される:
xml-folding
xml構文ファイルを使うと、開始タグと終了タグの間を折りたたむfoldingことができ
る(:syn-foldを参照)。これをオンにするには
とする。
Note: 構文による折り畳みは、構文ハイライトを著しく遅くする可能性がある。特に巨
大なファイルではそうである。
X Pixmaps (XPM) xpm.vim ft-xpm-syntax
xpm.vimは編集中のXPMファイルの内容から、動的に構文要素を生成する。そのため、色
設定文字列などを変更したときは ":set syn=xpm" などとしてxpm.vimを読み直さなけ
ればならない。
色つきのピクセルをコピーするには "yl" で "pixel" をヤンクし、どこかで "P" とし
てそれを挿入する。
マウスで図を描くには、次のようにしてみるとよい:
につき1文字だけとなっているXPMファイルでうまく機能する。ピクセル文字列の外をク
リックしてはならない。これを自由に改良してください。
セルサイズが正方形のフォントを使うと見栄えがよくなる。Xの場合の例:
YAML yaml.vim ft-yaml-syntax
g:yaml_schema b:yaml_schema
YAML スキーマとはタグのコンビネーションと、特定されないタグを解決する為のメカ
ニズムである。ユーザーにとってはこれはプレーンなスカラーのコンテンツに依存して
その簡素なスカラー(実際は文字列もしくはそれ以外の何か)をそれぞれ異なる値として
扱う YAML パーサーを意味しているかもしれない: null, boolean, floating-point,
integer. g:yaml_schema オプションは特別にハイライトさせるスキーマの値を特定
する為のオプション。サポートしているスキーマは
Schema Description
failsafe 追加されるハイライトはない。
json JSON スタイルの number や boolean, null をサポートする。
core number や boolean、null をよりサポートする。
pyyaml timestamp のハイライトをサポートをコアスキーマに追加するが、
number がどの様に認識されるか、boolean 型として認識する為に多
くの値が追加されたという点で幾らか違いがある。
デフォルトのスキーマは core。
実際にはスキーマは、プレーンなスカラーに限定されるものではない、これが YAML 仕
様の定義に存在する唯一の違いであり、唯一異なるシンタックスが定義されているとい
う点を注意しておく。
ZSH zsh.vim ft-zsh-syntax
この zsh のための構文スクリプトは、構文に基づく折り畳みを可能にする:
==============================================================================
6. 構文を定義する :syn-define E410
構文アイテムには3つのタイプがある。
1. キーワード (Keyword)
キーワード文字は、:syn-iskeyword または 'iskeyword' オプションで指定され
た文字に従ってのみ含むことができる。他の構文項目を含むことはできない。完全
な単語でのみマッチする (マッチの前後にキーワード文字がない)。キーワード
"if" は、"if(a=b)" ではマッチするが、"ifdef x" ではマッチしない。"(" はキー
ワード文字ではなく、"d" はキーワード文字だからである。
2. マッチ (Match)
単一の正規表現パターンにマッチする。
3. リージョン (Region)
正規表現パターン "start" のマッチ位置から始まり、正規表現パターン "end" の
マッチ位置で終わる。その間にどんなテキストがあってもよい。正規表現パターン
"skip" を使うとパターン "end" にマッチするのを避けることができる。
複数の構文アイテムを1つの構文グループに入れることができる。構文グループにはハ
イライト属性を与えることができる。例えば、"/* .. */" のコメントを定義する要素
と "// .." のコメントを定義する要素を作り、両方を "Comment" グループに入れる。
そして "Comment" を青のボールドフォントで表示するように指定すると、両方のタイ
プのコメントに対して同じハイライトがされるようになる。1つの構文要素に対し1つの
構文グループを作ってもよいし、すべての要素を1つのグループに入れてもよい。これ
はハイライト属性をどう指定したいかによる。各要素をそれ自身のグループに入れると
すると、たくさんのグループに対して色を指定しなければならなくなる。
構文グループとハイライトグループは似ているが異なることに注意。ハイライトグルー
プに対してはハイライト属性を与えることになる。それらの属性が同名の構文グループ
に対して適用される。
同じ箇所に対して複数のアイテムがマッチした場合には、最後に定義されたものが有効
になる。よって同じテキストにマッチする要素を使って、以前に定義された構文アイテ
ムを上書きすることができる。大文字・小文字の違いも含めてマッチするキーワードが
ある場合は、そうでないものより優先される。
優先順位 :syn-priority
複数の構文アイテムがマッチするときは、以下のルールが適用される:
1. 複数のマッチまたはリージョンアイテムが同じ場所で始まるときは、後に定義され
たものが優先される。
2. マッチとリージョンよりキーワードが優先される。
3. より前の位置から始まる要素が優先される。
大文字・小文字の区別 :syn-case E390
:sy[ntax] case [match | ignore]
これ以降の ":syntax" コマンドが大文字・小文字を区別するかどうかを定義
する。"match" を使うと区別し、"ignore" を使うと区別しなくなる。これ以
前の要素には影響せず、次の ":syntax case" コマンドまでのすべての要素に
影響する。
:sy[ntax] case
"syntax case match" または "syntax case ignore" を表示する。
折り畳みレベルの定義 :syn-foldlevel
:sy[ntax] foldlevel start
:sy[ntax] foldlevel minimum
foldmethod=syntax 利用時での行の折り畳みレベル算出の方法を定義する
(fold-syntax と :syn-fold を参照):
start: 行の先頭を含むアイテムのレベルを使う。
minimum: 行の項目の最小の局所レベルの最低値を使う。
デフォルトは "start"。"minimum" を使うと行内でより高いレベルに包括され
ている最低レベルを水平方向に探す。これにより、構文アイテムが行内で水平
方向に開閉する場合に、より自然な折りたたみが生成される。
:sy[ntax] foldlevel
現在の折り畳みレベルを表示する方法、"syntax foldlevel start" もしくは
"syntax foldlevel minimum" を表示する。
{+folding機能なしでコンパイルされた場合は意味を持たない}
スペルチェック :syn-spell
:sy[ntax] spell toplevel
:sy[ntax] spell notoplevel
:sy[ntax] spell default
構文アイテムに入っていないテキストに対して、どこでスペルチェック
を行うかを定義する:
toplevel: テキストのスペルチェックを行う。
notoplevel: テキストのスペルチェックを行わない。
default: クラスタ@Spellがあるときスペルチェックを行わない。
構文アイテムに入っているテキストはクラスタ@Spellと@NoSpellを使う
spell-syntax。クラスタ@Spellと@NoSpellがないときは、スペルチェックは
"default" と "toplevel" に対して行われる。
スペルチェックを有効化するにはオプション 'spell' をオンにしなければな
らない。
:sy[ntax] spell
現在の構文でのスペルチェックの方法、"syntax spell toplevel", "syntax
spell notoplevel" または "syntax spell default" を表示する。
構文の iskeyword 設定 :syn-iskeyword
:sy[ntax] iskeyword [clear | {option}]
キーワード文字を定義する。'iskeyword' オプションに似ているがシン
タックスハイライトのみに適用される。
clear: シンタックス固有の iskeyword の設定を無効にし、
バッファローカルの 'iskeyword' 設定を有効にする。
{option} シンタックスの 'iskeyword' オプション値を設定する。
例:
これは全てのアルファベットと数字、アクセント付き文字、および "_" と
"$" をシンタック固有の iskeyword オプションに設定する。
引数を指定しない場合は現在の値を表示する。
このオプションを設定するとシンタックスパターン内での /\k のマッチや
:syn-keyword が新しいマッチをチェックする際のデリミタに影響する。
シンタックスファイルを書く際はこのコマンドを使って言語固有の文法に対す
る正しい値を設定し 'iskeyword' を変更しない事が推奨されている。
キーワードの定義 :syn-keyword
:sy[ntax] keyword {group-name} [{options}] {keyword} .. [{options}]
キーワードを定義する。
{group-name} "Comment" のような構文グループ名。
[{options}] 後述の:syn-argumentsを参照。
{keyword} .. このグループに含めるキーワードのリスト。
例:
{options}は行のどこに置いてもよい。それらは与えられたキーワード全てに
適用される。オプションがキーワードの後にあっても同じ。以下の例はまった
く同じ意味になる:
Vimのexコマンドのようにキーワードに短縮形があるとき、省略可能な部分を
[] でくくることによって受け入れるキーワードをいっぺんに定義することが
できる:
キーワードは、その文字全てがオプション 'iskeyword' に含まれていないと
認識されないことに注意。1文字でも含まれていないものがあると、そのキー
ワードは認識されない。
マルチバイト文字を使うこともできる。マルチバイト文字は 'iskeyword' に
含まれている必要はない。
シンタックス特有の iskeyword 設定については:syn-iskeywordを参照。
キーワードは常にマッチやリージョンより優先される。キーワードは一要素以
上マッチしたとき使われる。キーワードは入れ子にならなく、それ以外のもの
を含むこともできない。
オプション名と同じ単語は、それがその位置で利用できないものであったとし
ても、キーワードとして定義することはできない。マッチで代用すること。
キーワードの長さは最大80文字である。
containmentが異なれば、同じキーワードを複数回定義することができる。例
えば、まずキーワードをcontainedでなく定義して1つのハイライトグループを
設定し、次にcontainedとして定義して別のハイライトグループを設定するこ
とができる。例:
が適用される。"vimSetting" を含む構文要素の中に "tag" があったとき
は "vimSetting" グループが適用される。
マッチの定義 :syn-match
:sy[ntax] match {group-name} [{options}]
[excludenl]
[keepend]
{pattern}
[{options}]
マッチを定義する。
{group-name} "Comment" のような構文グループ名。
[{options}] 後述の:syn-argumentsを参照。
[excludenl] 行末の "$" を含んでいるパターンに対して、行末
以降までマッチやリージョンを拡張しないようにす
る。パターンの前に置かなければならない。
:syn-excludenl
keepend 内包されたマッチが終了パターンを越えないように
する。:syn-keependを参照。
{pattern} マッチを定義する検索パターン。
後述の:syn-patternを参照。
パターンは複数行にもマッチする。よって検索を開
始する場所によってマッチが変わってくる可能性が
ある。シンクロナイズが関係してくることに注意。
例 (文字定数にマッチする):
リージョンの定義 :syn-region :syn-start :syn-skip :syn-end
E398 E399
:sy[ntax] region {group-name} [{options}]
[matchgroup={group-name}]
[keepend]
[extend]
[excludenl]
start={start-pattern} ..
[skip={skip-pattern}]
end={end-pattern} ..
[{options}]
リージョンを定義する。複数行にわたってもよい。
{group-name} "Comment" のような構文グループ名。
[{options}] 後述の:syn-argumentsを参照。
[matchgroup={group-name}] 以下の開始パターンと終了パターンのマッチに
のみ使われる構文グループ。マッチの開始パターン
と終了パターンの間のテキストには使われない。開
始パターンと終了パターン用に異なるグループを使
わないようにリセットするにはNONEを使う。
:syn-matchgroupを参照。
keepend 内包されたマッチが終了パターンを越えないように
する。:syn-keependを参照。
extend このリージョンを含むアイテムの "keepend" を上
書きする。:syn-extendを参照。
excludenl 行末の "$" を含んでいるパターンに対して、行末
以降までマッチやアイテムを拡張しないようにす
る。終了パターンに対してのみ使い道がある。適用
するパターンの前に置かねばならない。
:syn-excludenl
start={start-pattern} リージョンの開始を定義する検索パターン。後述の
:syn-patternを参照。
skip={skip-pattern} その中ではリージョンの終了を探さないテキストを
定義する検索パターン。:syn-patternを参照。
end={end-pattern} リージョンの終了を定義する検索パターン。
後述の:syn-patternを参照。
例:
start/skip/endパターンとオプションはどんな順序で書いてもよい。skip
パターンは0個か1個許される。startとendパターンは1個以上なければならな
い。つまりskipパターンは省略できるが、少なくとも1つのstartとendパター
ンを書かなければならない。等号記号の前後にはホワイトスペースがあっても
よい(たいていはホワイトスペースがないほうが見やすいが)。
2個以上のstartパターンが与えられたときは、それらの1つがマッチすれば十
分である。つまりstartパターンらの間にはOR関係があることになる。最後に
マッチしたものが使われる。endパターンについても同じである。
endパターンの検索はstartパターンの直後から行われる。これはendパターン
のマッチとstartパターンは決して重ならないことを意味する。
skipとendパターンは改行をまたいでマッチしてもよい。しかしパターンの検
索はどの行からも始まりうるので、望みどおりにならないこともある。
skipパターンは次の行のendパターンのマッチを回避しない。問題を避けるに
は単一行のパターンを使うこと。
Note: リージョンの開始は、startパターンのマッチによってのみ決まる。
endパターンの照合のチェックはされない。次のは機能しない:
れる)。こうすると、その前に ':' があるかどうかにかかわらず、Secondの
リージョンが次の ';' まで続く。マッチを使うとうまくいく:
て繰り返しにマッチする(最小限の個数の繰り返し)。
:syn-keepend
デフォルトでは内包されたマッチはendパターンのマッチを隠す。これはネス
ト用に便利である。例えば、"{" で始まり "}" で終わるリージョンがもう1つ
のリージョンを含むことができる。"}" に出会うと内包されたリージョンが終
わり、外側のリージョンは終了しない:
{ 外側の "{}" リージョンの開始
{ 内包された "{}" リージョンの開始
} 内包された "{}" リージョンの終了
} 外側の "{}" リージョンの終了
この挙動が望みでないなら、引数 "keepend" をつければ、外側のリージョン
のendパターンのマッチによって内包されたアイテムも終了させることができ
る。そうすると同一リージョンのネストが不可能になるが、内包されたアイテ
ムでendパターンをスキップさせることなく、endパターンの一部をハイライト
することができる。例:
包されたvimCommentが<EOL>とのマッチを含んでいてもそのようになる。
"keepend" が使われないときは、内包されたマッチの後でendパターンのマッ
チが検索される。"keepend" が含まれているときは最初にendパターンにマッ
チしたところで終了し、内包されたマッチもすべてそこで終了になる。
:syn-extend
引数 "extend" を使うと "keepend" の挙動が変わる。"keepend" 付きのアイ
テム中に "extend" 付きのアイテムが内包されていると、"keepend" が無視さ
れ、外側のリージョンが拡張される。これによっていくつかのアイテムに対し
て例外的にリージョンを拡張させるようにできる。例:
この例では、htmlItemの位置でhtmlRefが終了する。htmlItemは<>要素をハイ
ライトするためだけに使われる。htmlScriptアイテムはhtmlRefアイテムを拡
張する。
もう1つの例:
ジョンを定義し、内包するアイテムによって終端が変更されないようにしてい
る。ただしxmlFoldがネストしたとき(それ自身を含んだとき)、"extend" が適
用され、内側の "</a>" はそのリージョン自身だけを終了させ、それを含んで
いるリージョンは終了しない。
:syn-excludenl
マッチ用のパターンやリージョンの終了パターンが行末にマッチさせるために
'$' を含んでいると、それを含むリージョンアイテムが次の行まで継続するよ
うになる。例えば、"\\$" (行末のバックスラッシュ)とのマッチを使うと、通
常は行末で終了するはずのリージョンを継続させることができる。これはデ
フォルトの挙動である。これが望みどおりでないなら、これをされる2つの方
法がある:
1. 外側のアイテムに "keepend" を使う。こうすると含んでいるアイテム全て
に対して拡張しないようにする。含んでいるアイテム全てが外側のアイテム
を拡張してはならないときに使える。
2. 内側のアイテムに "excludenl" を使う。こうするとそのマッチに対して、
それを含んでいるマッチやリージョンを拡張しないようにする。これはい
くつかのアイテムだけが外側のアイテムを拡張してはならないときに使え
る。"excludenl" はそれを適用するパターンの前に置かねばならない。
:syn-matchgroup
"matchgroup" は、リージョンの本体とその開始・終了パターンに対して異な
るハイライトをしたいときに使える。例:
トを "String" グループでハイライトすることができる。
"matchgroup" は次の "matchgroup" が現れるまでその後に続くすべての開
始・終了パターンに対して使われる。matchgroup を使わないように戻すには
"matchgroup=NONE" を使う。
開始・終了パターンが "matchgroup" でハイライトされるとき、そのリージョ
ンに含まれているアイテムは無視される。これによって含まれているアイテム
が開始・終了パターンにマッチするのを避けることができる。"transparent"
を使っている場合、これは "matchgroup" でハイライトされる開始・終了パ
ターンのマッチ部分には適用されない。
次の例は、3段階の括弧を異なる色でハイライトする例である:
E849
構文グループの最大数は 19999 である。
==============================================================================
7. :syntaxの引数 :syn-arguments
構文アイテムを定義する :syntax コマンドにはたくさんの引数がある。
ここでは共通のものを説明する。引数はどんな順序でもよく、パターンと混ざっていて
もよい。
全てのコマンドが全ての引数を受けいれるわけではない。次の表はどの引数がどのコマ
ンドに対して利用可能かを示している:
E395
contains oneline fold display extend concealends
:syntax keyword - - - - - -
:syntax match yes - yes yes yes -
:syntax region yes yes yes yes yes yes
以下の引数は3つのコマンド全てに対して使える:
conceal
cchar
contained
containedin
nextgroup
transparent
skipwhite
skipnl
skipempty
conceal conceal :syn-conceal
{訳注: conceal = 隠す、秘密にする}
"conceal" 引数が指定されると、そのアイテムは Conceal 可能になる。アイテムが実
際に Conceal 表示されるかどうかは 'conceallevel' オプションの設定に依存する。
現在行のアイテムを Conceal 表示するかどうかは 'concealcursor' オプションで制御
できる (行の編集を妨げないようにするため)。
テキストを隠す別の方法は matchadd() を使用することだが、内部的には少し異なる
動作をする。syntax-vs-match
concealends :syn-concealends
"concealends" 引数が指定されると、リージョンの開始部分と終了部分が Conceal 可
能になる (リージョンの中身はならない)。アイテムが実際に Conceal 表示されるかど
うかは 'conceallevel' の設定に依存する。"matchgroup" で別のハイライトを設定す
ることでリージョンの終了部分だけを別に Conceal 表示するということもできる。
synconcealed() 関数を使用すると、conceal された項目に関する情報を取得できる。
cchar :syn-cchar
E844
"cchar" 引数はアイテムが Conceal 表示されたときに実際に画面に表示される文字を
定義する ("cchar" は conceal 引数が指定されたときのみ意味を持つ)。
"cchar" が指定されていない場合はデフォルトの Conceal 文字として 'listchars' オ
プションが使われる。Tab 文字のようなコントロール文字は使用できない。例:
contained :syn-contained
引数 "contained" が与えられると、そのアイテムはトップレベルでは認識されず、他
のマッチの "contains" フィールドで指定されたときのみ認識される。例:
display :syn-display
引数 "display" が与えられると、そのアイテムは検出されたハイライトが表示されな
い時にはスキップされる。こうすることで、表示されるべきテキストの構文状態だけを
検索するときにはこのアイテムはスキップされ、ハイライトが高速になる。
通常は、以下の条件に合うときマッチとリージョンに "display" を使うとよい:
- アイテムが行末を越えて継続しない。Cの例: "/*" コメント用のリージョンは
"display" を含んではならない。なぜなら次の行に継続するからである。
- アイテムが、行を越えて継続したり、そのコンテナを次行まで継続させる効果を持つ
子アイテムを含んでいない。
- それを含むどんなアイテムのサイズも変更しない。Cの例: プリプロセッサーマッチ
中の "\\$" とのマッチは "display" を含んではならない。なぜならこれによってプ
リプロセッサーマッチが短くなるかもしれないからである。
- 他のアイテムがマッチすることを許さず、そうでなければマッチせず、加えてマッチ
自体が非常に長くなるようなアイテム。
Cの例: "//" コメント用のマッチは "display" を使ってはならない。なぜならその
コメントの内側の "/*" がマッチするかも知れず、そうなると行末をまたぐコメント
が始まるからである。
例としてC言語では次のとき "display" が使える:
- 数字とのマッチ
- ラベルとのマッチ
transparent :syn-transparent
引数 "transparent" が与えられると、そのアイテムはそれ自身ではハイライトされず、
それを含むアイテムのハイライトを引き継ぐ。これはハイライトはせず、テキストの一
部をスキップするためだけに使われる構文アイテムに対して有効である。
transparentなアイテム自身に引数 "contains" が与えられていない場合、それを含む
アイテムから引数 "contains=" も受け継がれる。望まないアイテムが含まれるのを避
けるには "contains=NONE" とすること。文字列中の単語をハイライトするが、"vim"
だけは例外とする例:
イテムにマッチした場合、最後に定義されたものが前のものを上書きする)。
"transparent" により、"myVim" にマッチしたテキストは "myString" と同じハイライ
トになる。しかし "myVim" は何も含まない。もし "contains=NONE" を取り除くと、
"myVim" は "myString" から引数containsを受け継いで "myWord" を含むようになり、
テキスト "vim" はCommentとしてハイライトされる。これは、内包されたマッチは同じ
位置でそれ自身の内側でマッチしないためこうなる。つまり、ここではマッチ "myVim"
は、マッチ "myWord" を上書きしない。
色づけされたテキストは、内包されたアイテムの層のようにみなすことができる。内包
されたアイテムは内包しているアイテムより上にあり、そのため内包されたアイテムを
見ることができる。内包されたアイテムがtransparentな場合、それを透過して見るこ
とができ、よってそれを含んでいるアイテムが見える。図にすると:
ここから見る
| | | | | |
V V V V V V
xxxx yyy さらに内包されたアイテム達
.................... 内包されたアイテム (transparent)
============================= 最初のアイテム (最も外側のアイテム)
'x', 'y', '=' はハイライトされた構文アイテムを表す。'.' はtransparentなグルー
プを表している。
このとき次のように見える:
=======xxxx=======yyy========
つまりtransparentな "...." は透過して見える。
oneline :syn-oneline
引数 "oneline" をつけると、そのリージョンは行をまたがないという意味になる。つ
まり、現在行の中で完全にマッチしなければならない。しかし、そのリージョンが行を
またぐアイテムを内包している場合は次の行に継続する。内包されたアイテムによって
行継続パターンを認識することができる。しかしその場合でも "end" パターンは最初
の行内でマッチしなければならない。そうでないとリージョンは開始すらしない。
startパターンが行末にマッチする "\n" を含んでいるときは、startパターンの終了位
置と同じ行にendパターンがなければならない。endパターンも行末を含んでもよい。つ
まり引数 "oneline" は、startパターンの終了位置とendパターンの開始位置が同一行
にあることを意味する。改行にマッチするskipパターンを使ってもこの規則を変えるこ
とはできない。
fold :syn-fold
引数 "fold" はこのアイテムに対して折り畳みレベルを1増加させる。例:
折り畳みはそのアイテムの開始位置から始まり、アイテムの終了位置で終わる。開始位
置と終了位置が同一行にある場合、折り畳みは作られない。
オプション 'foldnestmax' によって構文折り畳みのネストを制限できる。
:syn-foldlevel の構文アイテムから算出される行の折り畳みレベルを制御する方法
を参照
{+folding機能なしでコンパイルされた場合は利用できない}
:syn-contains E405 E406 E407 E408 E409
contains={group-name},..
引数 "contains" の後には構文グループ名のリストを続ける。"contains" で指定され
たグループは、そのアイテムの内側で始まることを許可される(内包されるグループに
よっては、外側のアイテムの終端が拡張されることもある)。これを使うと、マッチと
リージョンが再帰的にネストできるようになる。引数 "contains" がまったく指定され
ない場合は、そのアイテムはどんなグループも内包しない。ここで使うグループ名は、
必ずしも以前に定義していなくてもよい。
contains=ALL
containsリストが "ALL" だけのとき、全てのグループがこのアイテ
ムの内側で許可される。
contains=ALLBUT,{group-name},..
containsリストの最初の要素が "ALLBUT" のとき、{group-name}で列
挙したグループを除く全てのグループがこのアイテムの内側で許可さ
れる。例:
contains=TOP
containsリストの最初の要素が "TOP" のとき、引数 "contained" を
持たないグループ全てが許可される。
contains=TOP,{group-name},..
"TOP" と同様だが、{group-name}に列挙したグループは除かれる。
contains=CONTAINED
containsリストの最初の要素が "CONTAINED" のとき、引数
"contained" を持つグループ全てが許可される。
contains=CONTAINED,{group-name},..
"CONTAINED" と同様だが、{group-name}に列挙したグループは除かれ
る。
"contains" リスト内の{group-name}はパターンであってもよい。そのパターンにマッ
チするグループ名全てが含まれる("ALLBUT" が使われたときはそれが除かれる)。パター
ンはホワイトスペースや ',' を含んではならない。例:
れたグループは照合されない。また、現在のsyntaxコマンドが新しいグループを定義し
ている場合、そのグループは照合されない。ファイル内にsyntaxコマンドを書く場合、
定義されていないグループを当てにすることはできないことに注意。これは、そのファ
イルは以前に読み込まれているかもしれず、":syn clear" はグループ名を削除しない
ためである。
内包されたグループはリージョンのstartとendパターン内にもマッチする。これが望み
の挙動でないなら、引数 "matchgroup" を使うとよい:syn-matchgroup。オフセット
"ms=" と "me=" によって内包されたアイテムがマッチする領域を変更することができ
る。これはハイライトされる範囲も制限することに注意。
containedin={group-name}... :syn-containedin
引数 "containedin" の後には構文グループ名のリストを続ける。するとこのアイテム
がそれらのグループの内側で始まることが許可される。これは外側のアイテムが引数
"contains=" でこのアイテムを指定したのと同じように動作する。
{group-name}...の指定の仕方は前述の "contains" と同様である。
これは構文アイテムを後から追加するときに便利である。既に定義されているアイテム
の定義を変更することなく、その内側にアイテムを含めることができる。例えば、Cの
構文を読み込んだ後で、Cコメント中の単語をハイライトしたいときは:
"containedin" の照合は、このアイテムが現れる場所に追加される。引数 "contains"
も通常通り追加される。注意: キーワードは他のアイテムを含むことができないため、
"containedin" の先にキーワードを指定することは無意味である。
nextgroup={group-name},.. :syn-nextgroup
引数 "nextgroup" の後には構文グループ名のリストをコンマ区切りで続ける
("contains" と同様。パターンを使うこともできる)。
引数 "nextgroup" が与えられると、マッチやリージョンの終了位置の後ろで、指定さ
れた構文グループにマッチする部分が探される。どのグループもマッチしなければ、ハ
イライトは通常通り続けられる。マッチが見つかった場合はそのグループが使われる。
現在のグループの引数 "contains" でそのグループが指定されていなくてもそうなる。
つまり、これは指定されたグループの優先度を最大にすることと同じである。例:
これは "Foo" の後に "Bar" が現れたときのみ、"Foo" と "Bar" に異なるハイライト
をする。以下のテキストにおいて、"f" と書いたところはccFooでハイライトされ、
"bbb" と書いたところはccBarでハイライトされる。
".\{-}" を使い、次のBarまでのスキップが最小になるようにしている。もし ".*" を
使うと、最初の "Foo" と最後の "Bar" がccFooBarのマッチ部分に含まれるため、
"Bar" と "Foo" の間の "asdf" が "ccFoobar" グループとしてハイライトされてしま
う(patternを参照)。
skipwhite :syn-skipwhite
skipnl :syn-skipnl
skipempty :syn-skipempty
これら3個の引数は "nextgroup" と組み合わせたときのみ意味を持つ。これらを指定す
ると、次のグループがマッチする前に、以下のテキストがあってもよくなる。
skipwhite スペースとタブ文字をスキップする
skipnl 行末をスキップする
skipempty 空行をスキップする(自動的に "skipnl" も含むことになる)
例えば "skilwhite" を指定した場合、次のどのグループもホワイトスペースにマッチ
しないならば、ホワイトスペースをスキップする。
"skipnl" を指定すると、nextgroupの照合が次の行からも探される。これは現在のアイ
テムが行末で終わったときのみ有効である。"skipnl" を指定しない場合、nextgroupは
同一行のそのアイテム以降から照合される。
次のグループまでスキップされたテキストの中では他のグループの照合は無視される。
次のグループの照合が見つからなかったとき、再び他のグループの照合が検索される。
つまり、次のグループの照合と、ホワイトスペースと<EOL>のスキップは他のアイテム
より優先される。
例:
て "endif" にもマッチする。そのためマッチ "endif" を最後に置き、最優先にしてい
る。
Note この例はネストした "if" には機能しないことに注意。ネストに対応するには引
数 "contains" を指定する必要がある(この例では簡単のため省略した)。
暗黙の conceal :syn-conceal-implicit
:sy[ntax] conceal [on|off]
これ以降の ":syntax" コマンドでキーワード、マッチ、リージョンを定義し
たときに "conceal" フラグをセットするかどうかを定義する。":syn conceal
on" を実行した後で ":syn keyword"、":syn match"、":syn region" を実行
すると、暗黙的に "conceal" フラグがセットされる。":syn conceal off" を
実行することで通常の状態、つまり "conceal" フラグを明示的に設定しなけ
ればならない状態に戻る。
:sy[ntax] conceal
"syntax conceal on" または "syntax conceal off" を表示する。
==============================================================================
8. syntaxのパターン :syn-pattern E401 E402
syntaxコマンドでは、パターンの前後を同じ文字で囲まなければならない。これは
":s" コマンドと同様である。もっともよく使われるのはダブルクォートである。しか
しパターンがダブルクォートを含んでいる場合は、そのパターンが含んでいない他の文
字を使ったほうがよい。例:
パターンの説明についてはpatternを参照。構文パターンは常に 'magic' オプション
がセットされているのと同じように解釈される(実際の 'magic' オプションの値とは無
関係)。また、'cpoptions' に 'l' フラグが含まれていない場合と同じように解釈され
る。これは構文ファイルの可搬性を高め、'compatible' と 'magic' の設定と無関係に
するためである。
"[a-z]*" など空文字列にマッチするパターンは避けること。これは全ての位置にマッ
チするため、ハイライトがとても遅くなる。
:syn-pattern-offset
パターンに文字数のオフセットを指定することができる。これによってハイライトされ
る部分を変更したり、マッチやリージョンに含まれるテキスト領域(これは他のアイテ
ムを照合するときにだけ関係する)を変更することができる。どちらもマッチしたパター
ンに相対的である。skipパターンに対して文字数のオフセットを指定すると、endパター
ンの検索が始まる位置を決めることができる。
オフセットは "{what}={offset}" の形で指定する。
{what}は次の7個の文字列のどれかである:
ms Match Start マッチしたテキストの開始位置のオフセット
me Match End マッチしたテキストの終了位置のオフセット
hs Highlight Start ハイライトが始まる位置のオフセット
he Highlight End ハイライトが終わる位置のオフセット
rs Region Start リージョンの本体が始まる位置のオフセット
re Region End リージョンが終わる位置のオフセット
lc Leading Context パターンの "leading context" を過ぎた後のオフセット
{offset}は次のうちのどれか:
s パターンのマッチ部分の先頭
s+{nr} パターンのマッチ部分の先頭から右へ{nr}文字目
s-{nr} パターンのマッチ部分の先頭から左へ{nr}文字目
e パターンのマッチ部分の末尾
e+{nr} パターンのマッチ部分の末尾から右へ{nr}文字目
e-{nr} パターンのマッチ部分の末尾から左へ{nr}文字目
{nr} ("lc" 専用): 右へ{nr}文字目からマッチを開始する
例: "ms=s+1", "hs=e-2", "lc=3".
どのパターンの後にどのオフセットを指定してもよいが、それが意味を持たない場合も
ある。次の表はどのオフセットが実際に有効かを示している:
ms me hs he rs re lc
match item yes yes yes yes - - yes
region item start yes - yes - yes - yes
region item skip - yes - - - - yes
region item end - yes - yes - yes yes
複数のオフセットの間に ',' を入れて連結することができる。例:
some "string" text
^^^^^^ ここがハイライトされる
Notes:
- パターンとオフセットの間にホワイトスペースを挟んではならない。
- ハイライトされる領域がマッチしたテキストの外側にはみ出してはならない。
- endパターンに対する負のオフセットは機能しない場合がある。これはハイライトが
既に終わっているべきとき、endパターンは検出されない可能性があるからである。
- Vim 7.2 以前では、オフセットは文字単位でなくバイト単位であった。それではマル
チバイト文字ではうまく機能しないので、7.2 から変更された。
- マッチの開始位置が、パターンがマッチした位置と別の行になってはならない。つま
り "a\nb"ms=e というのは正常に機能しない。ハイライトの開始位置は別の行にあっ
てもかまわない。"a\nb"hs=e というのは正常に機能する。
例(コメントにマッチするが /* と */ はハイライトしない):
/* this is a comment */
^^^^^^^^^^^^^^^^^^^ ここがハイライトされる
より複雑な例:
abcfoostringbarabc
mmmmmmmmmmm マッチ部分
sssrrreee start/region/endとしてハイライトされる部分
("Foo", "Exa", "Bar")
Leading context :syn-lc :syn-leading :syn-context
Note: これは古い機能であり、以前のバージョンとの後方互換性のためだけに残されて
いる。現在はパターン中の /\@<= コンストラクトを使うことが推奨されている。
/\zs も多くの場合使うことができる。
"lc" オフセットはリーディングコンテキストを指定する。これはパターンの一部にな
ければならないが、マッチ部分の一部とは見なされないものである。"lc=n" のオフセッ
トを使うとパターンの照合を試みる前にn桁戻るようになる。リーディングコンテキス
ト内に他のパターンにマッチしている文字が現れてもよい。これはマッチの前方にあっ
てはならない「エスケープ」文字を指定する場合などに使える:
___zzzz ___wwww
^^^ ^^^ Underlineにマッチする
^ ^ ZNoBackslashにマッチする
^^^^ WNoBackslashにマッチする
"ms" を指定しないと自動的に "lc" と同じ値にセットされる。
複数行にわたるパターン :syn-multi-line
パターンが "\n" を含むと改行にマッチするようになる。たいていの場合これは期待通
りに動作するが、少しだけ例外がある。
startパターンにオフセットをつけるとき、マッチ部分の開始位置が次の行の先頭で
あってはならない。ハイライトは次の行で始まってもよい。"\zs" を使うときも、マッ
チ部分の開始位置が他の行になってはならない。
skipパターンも "\n" を含んでよい。ただし次の行の最初の文字がskipパターンにマッ
チしていても、そこからendパターンの検索が続けられる。これは、再描画は領域内の
どの行でも始まることができ、skipパターンが前の行から始まったかどうかはチェック
されないからである。例えば、skipパターンが "a\nb" で、endパターンが "b" のと
き、次のテキストの2行目でendパターンがマッチする。
外部マッチ :syn-ext-match
リージョンのパターンでは特別に以下の正規表現が使える:
/\z( /\z(\) E50 E52 E879
\z(\) 一部を「external」としてマークする。これをつけると他のパターン
からアクセスできるようになる。現在はリージョンのstartパターン
内でのみ使用可能。
/\z1 /\z2 /\z3 /\z4 /\z5
\z1 ... \z9 /\z6 /\z7 /\z8 /\z9 E66 E67
startパターンにマッチしたテキスト中からマークしておいた部分を
参照する。
リージョンのstartとendパターンで正規表現の一部を共有したい場合がある。
一般的な例としてはPerlやUnixシェルのヒアドキュメントがある。これは特別な正規表
現アイテム "\z" を使えば達成できる。これは正規表現の一部を "external" として
マークしておく。するとその部分を他のパターンから参照できるようになる。例えば、
ヒアドキュメントは次のようにすればよい:
このように、\zは2つの役割を果たす。startパターンにおいては正規表現の一部
"\(\I\i*\)" をexternalとしてマークする。endパターンでは\z1によってstartパターン
中の最初のマークされた部分への外部参照とする。外部参照はskipパターン中でも使え
る:
通常のマークとexternalなマークはまったく独立であり、別々に番号が振られる。例え
ば、文字列 "aabb" に対してパターン "\z(..\)\(..\)" を適用すると、\1は "bb" を
参照し、\z1は "aa" を参照するようになる。externalなマークをした部分は、通常の
マークと違って、同一パターン内で後方参照することはできない。ある部分に対して通
常のマーク、externalなマーク両方をつけたい場合は、"\(\z(...\)\)" のようにネス
トさせればよい。
一行内でマッチした部分しか参照できないことに注意。複数行にわたってマッチした部
分は参照できない。
==============================================================================
9. クラスタ :syn-cluster E400
:sy[ntax] cluster {cluster-name} [contains={group-name}..]
[add={group-name}..]
[remove={group-name}..]
このコマンドを使うと、複数の構文グループを1つの名前のもとにまとめることができ
る。このまとまりのことをクラスタと呼ぶ。
contains={group-name}..
クラスタに含まれるグループを指定する。
add={group-name}..
指定したグループをクラスタに加える。
remove={group-name}..
指定したグループをクラスタからとり除く。
定義したクラスタはcontains=..やcontainedin=..、nextgroup=..、add=..、remove=..
などの文脈で使うことができる。そのとき、クラスタ名の頭に "@" をつける。クラス
タを定義する前にそのクラスタ名を使用してもよい。
例:
この例からわかるように、クラスタに対する変更はさかのぼって効果がある。クラスタ
の定義は直前になってチェックされる。例:
これはクラスタのネスト度にも関係がある:
E848
クラスタの最大数は 9767 である。
==============================================================================
10. 構文ファイルのインクルード :syn-include E397
構文ファイルの中で、関係する構文ファイルをインクルードしたい場合がある。
これには、構文ファイルの関係に応じて2種類の方法がある:
- インクルードされるファイル内のトップレベルのアイテムをそのままトップ
レベルとしたい場合は、単に:runtimeコマンドを使えばよい:
- インクルードされるファイル内のトップレベルのアイテムをリージョンに内
包させるには、":syntax include" コマンドを使うとよい:
:sy[ntax] include [@{grouplist-name}] {file-name}
インクルードされるファイル中で宣言された構文アイテム全てに
"contained" フラグがつけられる。さらにグループのリストを指定すると、
インクルードされるファイル中のトップレベルの構文アイテム全てに対して
そのリストがつけられる。
{file-name}が絶対パスである場合("/", "c:", "$VAR", "<sfile>" のどれ
かで始まる場合)そのファイルが読み込まれる(sourceされる)。相対パスの
場合(例: "syntax/pod.vim")、そのファイルが 'runtimepath' 中から探さ
れる。マッチしたファイル全てが読み込まれる。相対パスを使用することが
推奨される。そうすればユーザーが ":syn include" を書き換えることな
く、インクルードされるファイルを改変して別の場所に置けるからである。
E847
インクルードの最大数は 999 である。
==============================================================================
11. 表示のシンクロナイズ :syn-sync E403 E404
ドキュメント中のどの位置からでも再描画を開始できると望ましい。これを実現するに
は、再描画を開始する位置における構文の状態を知る必要がある。
:sy[ntax] sync [ccomment [group-name] | minlines={N} | ...]
シンクロナイズには4つのやり方がある:
1. 常にファイルの最初からパースする。
:syn-sync-first
2. Cスタイルのコメントに基づく。VimはCコメントの仕様を理解し、現在行がコメント
の内側から始まっているか外側から始まっているかを判定することができる。
:syn-sync-second
3. 一定行さかのぼり、そこからパースを開始する。
:syn-sync-third
4. テキストをさかのぼり、シンクロナイズを始める目印の正規表現を検索する。
:syn-sync-fourth
:syn-sync-maxlines :syn-sync-minlines
最後の3つの方法に関して、さかのぼる行数は "minlines" と "maxlines" で制限され
る。
引数 "minlines={N}" が指定されると、常に少なくともその行数さかのぼってパースが
開始される。パースする行数が少なすぎて正しくハイライトできないかもしれないと
き、またはシンクロナイズを使うのが不可能であるとき、この引数を使うとよい。
引数 "maxlines={N}" が指定されると、コメントや正規表現を検索するためにさかのぼ
る行数が最大N行になる。これは遅いマシンを使っていて、シンクロナイズする行数が
少ないとわかっているときに便利である。例:
:syn-sync-linebreaks
複数行にマッチする正規表現を使っているとき、ある行に変更を施すと、前の行でマッ
チしていた正規表現がマッチしなくなってしまうことがある。この場合、変更を施した
位置より上からシンクロナイズを行わなければならない。その行数を引数 "linebreaks"
で指定する。例えば、正規表現が改行を1個含んでいる場合はこのようにする:
"linebreaks" のデフォルト値は0。通常 "minlines" の値は "linebreaks" の値より大
きい。
第一の方法: :syn-sync-first
ファイルの最初からパースする。この方法を使うと構文ハイライトが正確になるが、大
きいファイルに対しては遅くなる。Vimは以前にパースしたテキストをキャッシュして
おく。そのため、遅くなるのはファイルを最初にパースするときだけである。しかし、
変更を施すと、それ以降の一部をパースし直さなければならなくなる(最悪の場合はファ
イルの最後まで)。
"fromstart" を使うことは "minlines" を非常に大きな値にすることと同じ効果を持
つ。
第二の方法: :syn-sync-second :syn-sync-ccomment
第二の方法を使うには、単に引数 "ccomment" をつければよい。
例:
画面最上行がCスタイルコメントの内側にあると判断される場合、グループ名が
"Comment" のリージョン構文アイテムが使われる。この方法を使うには "Comment" と
いうグループ名のリージョンがなければならないことに注意。他のグループ名を指定す
ることもできる。例:
で指定されたアイテムのうち最後のものが使われる。ここで指定するリージョンの
startパターンが "\/*"、endパターンが "*\/" となっていないと適切に機能しない。
引数 "maxlines" を使うと検索の行数を制限できる。引数 "minlines" を使うと少なく
ともその行数だけさかのぼって開始させることができる(例:2,3行だけを受け取るコン
ストラクトがある場合。ただしその場合シンクロナイズするのが困難)
Note: "*/" を含む文字列で行をまたぐものがあると、Cコメントによるシンクロナイズ
は適切に機能しない。行をまたいで文字列を書くのは悪いプログラミング習慣である
(多くのコンパイラが警告を出す)。また、コメント中に "*/" が現れる機会はまれなの
で、この制限は注意するほどのものではない。
第三の方法: :syn-sync-third
第三の方法を使うには引数 "minlines={N}" を加えればよい。この方法を指定すると、
{N}行前からパースを開始する。これは{N}行余分にパースされることを意味する。その
ためこの方法は少し遅くなる。
例:
"lines" は "minlines" と同じ意味である(古いバージョンで使われている)。
第四の方法: :syn-sync-fourth
第四の方法は、シンクロナイズパターンと呼ばれる特定のリージョンの末尾でシンクロ
ナイズするものである。行をまたげるのはリージョンだけなので、リージョンの末尾に
出会ったら、どの構文アイテムの中にいるのかを知ることができる。再描画が始まる行
のすぐ上から検索を開始し、ファイルの上方に向かって検索する。
これはシンクロナイズしない構文アイテムとちょうど同じように機能する。内包された
マッチ、nextgroupなどを使うことができる。ただし少しだけ違いがある。
- キーワードを使うことはできない。
- "sync" キーワード付きの構文アイテムは、完全に別の構文アイテムのグループを形
成する。シンクロナイズするグループとしないグループを混ぜることはできない。
- 照合はバッファ内で1行ごとに逆向きに行われる(前向きではない)。
- 行継続パターンをつけることができる。これを使うと、あたかも1行であるかのよう
に検索する一連の行を指定することができる。これは、指定したアイテムとの照合が
継続パターンを含む一連の行の最初から始まることを意味する。
- "nextgroup" や "contains" は1行(または継続された一連の行)内でだけ有効。
- リージョンは同一行(または継続された一連の行)内で開始・終了しなければならな
い。そうでないと行末(または継続された一連の行)内で終わるものとされる。
- シンクロナイズパターンとのマッチが見つかると、その行(または継続された一連の
行)の残りから再びマッチが探される。最後のマッチが使われる。
これはリージョンの開始と終了が同一行内にあるとき使われる
(例: /* this */ のようなCコメントでは、最後の "*/" が使われる)。
シンクロナイズパターンとのマッチは2通りの使い方がある。
1. 再描画を始める場所(シンクロナイズパターンの検索が始まる場所でもある)から強
調のためのパースを始める。そこで有効であると期待される構文グループを指定し
なければならない。行をまたぐリージョンが他のリージョンを含んではならない場
合にこれはうまく機能する。
2. ハイライトのためのパースはマッチの直後から継続される。マッチの直後に現れる
と期待される構文グループを指定しなければならない。
これは前の方法がうまくいかないときに使われる。より多くのテキストをパースす
る必要があるため、とても遅い。
両方のタイプを同時に使うこともできる。
シンクロナイズパターンだけでなく、他のマッチとリージョンを指定して望まないマッ
チが見つかるのを避けることができる。
[シンクロナイズパターンが別々に与えられる理由は、シンクロナイズポイントの検索
はたいていの場合、ハイライトするところを判別するよりずっと単純だからである。パ
ターンの数が減るとそれだけ速くなる。]
syn-sync-grouphere E393 E394
:syntax sync match {sync-group-name} grouphere {group-name} "pattern" ..
シンクロナイズ用に使うマッチを定義する。{group-name}はマッチのすぐ後に
続く構文グループの名前である。ハイライトのためのテキストのパースはマッ
チの直後から始まる。この{group-name}がついたリージョンが存在しなければ
ならない。最初に定義されたリージョンが使われる。マッチの後に構文グルー
プが続かない場合は "NONE" を使う。
syn-sync-groupthere
:syntax sync match {sync-group-name} groupthere {group-name} "pattern" ..
"grouphere" と同様。ただし{group-name}はシンクロナイズポイントの検索が
始まる行の行頭で使われる構文グループの名前である。マッチとシンクロナイ
ズパターンの検索が始まる位置との間のテキストは構文ハイライトを変えては
ならない。例えばCにおいて "/*" と "*/" を後方検索することができる。
"/*" が先に見つかったら、今はコメントの内側にいるとわかる。なので
"groupthere" は "cComment" となる。"*/" が先に見つかったら今はコメント
の中ではないとわかる。なので "groupthere" は "NONE" となる。(実際は、
文字列の中に "/*" と "*/" があるかもしれないので、もう少し込み入ってい
る。これは読者の練習問題としておく...)。
:syntax sync match ..
:syntax sync region ..
引数 "groupthere" なしの場合。シンクロナイズポイントの検索の際にスキッ
プされるリージョンやマッチを定義する。
syn-sync-linecont
:syntax sync linecont {pattern}
{pattern}とのマッチが次の行にも継続されるとみなされる。つまりシンクロ
ナイズポイントの検索の際、行は連結されているものと見なされる。
引数 "maxlines={N}" が同時に与えられると、マッチを検索する行がN行に制限される。
これは遅いマシンを使っていて、シンクロナイズするものが少ないとわかっているとき
に便利。例:
全てのシンクロナイズの設定をクリアするには:
あるシンクロナイズパターンをクリアするには:
==============================================================================
12. 構文アイテムのリストを表示する :syntax :sy :syn :syn-list
次のコマンドは全ての構文アイテムのリストを表示する:
ある構文グループに属する構文アイテムを表示するには:
あるクラスタに属する構文グループを表示するには: E392
":syntax" コマンドに対する他の引数については上を参照。
":syntax" コマンドは ":sy" とも略記できる。しかし ":syn" の方が見栄えがよいた
め、普通はこちらが使われる。
==============================================================================
13. カラースキーム color-schemes
次の章では個別のハイライトグループとその固有の色をどのようにすべきかについての
情報を見付けることができる。可能性が高いのは :colorscheme コマンドを使いあな
たの欲しい色のセットについてちょうどよいものを選択することである。例:
:colo :colorscheme E185
:colo[rscheme] 現在のカラースキームの名前を表示する。
基本的には次のコマンドと同じである
示される。そのパレットは、ファイル
"$VIMRUNTIME/syntax/syncolor.vim" で定義されており、
peachpuff と desert の旧バージョンに基づいている。
+eval 機能付きでコンパイルされていない場合は
"unknown" と表示される。
:colo[rscheme] {name} カラースキーム{name}を読み込む。これは 'runtimepath'
の中から "colors/{name}.vim" というファイルを検索する。
最初に見つかったものが読み込まれる。
デフォルトのカラースキームを読み込むには、
:colo default を使用する。
同様に、'packpath' 内の全てのプラグインを検索し、それ
ぞれについて "start" 内、"opt" 内の順で検索する。
再帰的な読み込みはされない。つまりカラースキームスクリ
プト中で ":colorscheme"を使うことはできない。
カラースキームのカスタマイズには2つの選択肢がある。特定の色の見栄えを変えるた
め、カラースキームを読み込む前にカラー名を再定義することができる。desert スキー
ムは、カーソルに khaki 色が使用されている。同じ色のより暗いバリエーションを使
用する場合:
:highlight-link の関連付けを変更するなど、さらにカスタマイズするには、別の名
前を使用する。例えば、 ~/.vim/colors/mine.vim" と :runtime を使用してオリジ
ナルのカラースキームを読み込む:
カラースキームが読み込まれる前に全デフォルトのカラーリストのスクリプト
(colors/lists/default.vim)が実行され、ColorSchemePre 自動コマンドイベント
がトリガーされる。カラースキームが読み込まれた後に ColorScheme 自動コマンド
イベントがトリガーされる。
colorscheme-override
カラースキームがほぼ相応しい場合は、ColorScheme 自動コマンドを使用して、その
上に変更を加えることができる。例えば、背景色を削除するには(一部の端末では透過
することができる):
さらに2色を変更する:
多くの変更を行う場合は、配布された配色をホームディレクトリにコピーして変更する
ことをお勧めする:
Vim 9.0 ではカラースキームのコレクションが更新され、さまざまな端末で動作するよ
うになった。変更の1つは、Normal ハイライトグループを複数定義して、色が適切に表
示されるようにすることであった。古いバージョンを好む場合は、ここで見つけること
ができる:
https://github.com/vim/colorschemes/blob/master/legacy_colors/
カラースキームファイルを書くための情報については次を参照:
==============================================================================
14. ハイライトコマンド :highlight :hi E28 E411 E415
ハイライトグループには3つのタイプがある:
- 特定の構文言語用のもの。名前がその言語の名前で始まる。このタイプのほとんど
は属性を持たず、2番目のタイプのグループにリンクされる。
- 全ての構文言語に対して使われるもの。
- 'highlight' オプションに使われるもの。
hitest.vim
現在有効な全てのグループを知るにはこのコマンドを使う:
自身の色を使って表示する。
:hi[ghlight] 属性がセットされたハイライトグループを全て表示する。
:hi[ghlight] {group-name}
1つのハイライトグループを表示する。
highlight-clear :hi-clear
:hi[ghlight] clear 全てのハイライトをデフォルトに戻す。ユーザーによって加
えられたグループに対するハイライトが全て消去される。
現在の 'background' の値によってデフォルトの色が決ま
る。
デフォルトのリンクがあるなら、復元される。 :hi-link
:hi[ghlight] clear {group-name}
:hi[ghlight] {group-name} NONE
1つのハイライトグループに対するハイライトを無効にする。
デフォルトの色に戻すわけではない。
:hi[ghlight] [default] {group-name} {key}={arg} ..
ハイライトグループを追加する、または既存のグループに対
する強調を変更する。指定された色の名前が認識されない場
合、'runtimepath' 上で見付かる各
colors/lists/default.vim が読み込まれる。
引数{key}={arg}についてはhighlight-argsを参照。
オプショナルな引数[default]については
:highlight-defaultを参照。
通常、ハイライトグループは起動時に一度だけ追加される。そこでハイライトのデフォ
ルト値をセットする。その後、ハイライトコマンドを使うことによってデフォルトでな
い値に変えることができる。値 "NONE" を使うとその値をオフにしたりデフォルト値に
戻したりできる。
色を変える簡単な方法は:colorschemeコマンドを使うことである。すると、次のよう
な ":highlight" コマンドが書かれたファイルが読み込まれる:
このファイルに含まれない設定は変更されないままである。指定されたフィールドだけ
が更新され、それ以前の設定とマージされる。なのでその結果は次のコマンド1つを実
行するのと同じである:
:highlight-verbose
'verbose' を0でない値にしてハイライトグループの一覧を表示すると、最後に設定さ
れた場所も表示される。例:
Last set from /home/mool/vim/vim7/runtime/syntax/syncolor.vim
":hi clear" が実行されると、このコマンドを実行したスクリプトがデフォルト値とし
て言及される。より詳しくは:verbose-cmdを参照。
highlight-args E416 E417 E423
ハイライトに関して、ターミナルは3種類に分類される:
term 通常のターミナル(vt100, xterm)
cterm カラーターミナル(MS-Windows console, color-xterm。これらはtermcapエン
トリ "Co" をもつ)
gui GUI
ハイライトはこれらのタイプごとに指定できる。そうすることによって、同じ構文ファ
イルを全てのターミナルに対して使用でき、ターミナルごとに最善のハイライトを利用
できるようになっている。
1. highlightコマンドの引数(通常のターミナル用)
bold underline undercurl
underdouble underdotted
underdashed inverse italic
standout nocombine strikethrough
term={attr-list} attr-list highlight-term E418
attr-listはコンマ区切りのリスト(スペースは入れない)で、要素は以下の通
り(順序はどうでもよい):
bold
underline
undercurl 必ずしも使用できるとは限らない
underdouble 必ずしも使用できるとは限らない
underdotted 必ずしも使用できるとは限らない
underdashed 必ずしも使用できるとは限らない
strikethrough 必ずしも使用できるとは限らない
reverse
inverse reverseと同じ
italic
standout
nocombine 属性をまとめる代わりに、オーバーライドする
NONE 属性を使用しない(属性をリセットするために使う)
この引数で "bold" を指定してもよいし、太文字のフォントを指定してもよ
い。どちらも表示は同じになる。
underline-codes
"undercurl" は波下線のこと。"undercurl" が使用できないときは
"underline" が使われる。一般的には "undercurl" および "strikethrough"
はGUIといくつかの端末で使用できる。その色は highlight-guisp か
highlight-ctermul で設定できる。端末で波下線が動くようにするにはこれ
らの termcap エントリを試してみるとよい:
"underdouble" は二重下線で、"underdotted" はドット下線、"underdashed"
は破線の下線。これらは一部の端末でのみサポートされる。端末がこれらをサ
ポートしている場合は、次のようなコードを指定する必要がある:
または t_Ds が設定されてない場合は、underline がフォールバックとして使
用される。
start={term-list} highlight-start E422
stop={term-list} term-list highlight-stop
これらのターミナルコードのリストを使ってターミナルについての標準的でな
い属性を得ることができる。
引数 "start" でエスケープシーケンスを指定すると、ハイライトするテキス
トの前にそれが書き込まれる。そのテキストをハイライトする際にターミナル
に送りたいものをなんでも指定できる。引数 "stop" でエスケープシーケンス
を指定すると、強調されるテキストの後にそれが書き込まれる。"start" で
行ったことを "stop" で元に戻すべきである。そうしないとスクリーンがご
ちゃごちゃになってしまうだろう。
{term-list}は2つの形を持つ:
1. エスケープシーケンス付きの文字列。
これは "t_" で始まるものと空文字列を除く任意の文字列である。"<Esc>"
や "<Space>" のような<>記法が利用できる。例:
start=<Esc>[27h;<Esc>[<Space>r;
2. ターミナルコードのリスト。
ターミナルコードは "t_xx" の形を持つ。"xx" はtermcapエントリ名であ
る。ターミナルコードはコンマで区切る。ホワイトスペースは使えない。
例:
start=t_C1,t_BL
対応するターミナルコードが存在しなければならない。
2. highlightコマンドの引数(カラーターミナル用)
cterm={attr-list} highlight-cterm
{attr-list}の説明は上を参照attr-list。
色を使う場合、引数 "cterm" は "term" と異なる結果になる。例えば、通常
のターミナルではコメントにアンダーラインを引き、カラーターミナルではコ
メントを青色で表示することができる。
Note: DOSコンソールなどいくつかのターミナルでは色づけの際にこれらの属
性を混在させることはできない。移植性を重視するには、"cterm=" か
"ctermfg=" か "ctermbg=" のどれか1つだけを使うこと。
ctermfg={color-nr} highlight-ctermfg E421
ctermbg={color-nr} highlight-ctermbg
ctermul={color-nr} highlight-ctermul
これらで端末で前面 (ctermfg)、背景 (ctermbg)、下線 (ctermul) に使う色
を指定する。
引数{color-nr}で色番号を指定する。色番号の範囲は0からtermcapエントリ
"Co" の値 - 1 までである。
この色番号で実際に表示される色はターミナルの種類とその設定に依存する。
"cterm" の設定によって色が変わる場合もある。例えば、あるシステムでは
"cterm=bold ctermfg=3" でそのまま3番の色を表示し、他のシステムでは異な
る色を表示することがある。
xtermにおいてはこれはユーザーのリソースに依存し、やや予測ができない。
デフォルトについてはxtermのドキュメントを参照のこと。カラーxterm用の色
は .Xdefaults ファイルで変更することができる。このため、ユーザーごとに
表示される色が異なるかもしれない。カラーxtermについてはxterm-colorを
参照。
tmux
tmuxを使用する場合は、tmux configとして以下を使用することを勧める:
https://github.com/tmux/tmux/wiki/FAQ#how-do-i-use-a-256-colour-terminal
https://github.com/tmux/tmux/wiki/FAQ#how-do-i-use-rgb-colour
コンソールウィンドウ内のMS-Windows標準色は固定されている。そのため、こ
れらの色を名前に使っている。一方、X11の色名の意味は固定されている。そ
こでハイライトの設定に可搬性を持たせるため、X11の色設定が使われている
(複雑であるが)。以下の色名を、色番号の代わりに使うことができる:
cterm-colors
NR-16 NR-8 COLOR NAME
0 0 Black
1 4 DarkBlue
2 2 DarkGreen
3 6 DarkCyan
4 1 DarkRed
5 5 DarkMagenta
6 3 Brown, DarkYellow
7 7 LightGray, LightGrey, Gray, Grey
8 0* DarkGray, DarkGrey
9 4* Blue, LightBlue
10 2* Green, LightGreen
11 6* Cyan, LightCyan
12 1* Red, LightRed
13 5* Magenta, LightMagenta
14 3* Yellow, LightYellow
15 7* White
"NR-16" の下の番号は16色ターミナル('t_Co' が16以上のもの)用である。
"NR-8" の下の番号は8色ターミナル('t_Co' が16未満のもの)用である。
'*' はctermfgにbold属性がセットされることを意味している。"linux"
など多くの8色ターミナルでは明るい色になる。ただし背景色には適用さ
れない。'*' がないものはbold属性なしになる。他の方法でbold属性をつ
けたいなら引数 "cterm=" を "ctermfg=" や "ctermbg=" の後に書くこ
と。または色名の代わりに番号を使うこと。
色名の大文字と小文字は無視されるが、Vim は v:colornames 辞書から読み
取るときに小文字の色名を使用する。
Note 16色ansiスタイルターミナル(xtermを含む)ではNR-8の列の番号が使われ
ることに注意。ここで '*' は 'add 8' という意味になる。つまりBlueが12
に、DarkGrayが8になる。
Note カラーターミナルによっては、色名を使うと間違った色で表示される場
合もあることに注意。
色をなしにするのに "NONE" も使える。
:hi-normal-cterm
Normalグループに対して "ctermfg" や "ctermbg" を設定すると、これらはハ
イライトされないテキストに対する色になる。
例:
'background' が明示的に設定されていないという条件の下で、オプション
'background' が自動的に調整される。これによって 'background' に依存
するハイライトグループが変更される。そのため、まずNormalに対する色を設
定し、それから他の色を設定するべきである。
カラースキーム使用時に 'background' を変更するとカラースキームが再読み
込みされる。そしてNormalを含む全ての色がリセットされる。これが嫌なら最
初に変数 "g:colors_name" を削除すること。
Normalグループの "ctermfg" や "ctermbg" を変更した場合、Vim終了時にそ
の色をリセットする必要がある。これはtermcapエントリ "op" t_opを使っ
てなされる。リセットがうまくいかない場合は.vimrc中で 't_op' を設定して
みること。
E419 E420 E453
Vimが通常の文字色と背景色と下線色を知っている場合、色名として "fg" と
"bg" と "ul" を使用できる。これはNormalグループの色とMS-Windowsコンソー
ルの色を設定しないと使えない。例えば反転表示をするには:
Normalグループを変更しても "fg" と "bg" は調整されない。
ctermfont={font-nr} highlight-ctermfont
端末で使用する代替フォント番号を指定する。使用可能なフォントは端末に
よって異なる。端末が代替フォント用に設定されていない場合は、単に何もし
ない。{font-nr} の範囲は 0-10 で、0 はフォントをデフォルトフォントにリ
セットし、1-9 は 9 つの代替フォントの 1 つを選択し、10 はFraktur フォ
ントを選択する。詳細については、端末による SGR パラメータ10-20 の処理
を参照。 t_CF
3. highlightコマンドの引数(GUI用)
gui={attr-list} highlight-gui
これらはGUIモードで使われる属性を設定する。
説明はattr-listを参照。
ここで "bold" を設定しても太字のフォントを使ってもよい。どちらも同じ効
果を持つ。
"Normal" グループに対する属性は無視される。
font={font-name} highlight-font
font-nameはVimを実行しているシステム上で使われるフォント名である。X11
ではこれは複雑な名前になる。例えば:
フォント名 "NONE" を使うとデフォルトのフォントに戻る。
"Normal" グループに対してフォントを設定すると、これがデフォルトフォン
トになる(オプション 'guifont' が変更されるまでは; 最後に設定したものが
使われる)。
以下のものはMotif上でのみ動作し、他のGUI上では利用できない:
"Menu" グループに対してフォントを設定すると、メニューが変更される。
"Tooltip" グループに対してフォントを設定すると、ツールチップが変更され
る。
Menu用とTooltip用を除く全てのフォントのサイズがデフォルトフォントのサ
イズと同じでなければならない。そうでないと再描画の際に問題が発生する。
名前にスペースや特殊文字を含むフォントを使う場合、名前をシングルクォー
トでくくる。このためシングルクォートを名前に含めることはできない。
例:
guifg={color-name} highlight-guifg
guibg={color-name} highlight-guibg
guisp={color-name} highlight-guisp
guifgは文字色、guibgは背景色、guispは波線および取り消し線の色を指定す
る。これらはGUIで使用される。
いくつか特別な名前がある:
NONE no color (透明) E1361
bg 通常の背景色を使う
background 通常の背景色を使う
fg 通常の文字色を使う
foreground 通常の文字色を使う
名前にスペースや特殊文字を含む色を使う場合、名前をシングルクォートでく
くる。このためシングルクォートを名前に含めることはできない。
例:
gui-colors
推奨されている色名 (これらはほとんどのシステムで利用可能である)
Red LightRed DarkRed
Green LightGreen DarkGreen SeaGreen
Blue LightBlue DarkBlue SlateBlue
Cyan LightCyan DarkCyan
Magenta LightMagenta DarkMagenta
Yellow LightYellow Brown DarkYellow
Gray LightGray DarkGray
Black White
Orange Purple Violet
Win32 GUIバージョンでは他にもシステムカラーが利用できる。
win32-colorsを参照。
RGB値によって色を指定することもできる。
フォーマットは "#rrggbb"、ここで
"rr" Red値
"gg" Green値
"bb" Blue値
これらの値は16進であり、範囲は "00" から "ff"。例:
あなたがカラースキームの作者であり同じ16進数値を繰り返し使うのであれば
v:colornames に (小文字の) カラー名を定義することができる。例えば:
名前付きのカラーに依存するカラースキームを使用していて、それらのカラー
の正確な見栄えを調整したい場合は、スキームを読み込む前に
v:colornames の値をオーバーライドすることで調整できる:
他人に信頼されるカラーリストを開発したい場合は、カラー名にプリフィック
スを付けるとよい。慣例により、これらのカラーリストは colors/lists ディ
レクトリに配置される。その例を
'$VIMRUNTIME/colors/lists/csscolors.vim' で見ることができる。このリス
トは、以下を使用したカラースキームによって読み込まれる:
highlight-groups highlight-default
以下はデフォルトのハイライトグループである。これらのグループはデフォルトでオプ
ション 'highlight' によって使われる。ただしハイライトは 'background' の値に依
存することに注意。":highlight" コマンドで現在の設定を知ることができる。
可能な場合、名前は使用されている色でハイライトされる。これにより読み取り不能に
なる場合は、ビジュアル選択を使用すること。
hl-ColorColumn
ColorColumn 'colorcolumn' で設定された列の表示に使われる
hl-Conceal
Conceal Conceal されたテキストの代わりに表示される代替文字の表示に使わ
れる ('conceallevel' 参照)。
hl-Cursor hl-lCursor
Cursor カーソル下の文字。
lCursor language-mapping が使用されているときのカーソルの下の文字
('guicursor' を参照)。
hl-CursorIM
CursorIM Cursorと同じだが、IMEモードにいるとき使われる。CursorIM
hl-CursorColumn
CursorColumn 'cursorcolumn' がオンになっているときのカーソルがある画面上の
桁。
hl-CursorLine
CursorLine 'cursorline' がオンになっているときのカーソルがある画面上の行。
hl-Directory
Directory ディレクトリ名(とリストにある特別な名前)。
hl-DiffAdd
DiffAdd 差分モード: 追加された行。diff.txt
hl-DiffChange
DiffChange 差分モード: 変更された行。diff.txt
hl-DiffDelete
DiffDelete 差分モード: 削除された行。diff.txt
hl-DiffText
DiffText 差分モード: 変更された行中の変更されたテキスト。diff.txt
hl-EndOfBuffer
EndOfBuffer バッファ中で最終行以降の領域を埋めるための行 (~)。
標準では、hl-NonTextのようにハイライトされる。
hl-ErrorMsg
ErrorMsg コマンドラインに現れるエラーメッセージ。
hl-VertSplit
VertSplit 垂直分割したウィンドウの区切りとなる桁。
hl-Folded
Folded 閉じた折り畳みの行。
hl-FoldColumn
FoldColumn 'foldcolumn'
hl-SignColumn
SignColumn 目印signsが表示される桁。
hl-IncSearch
IncSearch 'incsearch' のハイライト; ":s///c" で置換されたテキストにも使
われる。
hl-LineNr
LineNr ":number" と ":#" コマンドの行番号。'number' オプションか
'relativenumber' オプションが設定されているときにはその表示に
も使われる。
hl-LineNrAbove
LineNrAbove 'relativenumber' オプションが設定されているときのカーソル行の
上の行番号。
hl-LineNrBelow
LineNrBelow 'relativenumber' オプションが設定されているときのカーソル行の
下の行番号。
hl-CursorLineNr
CursorLineNr LineNr と同じだが 'cursorline' が設定され、'cursorlineopt' に
"number" が含まれるか "both" が設定されているときに現在行に使
われる。
hl-CursorLineFold
CursorLineFold FoldColumn と同じだが 'cursorline' が設定されたときに現在行に
使われる。
hl-CursorLineSign
CursorLineSign SignColumn と同じだが 'cursorline' が設定されたときに現在行に
使われる。
hl-MatchParen
MatchParen カーソル下の文字、または直後の文字が括弧であるとき、その文字と
対応する括弧に使われる。pi_paren.txt
hl-MessageWindow
MessageWindow :echowindow で表示されるポップアップウィンドウにおけるメッ
セージ。定義されていないときは hl-WarningMsg が用いられる。
hl-ModeMsg
ModeMsg 'showmode' のメッセージ(例、"-- INSERT --")。
hl-MsgArea
MsgArea コマンドライン領域。メッセージの出力にも使用される。
'cmdheight' も参照。
hl-MoreMsg
MoreMsg more-prompt
hl-NonText
NonText ウィンドウの端の '@' や、'smoothscroll' を設定しているときの行
頭に表示される "<<<"、'showbreak' で設定された文字など、実際の
テキストには存在しない文字(例. 全角文字が行末に収まらないとき
">" が表示される)。
hl-Normal
Normal 通常のテキスト。
hl-Pmenu
Pmenu ポップアップメニュー: 通常の項目。
hl-PmenuSel
PmenuSel ポップアップメニュー: 選択されている項目。
hl-PmenuKind
PmenuKind ポップアップメニュー: "kind" の通常の項目。
hl-PmenuKindSel
PmenuKindSel ポップアップメニュー: "kind" の選択されている項目。
hl-PmenuExtra
PmenuExtra ポップアップメニュー: "extra text" の通常の項目。
hl-PmenuExtraSel
PmenuExtraSel ポップアップメニュー: "extra text" の選択されている項目。
hl-PmenuSbar
PmenuSbar ポップアップメニュー: スクロールバー。
hl-PmenuThumb
PmenuThumb ポップアップメニュー: スクロールバーのつまみ部分。
hl-PmenuMatch
PmenuMatch ポップアップメニュー: 通常の項目内のマッチしたテキスト。
hl-PmenuMatchSel
PmenuMatchSel ポップアップメニュー: 選択されている項目内のマッチしたテキス
ト。
hl-PopupNotification
PopupNotification
popup_notification() で生成されたポップアップウィンドウ。定
義されていないときは hl-WarningMsg が用いられる。
hl-Question
Question ヒットエンタープロンプトhit-enterとyes/noクエスチョン。
hl-QuickFixLine
QuickFixLine quickfixウィンドウ内の現在の quickfix 項目。
hl-Search
Search 最後に検索した語のハイライト('hlsearch')を参照。
強調されるべき同様の項目にも使用される。
hl-CurSearch
CurSearch 最後の検索パターンでの現在のマッチ('hlsearch' を参照)。
Note: 検索の後に有効だが、変更されたり、画面再描画すると失効し
てしまう。
hl-SpecialKey
SpecialKey ":map" でリストされるメタキーと特別なキー。テキスト中の
unprintableな文字を表示するのにも使われる。
一般に: 実際とは異なる文字で表示されるテキスト
hl-SpellBad
SpellBad スペルチェッカに認識されない単語。spell
これは他のハイライトと同時に組み合わせられる。
hl-SpellCap
SpellCap 大文字で始まるべき単語。 spell
これは他のハイライトと同時に組み合わせられる。
hl-SpellLocal
SpellLocal スペルチェッカによって他の地域で使われると判断される単語。
spellこれは他のハイライトと同時に組み合わせられる。
hl-SpellRare
SpellRare スペルチェッカによってまず使わないと判断される単語。spell
これは他のハイライトと同時に組み合わせられる。
hl-StatusLine
StatusLine カレントウィンドウのステータスライン。
hl-StatusLineNC
StatusLineNC 非カレントウィンドウのステータスライン。
Note: これが "StatusLine" に等しい場合、カレントウィンドウのス
テータスラインに "^^^" が使われる。
hl-StatusLineTerm
StatusLineTerm terminal ウィンドウのカレントウィンドウのステータスライン。
hl-StatusLineTermNC
StatusLineTermNC terminal ウィンドウの非カレントウィンドウのステータ
スライン。
hl-TabLine
TabLine タブページの行の、アクティブでないタブページのラベル。
hl-TabLineFill
TabLineFill タブページの行の、ラベルがない部分。
hl-TabLineSel
TabLineSel タブページの行の、アクティブなタブページのラベル。
hl-Terminal
Terminal terminal ウィンドウ (terminal-size-color を参照)。
hl-Title
Title ":set all"、":autocmd" などによる出力のタイトル。
hl-Visual
Visual ビジュアルモード選択。
hl-VisualNOS
VisualNOS vimが "Not Owning the Selection" のときのビジュアルモード選択。
これをサポートしているのはX11 GUIgui-x11とxterm-clipboard
のみ。
hl-WarningMsg
WarningMsg 警告メッセージ。
hl-WildMenu
WildMenu 'wildmenu' 補完における現在の候補。
hl-User1 hl-User1..9 hl-User9
'statusline' 構文によってステータスラインとルーラー('rulerformat' によって)中
で9個のハイライトが使えるようになっている。その名前はUser1からUser9である。
GUI使用時には、これらのグループを使ってメニューやスクロールバー、ツールチップ
の色を設定することができる。これらにデフォルト値はない。これはWin32では利用で
きない。ここではhighlightの引数のうちfont, guibg, guifgの3つだけが効果を持つ。
hl-Menu
Menu メニューのフォント、文字、背景。ツールバーにも使われる。
使用可能なhighlightの引数: font, guibg, guifg.
NOTE: Motifでは 'guifontset' が空かどうかにかかわらず、常に引
数fontで実際のフォントセットを指定する。そしてそれが現在の
:language に結び付けられる。
hl-Scrollbar
Scrollbar メインウィンドウのスクロールバーの文字と背景。
使用可能なhighlightの引数: guibg, guifg.
hl-Tooltip
Tooltip ツールチップのフォント、文字、背景。
使用可能なhighlightの引数: font, guibg, guifg.
NOTE: Motifでは 'guifontset' が空かどうかにかかわらず、常に引
数fontで実際のフォントセットを指定する。そしてそれが現在の
:language に結び付けられる。
==============================================================================
15. グループのリンク :hi-link :highlight-link E412 E413
複数の構文グループに対して同じハイライトを適用させるには、両方のグループから一
つのハイライトグループにリンクを作り、リンク先に対して色属性を与えると簡単であ
る。
リンクを作るには:
:hi[ghlight][!] [default] link {from-group} {to-group}
リンクを削除するには:
:hi[ghlight][!] [default] link {from-group} NONE
Notes: E414
- {from-group}か{to-group}のどちらかが存在しない場合、リンクは作成されない。こ
の場合エラーメッセージは表示されない。
- リンクされたグループに対して ":highlight" を使うと、即座にリンクが削除され
る。
- 既に{from-group}にハイライト設定がされている場合、'!' をつけないとリンクは作
成されない。sourceされたファイル中の ":highlight link" コマンドに関して、エ
ラーメッセージは表示されない。そのため既に設定を持つグループに対するリンクが
スキップされる。
:hi-default :highlight-default
引数[default]によってグループに対するデフォルトのハイライトを設定することがで
きる。そのグループに対して既にハイライトが指定されている場合、このコマンドは無
視される。既にリンクが存在する場合も同様。
[default] は、そのハイライト設定をあとから上書きさせるために使われる。例えば
C 構文ファイルは次の行を含んでいる:
行を .vimrc に加える:
め、.vimrc の設定を上書きしてしまう。
:highlight clear ではリンクが存続し、個別のファイルタイプでのハイライトがあ
りまた別のカラースキームから選択的に残したいものを維持するのに便利で、
"after/syntax/{filetype}.vim" ファイルにこのようにコマンドを置く:
==============================================================================
16. 構文の消去 :syn-clear E391
カレントバッファに対する構文設定を消去したいときはこのコマンドを使う:
このコマンドは、構文ハイライトをオフにしたいときや他の構文を適用したいときに使
う。通常、これを構文ファイル内で行う必要はない。なぜなら、構文ファイルを読み込
む自動コマンドによって構文がクリアされる。
また、このコマンドは変数 "b:current_syntax" を削除する。このコマンドの実行後に
はすべての構文がなくなるからである。
カレントバッファに対する特定の構文グループを消去するには:
カレントバッファに対する特定の構文グループリストを消去するには:
:syntax-off :syn-off
全てのバッファに対して構文ハイライトを無効にしたいときは、構文ファイルを読み込
む自動コマンドを削除する必要がある:
このコマンドが実際に行うことは次のコマンドを実行するのと同じである:
設定されている必要がある。$VIMRUNTIMEを参照。
:syntax-reset :syn-reset
色を変えたため、色がごちゃごちゃになってしまったときは、次のコマンドを使うとデ
フォルトに戻る:
少々正しくない名前だが、どんなシンタックス項目もリセットせず、ただハイライトの
みに影響する。
これはオプション 'highlight' に対する色は変更しない。
ユーザーのvimrcファイル中で設定した構文色もVimのデフォルト値に戻ることに注意。
カラースキームを使っている場合、カラースキームによって定義された色は失われるこ
とに注意。
このコマンドが実際に行うことは次と同じ:
ここでオプション 'runtimepath' が使われていることに注意。
syncolor
構文ハイライトに別の色を使うには、色を設定する Vim script を作ればよい。その
ファイルを 'runtimepath' 中 ('runtimepath' は $VIMRUNTIME を含む) のディレクト
リに置くと、その設定がデフォルトの色設定を上書きする。こうして ":syntax reset"
コマンドを実行すると、それらの色が有効になる。
Unixでは~/.vim/after/syntax/syncolor.vimファイルを使うとよい。例:
E679
このsyncolor.vimが "syntax on" を実行しないこと、また、オプション 'background'
を設定したりコマンド "colorscheme" を実行しないように注意すること。もしこれら
を実行すると無限ループに陥ってしまう。
Note カラースキームを使用すると、ユーザー定義の色が使われるのか、それともカラー
スキームで定義された色が使われるのかわからなくなる場合がある。これはカラース
キームファイルに依存する。:colorschemeを参照。
syntax_cmd
syntax/syncolor.vimファイルが読み込まれると、変数 "syntax_cmd" に次の3つの値の
どれかがセットされる:
"on" :syntax on コマンド。ハイライト色が上書きされるがリンクはそ
のまま。
"enable" :syntax enable コマンド。まだハイライトが定義されていないグ
ループに対して色を定義するだけ。:highlight default を使うこ
と。
"reset" :syntax reset コマンドまたはカラースキームを読み込む。全ての
色を定義する。
"skip" 色を定義しない。'runtimepath' で前にあるsyncolor.vimファイルが
既にデフォルト設定をセットしているとき、そのデフォルト設定をス
キップするために使われる。
==============================================================================
17. 関数名などのハイライト tag-highlight
ファイル中の全てのタグ(関数名など)をハイライトするには、次のマッピングを使うと
よい。
<F11> -- tags.vimファイルを生成し、タグをハイライトする。
<F12> -- 既存のtags.vimファイルをもとにハイライトする。
警告: tagsファイルが大きくなるほどこの操作は遅くなり、消費するメモリ量も多くな
る。
typedef、union、structだけをハイライトすることもできる。そのためには Universal
Ctags (https://ctags.io で入手可能) あるいは Exuberant ctags
(http://ctags.sf.net で入手可能)が必要である。
以下をあなたのMakefileに加える:
# 型用のハイライトファイルを作成する。Universal/Exuberant ctagsとawkが必要
types: types.vim
types.vim: *.[ch]
ctags --c-kinds=gstu -o- *.[ch] |\
awk 'BEGIN{printf("syntax keyword Type\t")}\
{printf("%s ", $$1)}END{print ""}' > $@
そして以下を.vimrcに加える:
==============================================================================
18. ウィンドウローカル構文 :ownsyntax
通常は同じバッファを表示するすべてのウィンドウは同じ構文設定を共有する。しかし
ながら、特定のウィンドウだけ別の構文設定を使用することも可能である。例えば一つ
のウィンドウで LaTeX のソースを普通に表示して、別のウィンドウで異なる表示をす
る (文字を隠したり太字や斜字体で表示したりする) ことが可能である。その場合は
'scrollbind' オプションを使うと便利である。
同じバッファを表示しているウィンドウが複数あって、現在のウィンドウの構文だけを
"foo" に設定するには次のようにする:
"w:current_syntax" 変数が "foo" に設定される。"b:current_syntax" 変数の値は変
更されない。"b:current_syntax" は構文ファイルによって変更されるが、
"b:current_syntax" を一時的に保存・復元することで値が変わらないようになってい
る。構文ファイルによって設定された値が "w:current_syntax" に代入される。
Note: この設定によって 'spell', 'spellcapcheck', 'spellfile' および
'spelloptions' オプションは初期設定に戻る。
ウィンドウの独自構文が定義されると、同じバッファの他のウィンドウで実行された構
文コマンド (:syntax clear を含む) が影響しなくなる。逆に、そのウィンドウで実行
された構文コマンドも他のウィンドウには影響しなくなる。
独自構文を持ったウィンドウは他のバッファを読み込むかファイルを再読み込みするこ
とで通常の動作に戻る。
ウィンドウを分割したときは、新しいウィンドウは元々の構文を使う。
==============================================================================
19. カラー対応xterm xterm-color color-xterm
ほとんどのカラー対応xtermは8色しか持たない。デフォルト設定で色がつかない場合は
以下を .vimrc に加えれば正常に色がつくはずである:
最初の "if" を自分のターミナル名にマッチするように変更する必要があるかもしれな
い。例: "xterm" でなく "dtterm"。
Note: これらの設定は ":syntax on" の前に行うこと。そうでないと色がおかしくなっ
てしまう。
xiterm rxvt
上の設定はxitermとrxvtでも動作するように注意されている。しかしrxvtで16色を使う
場合にはterminfoを設定しなければならない:
colortest.vim
色設定をテストするためのファイルがVimディストリビューションに入っている。これ
を使うには次のコマンドを実行する:
xtermのあるバージョン(とlinuxコンソールのようなターミナル)は、たとえ色数が8に
定義されていても、より明るい文字色を出力することができる。そのため 't_Co' が8
のとき、Vimは明るい文字色に対して "cterm=bold" 属性をセットする。
xfree-xterm
16色以上を使うにはxtermの最新バージョンを入手すること(XFree86 3.3以降に含まれ
ているはずである)。また、以下の場所でも最新バージョンを入手できる:
次にそれをconfigureするよい方法を示す。これは88色を使い、termcap-query機能を有
効化する。これによってVimがxtermに何色をサポートしているか問い合わせることがで
きるようになる
(このxtermをUTF-8エンコーディングで使う場合にはUTF8-xtermも参照)。
以下を.vimrcに加えるとこのxtermで動くはずである(16色用):
+terminfoなしではVimはこれらの設定を認識し、自動的にctermの8色と上の設定を
"<Esc>[9%dm" と "<Esc>[10%dm" に変換する。16色以上も自動的に変換される。
以下の設定が256色用にうまくいくと報告されている:
または単にTERM環境変数を "xterm-color" または "xterm-16color" にセットし、うま
くいくか試してみるとよい。
以下のX resourcesを(~/.Xdefaultsファイルで)使いたいかもしれない:
XTerm*color0: #000000
XTerm*color1: #c00000
XTerm*color2: #008000
XTerm*color3: #808000
XTerm*color4: #0000c0
XTerm*color5: #c000c0
XTerm*color6: #008080
XTerm*color7: #c0c0c0
XTerm*color8: #808080
XTerm*color9: #ff6060
XTerm*color10: #00ff00
XTerm*color11: #ffff00
XTerm*color12: #8080ff
XTerm*color13: #ff40ff
XTerm*color14: #00ffff
XTerm*color15: #ffffff
Xterm*cursorColor: Black
[Note: cursorColorにはバグがある。カーソルの色が最後に描画されたテキストの色に
なってしまうというものである。これはxtermの新しいバージョンを使うと解決する
が、まだ全ての人がそれを使っているわけではない。]
これらを即座に更新するには.XdefaultsファイルをXオプションデータベースマネー
ジャーに再読み込みさせる(.Xdefaultsを変更したときはこれを行う必要がある):
xterm-blink xterm-blinking-cursor
xtermでカーソルを点滅させるにはtools/blink.cを見ること。またはThomas Dickeyの
xtermのパッチレベル107以上を使い(入手場所は上を参照)、以下のリソースを設定す
る。
XTerm*cursorBlink: on
XTerm*cursorOnTime: 400
XTerm*cursorOffTime: 250
XTerm*cursorColor: White
hpterm-color
次の設定はhptermで(大体)うまく機能する。文字色は8色だけサポートしている:
Eterm enlightened-terminal
次の設定がEnlightenedターミナルエミュレータまたはEtermで機能すると報告されてい
る。また、明るい色を表示するのにbold属性を使うxtermライクターミナル全てで機能
すると思われる。必要なら前述のように ":if" をつけること。
TTpro-telnet
次の設定がTTpro telnet用にうまくいく。Tera Term ProはMS-Windows用のフリーウェ
ア/オープンソースプログラムである。
Setup→Font→Enable Boldが無効になっていることを確認すること。
(この情報はJohn Love-Jensen <eljay@Adobe.COM>によって提供された)
==============================================================================
20. シンタックスが遅い時には :syntime
この章はシンタックスファイルを作る人向けである。
もしあなたの作ったシンタックスにより再描画が遅くなってしまったら、ここに書いた
方法でそれを速くできるかもしれない。folding や 'relativenumber' といった機能
を有効化すると、それらが干渉して遅くなる場合もある。
Note: +profile 機能付きでコンパイルされた時のみ利用可能である。
"huge" 機能付きでVimをビルドする必要があるかもしれない。
時間のかかっているシンタックスパターンを発見するために、以下の様な手順で概要を
得られる:
これにより利用されたシンタックスパターンが、マッチにかかった時間の多い順にソー
トして表示される。
:syntime on シンタックスにかかる時間の測定を開始する。測定をするに
はシンタックスパターンのマッチに多少のオーバーヘッドが
発生する。
:syntime off シンタックスの計測を終了する。
:syntime clear 全部のカウンタを 0 にし、計測をやり直す。
:syntime report 現在のウィンドウで ":syntime on" してから使用されたシ
ンタックス要素を表示する。出力される内容をちゃんと読む
には幅の広いディスプレイを使ったほうが良い。
リストは総時間(TOTAL)でソートされている。
リストには以下のカラムからなる:
TOTAL パターンのマッチにかかった総時間
COUNT パターンが使われた回数
MATCH パターンが実際にマッチした回数
SLOWEST マッチ1回あたりの最長時間
AVERAGE マッチ1回あたりの平均時間
NAME シンタックス要素の名前。Note 一意な名
前ではないことに注意。
PATTERN 使用されたパターン
パターンマッチングは多くの可能性を試さなければならないときに遅くなる。パターン
にできる限り多くのリテラルテキストを含むことで、パターンが無駄にマッチする可能
性を減らすよう試してみると良い。
"\@<=" や "\@<!" 要素を使用する時は、マッチする最大サイズを指定すると現在以降
の行の全部の位置でパターンを試すことを避けられる。
例えば要素のマッチするものがリテラルテキストならば、そのテキストのサイズをバイ
ト数で指定すると良い。
"<\@<=span" "<span" 中の "span" にマッチする。これは "<" があるかどうか多
くの場所でマッチを試みる。(ゆえに遅くなりやすい)
"<\@1<=span" 同じものにマッチするが、"span" の前の1バイトだけをチェックす
る。
vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
VIMリファレンスマニュアル by Bram Moolenaar
構文ハイライト syntax syntax-highlighting coloring
Vimは構文ハイライトによってテキストの一部を別のフォントや色で表示することがで
きる。ハイライトされるテキストは、特定のキーワードや正規表現パターンにマッチす
るテキストである。動作を速く保つため、ファイル全体を構文解析するわけではないか
ら、このハイライト方法には限界が存在する。単語(レキシカル)ハイライトと呼ぶのが
より正しいが、皆が構文ハイライトと呼ぶのでそう呼び続けている。
Vimは全ての端末で構文ハイライトをサポートしている。しかし、多くの普通の端末に
はごく限られたハイライト手段しか提供されていないので、GUI版のgvimで動作させた
ときに見栄えが最もよくなる。
ユーザーマニュアルにおける記述:
usr_06.txt 構文ハイライトの紹介。
usr_44.txt 構文ファイルの記述方法の紹介。
1. クイックスタート :syn-qstart
2. 構文ファイル :syn-files
3. 構文ファイル読込の手順 syntax-loading
4. HTMLへの変換 2html.vim
5. 構文ファイルの覚書 :syn-file-remarks
6. 構文を定義する :syn-define
7. :syntaxの引数 :syn-arguments
8. syntaxのパターン :syn-pattern
9. クラスタ :syn-cluster
10. 構文ファイルのインクルード :syn-include
11. 表示のシンクロナイズ :syn-sync
12. 構文アイテムのリストを表示する :syntax
13. カラースキーム color-schemes
14. ハイライトコマンド :highlight
15. グループのリンク :highlight-link
16. 構文の消去 :syn-clear
17. 関数名などのハイライト tag-highlight
18. ウィンドウローカル構文 :ownsyntax
19. カラー対応xterm xterm-color
20. シンタックスが遅い時には :syntime
{Vi にはこれらのコマンドはない}
コンパイル時に+syntax機能を無効にした場合には構文ハイライトは利用することは
できない。
==============================================================================
1. クイックスタート :syn-qstart
:syn-enable :syntax-enable
次のコマンドで構文ハイライトが有効になる:
:syntax enable
このコマンドにより実際には次のコマンドが実行される
:source $VIMRUNTIME/syntax/syntax.vim
環境変数VIMが設定されていない場合は、Vimは別の方法($VIMRUNTIME参照)でパスの
検索を試みる。通常はこれでうまくいく。うまく動作しない場合は、環境変数VIMにVim
の構成ファイルが置いてあるディレクトリの設定を試みる。例えば、構文ファイルが
ディレクトリ "/usr/vim/vim82/syntax" にあるならば、$VIMRUNTIMEに
"/usr/vim/vim82" を設定する。これはVimを起動する前に、シェルで設定しておかなけ
ればならない。このコマンドは、GUIが実行されている、もしくは間もなく立ち上がる
場合、スクリプトmenu.vim の読み込みも行う。これを避けるには 'go-M' を参照。
:syn-on :syntax-on
コマンド :syntax enable は現在の色設定のほとんどを保持する。そのため、このコ
マンドを使用する前後にコマンド :highlight で好みの色を設定することができる。
現在の設定を破棄して、デフォルトの色を設定させたい場合は次のコマンドを使用する:
:syntax on
:hi-normal :highlight-normal
GUIを使用している場合は、次のコマンドで黒地に白文字を設定できる:
:highlight Normal guibg=Black guifg=White
カラー端末については:hi-normal-ctermを参照。自分自身で色を設定する方法についてはsyncolorを参照。
NOTE: MS-Windowsの構文ファイルは改行コードが<CR><NL>である。UNIXでは<NL>であ
る。自分のシステムに合った改行コードのファイルを使わなければならない。しかし、
MS-Windowsではオプション 'fileformats' が空でなければ正しい形式が自動的に選択
される。
NOTE: 反転表示("gvim -fg white -bg black")を使用する場合、gvimrcが読込まれた
後、GUIウィンドウが開かれるまでは 'background' のデフォルト値が設定されない。
そのせいで誤ったデフォルトのハイライトが使用されてしまう。ハイライト表示を有効
化する前に 'background' のデフォルト値を設定するには、gvimrcにコマンド
":gui" を含めればよい:
:gui " ウィンドウを開き、'background' にデフォルト値を設定する
:syntax on " ハイライトを有効化し、'background' にもとづいて色を設定する
:syntax on " ハイライトを有効化し、'background' にもとづいて色を設定する
NOTE: .gvimrcの中で ":gui" を使用すると "gvim -f" によりフォアグラウンドで開
始することができなくなる。その際は ":gui -f" を使用すること。
g:syntax_on
次のコマンドで構文ハイライトの有効・無効を切換えることができる:
:if exists("g:syntax_on") | syntax off | else | syntax enable | endif
これをキーマップに設定するには、以下のように書く:
:map <F7> :if exists("g:syntax_on") <Bar>
\ syntax off <Bar>
\ else <Bar>
\ syntax enable <Bar>
\ endif <CR>
[全ての文字をそのまま入力すること]\ syntax off <Bar>
\ else <Bar>
\ syntax enable <Bar>
\ endif <CR>
詳細
コマンド ":syntax" はファイルをsourceすることで実装されている。その際にsource
されるファイルの中身を見れば、このコマンドがどのように動作しているのか正確に知
ることができる。
コマンド ファイル
:syntax enable $VIMRUNTIME/syntax/syntax.vim
:syntax on $VIMRUNTIME/syntax/syntax.vim
:syntax manual $VIMRUNTIME/syntax/manual.vim
:syntax off $VIMRUNTIME/syntax/nosyntax.vim
syntax-loadingも参照。
NOTE: 長い行があって表示が遅く、構文ハイライトをオフにしたくなるような場合は、
'synmaxcol' をもっと小さい値にすることも考えてみること。
==============================================================================
2. 構文ハイライトファイル :syn-files
ある1つの言語用の構文とハイライト色定義コマンドは通常1つのファイル(以下構文ファ
イル)に格納される。名前は "{name}.vim" と付ける慣習になっている。{name}はその
言語の名前か短縮名となる(DOSファイルシステムで要求される、8.3文字の形式にあわ
せることが望ましい)。
例:
c.vim perl.vim java.vim html.vim
cpp.vim sh.vim csh.vim
構文ファイルには、vimrcファイルと同様にExコマンドを記述できる。しかし1つのファ
イルには、1つの言語のためのコマンドだけを記述するよう取り決めている。ある言語
が別の言語のスーパーセットである時には、他のファイルを内包していても良く、例え
ば、ファイルcpp.vimはファイルc.vimを取り込むようになっている:
:so $VIMRUNTIME/syntax/c.vim
通常これらの構文ファイルは自動コマンドにより読込まれる。例:
:au Syntax c source $VIMRUNTIME/syntax/c.vim
:au Syntax cpp source $VIMRUNTIME/syntax/cpp.vim
このようなコマンドはファイル$VIMRUNTIME/syntax/synload.vimに書かれている。:au Syntax cpp source $VIMRUNTIME/syntax/cpp.vim
独自構文ファイルの作成 mysyntaxfile
独自の構文ファイルを作成し、":syntax enable" をしたとき自動的にそのファイルが
使われるようにするには、以下のようにする:
1. ユーザーランタイムディレクトリを作成する。通常はオプション 'runtimepath' に
示される最初のディレクトリを使用する。UNIXの例では:
mkdir ~/.vim
2. "syntax" という名のディレクトリを作成する。UNIXでは:
mkdir ~/.vim/syntax
3. Vimの構文ファイルを作成する。もしくはインターネットからダウンロードする。そ
のファイルはディレクトリsyntaxに置く。構文 "mine" の例では:
:w ~/.vim/syntax/mine.vim
これで独自構文ファイルを手動で使うことはできるようになっている:
:set syntax=mine
このコマンドを実行するためにVimを再起動する必要はない。このファイルタイプが認識されるようにするには、new-filetypeを参照。
システム管理者としてユーザー全てに独自構文ファイルを使わせるには、各ユーザーに
同じ構文ファイルをインストールさせる必要はなく、全ユーザー共通の 'runtimepath'
ディレクトリにインストールすればよい。
既存の構文ファイルに設定を追加する mysyntaxfile-add
既存の構文ファイルでほぼ満足だが、いくつかの設定を追加したりハイライト手法を変
更したい場合には、以下の手順に従う:
1. 上同様、'runtimepath' に示されるユーザーディレクトリを作成する。
2. "after/syntax" というディレクトリを作成する。UNIXの例:
mkdir -p ~/.vim/after/syntax
3. 追加設定を行うコマンドを含む Vim script ファイルを作成する。例として、C言語
のコメントの色を変更するには:
highlight cComment ctermfg=Green guifg=Green
4. その設定ファイルをディレクトリ "after/syntax" に置く。名前には構文名に
".vim" を追加して使用する。Cの構文を拡張するならば:
:w ~/.vim/after/syntax/c.vim
以上。次回Cのファイルを編集する時にはコメントが異なった色で表示される。Vimを再
起動する必要はない。
構文ファイルが複数になるときは、ファイルタイプの名前のディレクトリに置くとよ
い。そのディレクトリの中の全ての "*.vim" ファイルが読み込まれるようになる。例:
~/.vim/after/syntax/c/one.vim
~/.vim/after/syntax/c/two.vim
~/.vim/after/syntax/c/two.vim
既存の構文ファイルを置き換える mysyntaxfile-replace
標準の構文ファイルが気に入らない場合や、新しいバージョンをダウンロードした際に
は、上で述べたmysyntaxfileに従えば良い。ただ 'runtimepath' で、前の方に記され
たディレクトリに構文ファイルを置くように気をつければ良い。Vimは適合する構文ファ
イルのうち最初に見つけた1つだけを読込む (それが b:current_syntax を設定すると
想定している)。
名前付けの慣習 group-name {group-name} E669 W18
構文グループとは、同じ種類の構文アイテムをグループ化したものである。構文グルー
プからハイライトグループにリンクされ、ハイライトグループに対して色が設定され
る。構文グループそれ自体は、色や属性を指定するものではない。
ハイライトや構文のグループ名はASCII文字、数字、アンダースコア、ドット、または
ハイフンだけでつけなければならない。正規表現では: "[a-zA-Z0-9_.-]*" しかしそ
れ以外の文字を使ってもVimはエラーを出力しない。グループ名の最大長は約200バイト
である。 E1249
各ユーザーが好みの色セットを使用できるように、多くの言語に共通するハイライトグ
ループには優先名が与えられている。推奨されているグループ名は以下のとおり(構文
ハイライトがちゃんと機能していれば、"Ignore" 以外はそのグループに設定された色
で表示されるだろう):
*Comment o コメント
*Constant o 定数
String o 文字列定数: "これは文字列です"
Character o 文字定数: 'c', '\n'
Number o 数値定数: 234, 0xff
Boolean o ブール値の定数: TRUE, false
Float o 浮動小数点数の定数: 2.3e10
*Identifier o 変数名
Function o 関数名(クラスメソッドを含む)
*Statement o 命令文
Conditional o if, then, else, endif, switch, その他
Repeat o for, do, while, その他
Label o case, default, その他
Operator o "sizeof", "+", "*", その他
Keyword o その他のキーワード
Exception o try, catch, throw
*PreProc o 一般的なプリプロセッサー命令
Include o #include プリプロセッサー
Define o #define プリプロセッサー
Macro o Defineと同値
PreCondit o プリプロセッサーの #if, #else, #endif, その他
*Type o int, long, char, その他
StorageClass o static, register, volatile, その他
Structure o struct, union, enum, その他
Typedef o typedef宣言
*Special o 特殊なシンボル
SpecialChar o 特殊な文字定数
Tag o この上で CTRL-] を使うことができる
Delimiter o 注意が必要な文字
SpecialComment o コメント内の特記事項
Debug o デバッグ命令
*Underlined o 目立つ文章, HTMLリンク
*Ignore o (見た目上)空白, 不可視 hl-Ignore
*Error o エラーなど、なんらかの誤った構造
*Todo o 特別な注意が必要なもの; 大抵はTODO FIXME XXXなど
のキーワード
*Added o 差分内の追加行
*Changed o 差分内の変更行
*Removed o 差分内の削除行
マーク(*)されている名前が優先グループ、その他はマイナーグループである。優先グ
ループには、"syntax.vim" によりデフォルトのハイライト手法が定義されている。マ
イナーグループは優先グループにリンクされ、リンクした先と同じハイライト手法にな
る。ファイル "syntax.vim" が読込まれた後でコマンド ":highlight" を使えば、その
デフォルトを上書することができる。
ハイライトグループ名には大文字小文字の区別がないことに注意。"String" と
"string" はどちらも同じグループを意味する。
以下の名前は予約されているのでグループ名として使用することはできない:
NONE ALL ALLBUT contains contained
hl-Ignore
Ignore グループを使うときは、conceal 機能も使うと便利かもしれない。
conceal 参照。
==============================================================================
3. 構文ファイル読込の手順 syntax-loading
ここではコマンド ":syntax enable" を実行した時に何が起こるかの詳細を説明する。
Vimは初期化の時に、ランタイムファイルの在り処を自動的に発見する。ここでは変数
$VIMRUNTIMEにその場所が格納されているとする。
":syntax enable" と ":syntax on" では以下のことが起こる:
$VIMRUNTIME/syntax/syntax.vimを読込む
|
+- $VIMRUNTIME/syntax/nosyntax.vimを読込んで古い構文を削除する
|
+- 'runtimepath' からsyntax/synload.vimを読込む
| |
| +- 構文ハイライトの色を設定する。カラースキームが定義されている場合は
| | ":colors {name}" で再度読込む。そうでない場合は
| | ":runtime! syntax/syncolor.vim" が使用される。":syntax on" は既存
| | の色設定を上書設定し、":syntax enable" はまだ設定されていないグルー
| | プのみを設定する。
| |
| +- 適切な構文ファイルをオプション 'syntax' が設定される時に読込む自動
| | 実行コマンドを設定する。 synload-1
| |
| +- ユーザーによる追加ファイルを変数mysyntaxfileから読込む。これは
| Vim 5.xとの互換性のためだけに存在する。 synload-2
|
+- ":filetype on" を実行し ":runtime! filetype.vim" が実行される。これは
| 見つけることのできる全てのfiletype.vimを読込む。
| $VIMRUNTIME/filetype.vimは常に読込まれ、以下のことが実行される。
| |
| +- 拡張子に基づいてオプション 'filetype' を設定する自動コマンドをイン
| | ストールする。これにより既知のファイル形式に付いて、ファイル名と当
| | 該形式との関連付けが成される。 synload-3
| |
| +- ユーザーによる追加ファイルを変数 myfiletypefile から読込む。これは
| | Vim 5.xとの互換性のためだけに存在する。 synload-4
| |
| +- ファイル形式が検出されなかった時にscripts.vimを読込むための自動実
| | 行コマンドをインストールする。 synload-5
| |
| +- 構文メニュー設定のため$VIMRUNTIME/menu.vimを読込む。 menu.vim
|
+- ファイル形式が検出された時にオプション 'syntax' を設定するための
| FileType自動コマンドを設定する。 synload-6
|
+- 既に読込まれているバッファに対して構文ハイライトを行うために、関連した
自動コマンドを実行する。
ファイルを読込む時には、Vimは以下のように関連した構文ファイルを見つける:
ファイルを読込むとBufReadPost自動コマンドが起動する。
|
+- synload-3(既知ファイル形式)かsynload-4(ユーザー定義ファイル形式)の自
| 動実行コマンドがヒットした場合、オプション 'filetype' にそのファイル形
| 式名が設定される。
|
+- synload-5の自動コマンドが実行される。まだファイル形式が決定されてい
| ない場合は、'runtimepath' からscripts.vimが検索される。これは常に以下
| のことを行う$VIMRUNTIME/scripts.vimを読込む。
| |
| +- ユーザーによる追加ファイルを変数 myscriptsfile から読込む。これは
| | Vim 5.xとの互換性のためだけに存在する。
| |
| +- 未だにファイル形式が決定できない場合、ファイルの内容を検査する。検
| 査は "getline(1) =~ pattern" のように認識できるファイル形式かどう
| か行われ、認識できるならば 'filetype' を設定する。
|
+- ファイル形式が決定されて 'filetype' が設定された時に、上記synload-6
| のFileType自動コマンドが実行される。決定したファイル形式名がそれにより
| 'syntax' へ設定される。
|
+- 上記でオプション 'syntax' が設定されると、synload-1(とsynload-2)の
| 自動実行コマンドが実行される。これにより次のコマンドでメインとなる構文
| ファイルが 'runtimepath' から読込まれる。
| runtime! syntax/<name>.vim
|
+- ユーザーがインストールしたその他のFileTypeおよびSyntax自動コマンドが実
行される。これは特定の構文のハイライトを変更するのに使うことができる。
==============================================================================
4. HTMLへの変換 2html.vim convert-to-HTML
これは構文ファイルではなくて、現在のウィンドウの内容をHTMLに変換するスクリプト
である。Vimは新しいウィンドウを作成しそこにHTMLファイルを構築する。
変換結果を保存すればブラウザーでそれを表示できる。Vim での表示と同じ色で表示さ
れるはずである。g:html_line_ids を有効化すると、ブラウザーのアドレスバーで
URL の末尾に (例えば) #L123 や #123 と付け加えることで、その行にジャンプでき
る。また、g:html_dynamic_folds を有効化すると、Vim の折り畳みを表示したり隠
したりできる。
使う際にはオプション 'filetype' や 'syntax' に "2html" を設定してはならない!
現在のファイルをコンバートするためにはこのスクリプトを読込む:
:runtime! syntax/2html.vim
2html.vim に影響する変数はたくさんある。下記参照。下記の on/off オプションは指
定された値を明示的に設定することで有効化/無効化できる。また、:unlet で変数を
削除することでデフォルトに戻すことができる。
覚書き:
- いくつかの本当に古いブラウザーでは背景色が表示されないことがある。
- 大半のブラウザーでは(なんとカラーで)印刷することができる!
- このバージョンの TOhtml はおそらく古い Vim でも動作するが、例えば conceal サ
ポートのようないくつかの機能は動作しない。また、GUI サポート無しでコンパイル
された古い Vim では色がおかしくなるかもしれない。
例えば次の Unix シェルスクリプトですべての .c と .h ファイルを変換できる:
for f in *.[ch]; do gvim -f +"syn on" +"run! syntax/2html.vim" +"wq" +"q" $f; done
g:html_start_line g:html_end_line
変換の範囲を指定するには、:TOhtml コマンドに範囲を指定するか、
"g:html_start_line" と "g:html_end_line" に変換したい範囲の最初と最後の行を設
定する。例えば、最後に選択された範囲だけを変換するには:
:let g:html_start_line = line("'<")
:let g:html_end_line = line("'>")
:runtime! syntax/2html.vim
:let g:html_end_line = line("'>")
:runtime! syntax/2html.vim
:TOhtml
[range]TOhtml ":TOhtml" コマンドは標準プラグインで定義されている。
このコマンドは 2html.vim を実行する。範囲が指定され
た場合は g:html_start_line と g:html_end_line をそ
の範囲に設定する。範囲省略時はファイル全体が対象とな
る。
もしカレントウィンドウが diff の一部で、
g:html_diff_one_file が設定されていない場合、:TOhtml
はカレントタブ内の diff を表示しているすべてのウィンド
ウを変換して <table> 要素で並べた HTML を生成する。
g:html_line_ids が有効なら、(例えば) #W1L42 で 1 番
目のウィンドウの 42 行目、#W3L87 で 3 番目の 87 行目に
ジャンプできる。
例:
:10,40TOhtml " convert lines 10-40 to html
:'<,'>TOhtml " convert current/last visual selection
:TOhtml " convert entire buffer
:'<,'>TOhtml " convert current/last visual selection
:TOhtml " convert entire buffer
g:html_diff_one_file
デフォルト: 0
0 なら、:TOhtml を使うとカレントタブ内の diff を表示しているすべてのウィン
ドウが変換され、<table> 要素で並べられた HTML が生成される。
1 なら、カレントバッファのみが変換される。
例:
let g:html_diff_one_file = 1
g:html_whole_filler
デフォルト: 0
0 なら、もし g:html_diff_one_file が 1 なら、3 行以上の連続した詰め行は 3 行
で表示され、真ん中の行に挿入された行数の合計が表示される。
1 なら、g:html_diff_one_file が設定されていないときのように、常に挿入された
行が表示される。
:let g:html_whole_filler = 1
TOhtml-performance g:html_no_progress
デフォルト: 0
0 なら、2html.vim の変換過程の各段階で進行状況のプログレスバーをステータスライ
ンに表示する。
1 なら、プログレスバーを表示しない。若干スピードは速くなるが、変換がいつごろ終
わるかを知ることはできない。大きなファイルならとても時間がかかるのに!
例:
let g:html_no_progress = 1
Vim を非対話で実行すれば、スクリプトでバッファやウィンドウなどを走査するごとに
表示を更新しなくてもよくなるので、速度はもっと速くなる:
vim -E -s -c "let g:html_no_progress=1" -c "syntax on" -c "set ft=c" -c "runtime syntax/2html.vim" -cwqa myfile.c
Note -s フラグは .vimrc とプラグインの読み込みを抑制する。したがって、HTML 変
換に必要な設定などは明示的に読み込まなければならない。詳細は -E と -s-ex
を参照。このように各コマンドを指定して実行するよりは、上記の -c で設定している
ようなことがらをすべてスクリプトファイルに書き込み、-u フラグで読み込んで実行
するといいだろう。
hl-TOhtmlProgress TOhtml-progress-color
プログレスバーは HTML 変換が進むにつれ、ステータスラインに沿って色付きの四角で
表示される。デフォルトでは背景色は現在の "DiffDelete" ハイライトグループの設定
が適用される。"DiffDelete" と "StatusLine" の背景色が同じ場合、TOhtml は自動で
色を調整する。自動で色を選択したくない場合は、自身でプログレスバーのハイライト
色を定義することができる。例えば:
hi TOhtmlProgress guifg=#c0ffee ctermbg=7
g:html_number_lines
デフォルト: 現在の 'number' の設定
0 なら、バッファのテキストは行番号なしで HTML に表示される。
1 なら、生成される HTML に行番号が付加される。色は Vim の行番号表示と同じ
(hl-LineNr)。
'number' がオフでも強制的に行番号を表示するなら:
:let g:html_number_lines = 1
強制的に行番号を表示しないようにするなら: :let g:html_number_lines = 0
'number' の設定に従うように戻すには: :unlet g:html_number_lines
g:html_line_ids
デフォルト: 1。g:html_number_lines が設定されていないときは 0。
この設定が 1 なら、各行番号に HTML の id 属性を付ける。行番号が表示されていな
いときは空の <span> 要素を挿入して id を付ける。この ID 属性は、HTML が単一の
バッファから生成されたときは L123 のような形になる。diff 表示から生成されたと
きは W2L123 のような形になる。これを使って (特定の diff ウィンドウの) 特定の行
にジャンプできる。指定された行にジャンプする前にその行の折り畳みを開くための
Javascript が挿入される (g:html_dynamic_folds)。javascript はウィンドウ ID
や行番号前の L を省略できる機能も提供する。
例:
page.html#L123 単一バッファファイルの 123 行目にジャンプ
page.html#123 同上
page.html#123 同上
diff.html#W1L42 diff の 1 番目のウィンドウの 42 行目にジャンプ
diff.html#42 同上
diff.html#42 同上
g:html_use_css
デフォルト: 1
1 なら、CSS で装飾された HTML 5 準拠の HTML が生成される。最新のブラウザーと多
くの古いブラウザーでサポートされている。
0 なら、<font> タグで装飾された時代遅れの HTML が生成される。これは推奨されて
いないが、古いブラウザー、あるいはメーラーや掲示板の投稿など、CSS が使えない場
合には必要だろう。
例:
:let g:html_use_css = 0
g:html_ignore_conceal
デフォルト: 0
0 なら、Conceal されたテキストは HTML には表示されず、'conceallevel' の現在の
設定に応じて :syn-cchar や 'listchars' の文字が代わりに表示される。
1 なら、Conceal されていてもされていなくても、すべてのテキストが HTML に表示さ
れる。
次のコマンドでバッファ内のすべてのテキストを HTML に表示することができる (折り
畳まれてなければ):
:let g:html_ignore_conceal = 1
:setl conceallevel=0
:setl conceallevel=0
g:html_ignore_folding
デフォルト: 0
0 なら、折り畳みで閉じられたテキストは Vim で折り畳み表示されているテキストに
置き換えられる (fold-foldtext)。Vim で折り畳みを開けるのと同じように、HTML
でも開けるようにしたい場合は g:html_dynamic_folds を参照。
1 なら、バッファのすべてのテキストを HTML に含める。テキストが折り畳まれている
かどうかは無視される。g:html_dynamic_folds は機能しない。
次のコマンドでバッファ内のすべてのテキストを HTML に表示することができる
(Conceal されてなければ):
zR
:let g:html_ignore_folding = 1
:let g:html_ignore_folding = 1
g:html_dynamic_folds
デフォルト: 0
0 なら、折り畳まれたテキストは HTML に含まれない。
1 なら、Vim の動作と同じように折り畳みを開いたり閉じたりするための、javascript
が生成される。
この変数を 1 に設定すると、g:html_use_css の設定にかかわらず、2html.vim は常に
CSS を使うようになる。
この変数は g:html_ignore_folding が設定されているときは無視される。
:let g:html_dynamic_folds = 1
g:html_no_foldcolumn
デフォルト: 0
0 なら、もし g:html_dynamic_folds が 1 なら、Vim の foldcolumn
(fold-foldcolumn) に似たテキストを生成する。ユーザーはそれをクリックすること
で折り畳みを開いたり閉じたりできる。生成されるテキスト幅の最小値は現在の
'foldcolumn' の設定で決まる。
1 なら、その列を生成しない。代わりに、マウスを折り畳みの上にもっていくことで折
り畳みが開くようになる (g:html_hover_unfold が設定されたときのように)。
:let g:html_no_foldcolumn = 1
TOhtml-uncopyable-text g:html_prevent_copy
デフォルト: 空文字列
このオプションは、例えば生成された HTML をブラウザーで開いて全体を選択してコ
ピーしたときに、特定の範囲がコピーされないようにできる。これは foldcolumn や行
番号が表示されていても、ソーステキストのみコピーできるようにしたい場合に便利で
ある。範囲の指定は次のようにする:
f: foldcolumn
n: 行番号 (折り畳みテキスト内のも)
t: 折り畳みテキスト
d: 差分詰め文字
例えば、foldcolumn と行番号をコピーできないようにするには:
:let g:html_prevent_copy = "fn"
生成されたページのコピーを防ぐための方法は g:html_use_input_for_pc の値に依
存している。
g:html_use_input_for_pc
デフォルト: "none"
g:html_prevent_copy の値が空文字列でないとき:
"all" なら、コピー抑制エリアにある通常テキストの代わりに読み込み専用の <input>
要素を使用する。古いブラウザーなどいくつかのブラウザーでは、ページ全体を選択し
コピーした後、<input> タグはページテキストと共にペーストされない。もし
g:html_no_invalid が 0 ならば、<input> タグは不正な属性を持つ。これにより大
抵のブラウザーで機能するようになるが、ページは正しくない。
Note: この方法は最近の Chrome やそれと同等なブラウザーでは動作しない。<input>
タグはテキストと共にペーストされてしまう。
"fallback" (デフォルト値) なら、古いブラウザーのために同様に <input> 要素を生
成するが、コピー抑制テキストを表示するために新しいブラウザー (これはCSS 機能ク
エリで決定される) では <input> 要素を隠し、::before 疑似要素で生成したコンテン
ツを代わりに使用する。この方法は新旧ほとんどのブラウザーで機能する。
"none" なら <input> 要素は生成されない。コンテンツを生成する方法のみが使用され
る。これは Internet Explorer のような古いブラウザーでは、コピーできないように
意図されたテキストがコピーできるか、コピー抑制テキストが全く表示されないことを
意味する。ただし、これが最も標準的な方法でマークアップも少なくなる。
g:html_no_invalid
デフォルト: 0
0 なら、もし g:html_prevent_copy が空でなく g:html_use_input_for_pc も
"none" でない場合、コピー抑制エリアのための <input> エレメントに不正な属性が意
図的に挿入される。これによって、いくつかのアプリケーションで <input> 要素がペー
ストされることを防ぐ。特に、いくつかのバージョンの Microsoft Word では不正な属
性を持つ <input> 要素をペーストしない。1 なら、不正な属性は挿入されない。正し
いページが生成される。ただし、いくつかのアプリケーションでは <input> 要素はペー
ストされてしまい、後で削除するのが困難になる。
g:html_hover_unfold
デフォルト: 0
0 なら、2html.vim で g:html_dynamic_folds 付きで生成された HTML の折り畳みを
開く方法は、生成された折り畳み列をクリックする方法だけになる。
1 なら、CSS 2.0 を使って、マウスを折り畳みの上にもっていくことで折り畳みを開け
るようにする。javascript を無効にしていても折り畳みを開けるようにしたい場合に
便利である。
Note 古いブラウザー (特に Internet Explorer 6) はこの機能をサポートしていない。
通常の CSS1 を使った IE6 用のマークアップが挿入され、IE6 でも表示できるように
はなっているが、foldcolumn がないとそれを開くことはできない。
:let g:html_hover_unfold = 1
g:html_id_expr
デフォルト: ""
動的折り畳みや行 ID によるジャンプが機能するにはドキュメント内における一意の
ID が必要である。例えば生成された HTML を他のドキュメント内にコピーしたりする
と、その ID は一意性が保証されなくなる。g:html_id_expr に式が設定されている
と、Vim は一意な文字列を得るためにその式を評価して、ドキュメント内で使用される
ID に付加する。その完全な ID であれば、他のドキュメントにコピーされた場合でも
一意に定めることができる。例えば、 _ とバッファ番号を ID に付加するには:
:let g:html_id_expr = '"_" .. bufnr("%")'
ID の末尾に "_mystring" を付加するには:
:let g:html_id_expr = '"_mystring"'
Note: diff ビューを HTML に変換するときは、この式は diff の 1 番目のウィンドウ
に対してのみ評価される。そしてその結果は他のすべてのウィンドウに対して使用され
る。
TOhtml-wrap-text g:html_pre_wrap
デフォルト: 現在の 'wrap' の設定
0 なら、もし g:html_no_pre が 0 または未設定なら、生成された HTML のテキスト
はブラウザーの端で折り返されない。
1 なら、もし g:html_use_css が 1 なら、CSS 2.0 の "white-space:pre-wrap" が
使われ、テキストはブラウザーの端で折り返される。
明示的に折り返しを有効にするには:
:let g:html_pre_wrap = 1
明示的に折り返しを無効にするには: :let g:html_pre_wrap = 0
デフォルトに戻し、'wrap' の設定が反映されるようにするには: :unlet g:html_pre_wrap
g:html_no_pre
デフォルト: 0
0 なら、テキストは <pre>...</pre> タグで囲まれる。スペース文字の連続はそのまま
Vim 内での表示と同じように表示され、タブ文字もそのまま含むことができる
(g:html_expand_tabs 参照)。
1 なら (非推奨)、<pre> タグは使われず、代わりに <div> タグが使われる。スペース
文字は 文字参照に変換され、改行には <br> が使われる。これは HTML で折り
返し (g:html_pre_wrap) をするためのもう一つの方法で、古いブラウザーでも動作
するが、Vim の表示とは違うページが生成されるかもしれない。
:let g:html_no_pre = 1
g:html_no_doc
デフォルト: 0
1 の場合、DOCTYPE, <head>, <body> などを含む完全な HTML ドキュメントは生成され
ない。g:html_use_css が有効になっている場合 (デフォルト)、CSS を手動で定義す
る必要がある。g:html_dynamic_folds および g:html_line_ids 設定 (デフォルト
ではオフ) も、いくつかの JavaScript を挿入する。
g:html_no_links
デフォルト: 0
URL のようなテキストには <a> タグを生成しない。
g:html_no_modeline
デフォルト: 0
折り畳みを無効化するモードラインを生成しない。
g:html_expand_tabs
デフォルト: 'tabstop' が 8 で 'expandtab' が 0 で 'vartabstop' が使われていな
い、かつ、foldcolumn と行番号がない場合は 0。そうでない場合は 1。
1 なら、<Tab> 文字は同等のスペース文字、または (g:html_no_pre が 1 の
場合) に置換される。
0 なら、もし g:html_no_pre が 0 または未設定なら、<Tab> 文字はそのまま HTML
に出力される。これはブラウザーで表示したときに、もとのテキストのままコピー &
ペーストできるようにしたい場合に便利である。Note これはテキストの整列やインデ
ントが崩れやすい (デフォルトとして設定された場合は別)。
強制的に <Tab> 文字を維持したい場合は:
:let g:html_expand_tabs = 0
強制的にタブ文字を展開したい場合は:
:let g:html_expand_tabs = 1
TOhtml-encoding-detect TOhtml-encoding
ウェブサーバーにコンテンツを置くような場合は、使用したいエンコーディング名を
g:html_use_encoding で指定することを強く推奨する。
エンコーディングが指定されていない場合は、'fileencoding' が設定されていれば
'fileencoding' の値から、設定されていなければ 'encoding' の値から、適切な IANA
名が使用される。特定の 'buftype' に対しては 'encoding' が常に使用される。
'fileencoding' は選択されたドキュメントエンコーディングに合うように設定され
る。
自動設定は encoding-names に挙げられたエンコーディング名に対して機能するが、
TOhtml は多くのブラウザーでサポートされているエンコーディングのみ自動設定する。
自動設定の対象外のエンコーディングを使用したい場合は明示的にそれを設定すること
ができる (下記オプション参照)。IANA 名については
http://www.iana.org/assignments/character-sets を参照。
Note: デフォルトではすべての Unicode エンコーディングは BOM なし UTF-8 として
HTML 生成される (W3C 推奨):
http://www.w3.org/International/questions/qa-choosing-encodings
http://www.w3.org/International/questions/qa-byte-order-mark
g:html_use_encoding
デフォルト: なし。上述のとおり、'fileencoding' の値に応じて IANA 名が使われる。
文字セットの自動設定を上書きするには、g:html_use_encoding に使用したい文字セッ
トの名前を設定する。ウェブサーバーに上げるような場合には、UTF-8 のような広くサ
ポートされている文字セットを設定することが推奨される:
:let g:html_use_encoding = "UTF-8"
文字セット指定の行を含めたくない場合は g:html_use_encoding に空文字を設定する(非推奨):
:let g:html_use_encoding = ""
自動的に判断する設定に戻すには変数 g:html_use_encoding を削除する: :unlet g:html_use_encoding
g:html_encoding_override
デフォルト: なし。encoding-names で挙げられているエンコーディングに対しては
autoload/tohtml.vim で既定の変換が定義されている。
自動設定されない文字セットを g:html_use_encoding で明示的に設定したときに、
それに対応する 'fileencoding' を指定することができる。
これは文字セット-エンコーディング組の辞書で、TOhtml が使用する組を置き換えたり
追加したりできる。
例えば HTML 文字セットの "windows-1252" を "8bit-cp1252" エンコーディングに対
応させるなら:
:let g:html_encoding_override = {'windows-1252': '8bit-cp1252'}
g:html_charset_override
デフォルト: なし。encoding-names で挙げられているエンコーディングに対しては
autoload/tohtml.vim で既定の変換が定義されている。それは多くのブラウザーでサ
ポートされている。
2html.vim が 'fileencoding' や 'encoding' から適切な HTML 文字セットを自動的
に決定できない場合に設定する。既定のエンコーディング-文字セット組を上書きする
こともできる。例えば、TOhtml はすべての Unicode/UCS エンコーディングに対しては
UTF-8 を使用するが、代わりに UTF-16 や UTF-32 を使うようにするには次のように設
定する:
:let g:html_charset_override = {'ucs-4': 'UTF-32', 'utf-16': 'UTF-16'}
Note: UTF-32 か UTF-16 でエンコードされたドキュメントはいくつかのメジャーブラ
ウザーで互換性の問題があることが知られている。
g:html_font
デフォルト: "monospace"
g:html_font を使って1つないしは複数のフォントを変換されたドキュメントに対して
指定できる。このオプションに文字列を設定した場合はシングルクォートで囲まれる。
またオプションにリストを設定した場合は全てのリストアイテムがシングルクォートで
囲まれ、リストはコンマで結合される。どちらの場合でも、一般的なフォントファミリ
名、(CSSを使っての)フォントファミリ名、(CSSを使わない場合の)フォントフェイス名
を補う為に "monospace" が追加される。
例:
" font-family: 'Consolas', monospace;
:let g:html_font = "Consolas"
:let g:html_font = "Consolas"
" font-family: 'DejaVu Sans Mono', 'Consolas', monospace;
:let g:html_font = ["DejaVu Sans Mono", "Consolas"]
:let g:html_font = ["DejaVu Sans Mono", "Consolas"]
convert-to-XML convert-to-XHTML g:html_use_xhtml
デフォルト: 0
0 なら、標準 HTML 4.01 を生成する (可能なら strict)。
1 なら、XHTML 1.0 を生成する (XML 準拠の HTML)。
:let g:html_use_xhtml = 1
==============================================================================
5. 構文ファイルの覚書 :syn-file-remarks
b:current_syntax-variable
Vimは読み込んだ構文の名前を変数 "b:current_syntax" に記憶している。ある構文が
有効な場合だけある設定を行うにはこの変数が利用できる。例:
:au BufReadPost * if b:current_syntax == "csh"
:au BufReadPost * do-some-things
:au BufReadPost * endif
:au BufReadPost * do-some-things
:au BufReadPost * endif
ABEL abel.vim ft-abel-syntax
ABELのハイライトにはユーザーが定義できるオプションが幾つかある。それらを有効化
するにはそれぞれの変数に何か値を設定すれば良い。例:
:let abel_obsolete_ok=1
無効化するには ":unlet" を使用する。例: :unlet abel_obsolete_ok
変数 ハイライト
abel_obsolete_ok 古いキーワードをエラーでなく命令文として扱う
abel_cpp_comments_illegal '//' をインラインコメントリーダーとして扱わない
ADA
ft-ada-syntaxを参照。
ANT ant.vim ft-ant-syntax
ANTの構文ファイルにはデフォルトでJavaScriptとPythonの構文ハイライトが含まれて
いる。関数AntSyntaxScript()の第1引数にタグ名を、第2引数にファイル名を指定する
ことでその他のスクリプト言語用構文ハイライトをインストールすることができる。
例:
:call AntSyntaxScript('perl', 'perl.vim')
これは次のようなANTのコードにPerlの構文ハイライトをインストールするものである
<script language = 'perl'><![CDATA[
# everything inside is highlighted as perl
]]></script>
# everything inside is highlighted as perl
]]></script>
スクリプト言語を永続的にインストールするにはmysyntaxfile-addを参照。
APACHE apache.vim ft-apache-syntax
Apache の構文ファイルは Apache HTTP サーバーのバージョン 2.2.3 に基づいた構文
ハイライトを提供する。
asm.vim asmh8300.vim nasm.vim masm.vim asm68k
ft-asm-syntax ft-asmh8300-syntax ft-nasm-syntax
ft-masm-syntax ft-asm68k-syntax fasm.vim
アセンブリ言語
"*.i" にマッチするファイルのタイプは Progress かアセンブリである。自動判別がう
まく機能しない場合、または Progress ファイルを一切編集しない場合は、vimrcでこ
れを使用する:
:let filetype_i = "asm"
"asm" には使用するアセンブリ言語の種類を指定する。同じ拡張子を使用しているアセンブリ言語はたくさんある。そのため、ユーザーは自分
が使っている種類を選択するか、もしくはアセンブリファイルそのものにVimがそれと
判断できるような行を追加しなければならない。現在は以下の構文ファイルが利用可能:
asm GNUアセンブラ(デフォルト)
asm68k モトローラ680x0アセンブラ
asmh8300 日立H-8300用GNUアセンブラ
ia64 インテルItanium 64
fasm Flat アセンブラ (http://flatassembler.net)
masm マイクロソフトアセンブラ(たぶん80x86汎用)
nasm ネットワイドアセンブラ
tasm ターボアセンブラ(80x86,Pentium,MMXの命令コードを含む)
pic PICアセンブラ(現在はPIC16F84用)
アセンブリファイルに次のような行を書き加えるのが一番柔軟である:
asmsyntax=nasm
ここで、"nasm" は実際に使用するアセンブリ構文の名前に置き換えること。この記述はファイルの先頭 5 行以内に書いてなければならない。この文字列の前後に非空
白文字があってはならない。Note asmsyntax=foo を指定するのはモードライン
(modeline) で ft=foo と設定するのと同じであり、設定がぶつかったときはモード
ラインの設定が先に処理される (特に、例えばモードラインで ft=asm と設定すると、
asmsyntax があっても GNU 構文強調表示が使われることになる)。
構文の種類はバッファ変数b:asmsyntaxを設定することで常にそちらが優先される:
:let b:asmsyntax = "nasm"
自動にしろ手動にしろb:asmsyntaxが設定されていないときには、グローバル変数
asmsyntaxが使用される。これによりデフォルトのアセンブリ言語を設定することがで
きる:
:let asmsyntax = "nasm"
最後の手段として、何も設定されていない場合には、"asm" 構文が使用される。
ネットワイドアセンブラ(nasm.vim)の補助ハイライト
機能を有効化するには:
:let {variable}=1|set syntax=nasm
無効化するには: :unlet {variable} |set syntax=nasm
変数 ハイライト内容
nasm_loose_syntax 非オフィシャルな拡張構文をエラーとしない
(パーサー依存; 非推奨)
nasm_ctx_outside_macro マクロ外のコンテキストをエラーとしない
nasm_no_warn 潜在的に危険な構文をToDoとしてハイライトしない
ASTRO astro.vim ft-astro-syntax
コンフィグレーション
以下の変数は、特定の構文ハイライト機能を制御する。
これらを .vimrc に追加できる。
".astro" ファイルで TypeScript と TSX を有効にするには (デフォルト "disable"):
let g:astro_typescript = "enable"
".astro" ファイルでスタイラスを有効にするには (デフォルト "disable"):
let g:astro_stylus = "enable"
NOTE: astro ファイルでスタイラスをサポートするには、外部プラグインをインストー
ルする必要がある。
ASPPERL ft-aspperl-syntax
ASPVBS ft-aspvbs-syntax
*.aspと*.asaという名のファイルはどちらもPerlもしくはVisual Basicのスクリプトた
りえる。Vimにとってこれを判別するのは難しいので、グローバル変数を設定すること
でどちらを使用するのか宣言することができる。どちらでもPerlスクリプトを使用する
なら:
:let g:filetype_asa = "aspperl"
:let g:filetype_asp = "aspperl"
Visual Basicを使用するなら次のように設定する::let g:filetype_asp = "aspperl"
:let g:filetype_asa = "aspvbs"
:let g:filetype_asp = "aspvbs"
:let g:filetype_asp = "aspvbs"
ASYMPTOTE asy.vim ft-asy-syntax
デフォルトでは、基本的な Asymptote キーワードのみがハイライトされる。拡張ジ
オメトリキーワードをハイライトするには:
:let g:asy_syn_plain = 1
そして、3D 構造に関連するキーワードをハイライトするには:
:let g:asy_syn_three = 1
デフォルトでは、Asymptote で定義された色 (例: lightblue) がハイライトされる。
TeX で定義された色 (例: BlueViolet) をハイライトするには:
:let g:asy_syn_texcolors = 1
または、Xorg カラー (例: AliceBlue):
:let g:asy_syn_x11colors = 1
BAAN baan.vim baan-syntax
baan.vim は リリース BaanIV から SSA ERP LN まで、3 GL と 4 GL プログラミング
両方に対応した構文を定義している。たくさんの標準的な定義/定数がサポートされて
いる。
次を .vimrc に書いておくと、ある種のコーディング標準違反を教えてくれる:
let baan_code_stds=1
baan-folding
以下の変数によって、様々なレベルで構文折り畳みを有効にできる (これらはユーザー
の .vimrc で設定すること)。ソースブロックと SQL についてより複雑な折り畳みを
行うと CPU に負荷がかかる。
折り畳みを有効にし、関数レベルで折り畳みをするにはこうする:
let baan_fold=1
次の設定を行うと、if, while, for ... のようなソースブロックレベルの折り畳みが有効になる。キーワード begin/end の前のインデントが等しくなければならない (ス
ペースとタブは異なるとみなされる)。
let baan_fold_block=1
次を設定すると SELECT, SELECTDO, SELECTEMPTY ... のような埋め込み SQL ブロックの折り畳みが有効になる。キーワード begin/end の前のインデントが等しくなければ
ならない (スペースとタブは異なるとみなされる)。
let baan_fold_sql=1
Note: ブロック折り畳みを有効にすると、小さな折り畳みがたくさんできるかもしれない。.vimrc でオプション 'foldminlines' と 'foldnestmax' を :set するか、
.../after/syntax/baan.vim 内で :setlocal をする (after-directory を参照)
とよいかもしれない。例:
set foldminlines=5
set foldnestmax=6
set foldnestmax=6
BASIC basic.vim vb.vim ft-basic-syntax ft-vb-syntax
Visual Basicも「通常の」BASICも、どちらも拡張子には ".bas" が使用される。どち
らが使用されているか判別するのに、Vimはファイルの先頭5行以内に "VB_Name" とい
う文字列が存在するかどうかを検査する。存在しなければ、ファイル形式は "basic"
となり、そうでなければ "vb" となる。拡張子が ".frm" のファイルは常にVisual
Basicとして扱われる。
自動判別がうまく機能しない場合、または例えば FreeBASIC ファイルのみしか編集し
ない場合は、vimrcでこれを使用する:
:let filetype_bas = "freebasic"
C c.vim ft-c-syntax
Cには幾つかの補助的なハイライト方法がある。それらを有効化するには対応した変数
に値 (0 を含む) を設定する。例:
:let c_comment_strings = 1
:let c_no_bracket_error = 0
これを無効化するには :unlet を使う。例::let c_no_bracket_error = 0
:unlet c_comment_strings
0 に変更しても無効化されない!代わりに、C++ のハイライトに切り替える方法もある:
:set filetype=cpp
変数 ハイライト内容
c_gnu GNU gcc固有の要素
c_comment_strings コメント内の文字列と数値
c_space_errors 行末の空白文字とタブ文字前のスペース文字
c_no_trail_space_error ... 但し行末の空白文字は除外
c_no_tab_space_error ... 但しタブ文字前のスペース文字は除外
c_no_bracket_error [] の内側の {} をエラーとして表示しない
c_no_curly_error [] と () の内側の {} をエラーとして表示しない;
... { と } が 1 桁目にある場合を除く
デフォルトでエラーとして表示される。欠落した
")" を見つけられないため。
c_curly_error 全てのペアを検証することにより対応する { がない } をハ
イライトする。これを有効にすると、ファイルの先頭から同
期が 始まるため、遅くなる
c_no_ansi ANSI標準の型と定数をハイライトしない
c_ansi_typedefs ... 但し標準ANSI型はハイライトする
c_ansi_constants ... 但し標準ANSI定数はハイライトする
c_no_utf 文字列中の\uと\Uをハイライトしない
c_syntax_for_h ファイル *.h に C++ ではなく C の構文を適用し、
objcpp ではなく objc の構文を適用する。
c_no_if0 "#if 0" のブロックをコメントとしてハイライトしない
c_no_cformat 文字列中の "%" によるフォーマットをハイライトしない
c_no_c99 C99の標準アイテムをハイライトしない
c_no_c11 C11の標準アイテムをハイライトしない
c_no_bsd BSD 特有の型をハイライトしない
c_functions 関数呼び出しと定義をハイライトする
c_function_pointers 関数ポインタの定義をハイライトする
'foldmethod' が "syntax" に設定されていると、/* */ のコメントと { } のブロック
が折り畳まれる。コメントを折り畳みたくなければこのようにする:
:let c_no_comment_fold = 1
"#if 0" のブロックも同様に折り畳まれる。折り畳みたくなければこのようにする: :let c_no_if0_fold = 1
上方向にスクロールしているときにハイライト表示がおかしくなり、それが<CTRL-L>で
再描画すると直るようなら、内部変数 "c_minlines" にもっと大きな値を設定すれば解
決できるかもしれない:
:let c_minlines = 100
これにより構文判定のシンクロナイズ位置が表示開始行の100行手前に設定される。初期設定の値は50行(c_no_if0を使用した場合は15行)である。ただしこれには、大きな値
を設定すると再描画が遅くなるという短所がある。
"#if 0" / "#endif" のブロックをコメントとしてハイライトしている場合には、
"#if 0" がウィンドウのトップから "c_minlines" 以内にある時にしか正しく動作しな
いことに注意する。長い "#if 0" のブロックを使用した場合には、それは正しくハイ
ライトされない。
コメント内で追加要素にマッチを行うには、クラスタcCommentGroupを使用する。
例:
:au Syntax c call MyCadd()
:function MyCadd()
: syn keyword cMyItem contained Ni
: syn cluster cCommentGroup add=cMyItem
: hi link cMyItem Title
:endfun
:function MyCadd()
: syn keyword cMyItem contained Ni
: syn cluster cCommentGroup add=cMyItem
: hi link cMyItem Title
:endfun
ANSIの定数はグループ "cConstant" でハイライトされる。これには "NULL", "SIG_IGN"
やその他のものが含まれる。しかしANSI標準でないもの、例えば "TRUE" は含まれな
い。もしもこれが紛らわしいならば、cConstant用のハイライトを削除する:
:hi link cConstant NONE
文法上エラーではないはずの '{' と '}' がエラーとしてハイライトされてしまう場合
には、cErrInParen及びcErrInBracketのハイライトをリセットする。
Cファイルで折り畳みをするには、以下の行を 'runtimepath' 中の "after" ディレク
トリ内のファイルに加えるとよい。Unixなら~/.vim/after/syntax/c.vimに加えるとよ
いだろう:
syn sync fromstart
set foldmethod=syntax
set foldmethod=syntax
CH ch.vim ft-ch-syntax
C/C++ インタープリター。Ch は C に似た構文ハイライトを持ち、C の構文ファイルに
基づいている。C で利用できる設定については c.vim を参照。
変数を設定すれば、*.h ファイルに対して C, C++ でなく Ch の構文を使うようにする
ことができる:
:let ch_syntax_for_h = 1
CHILL chill.vim ft-chill-syntax
Chillの構文ハイライトはCに似ている。設定に関してはc.vimを参照。それに加えて
次のものがある:
chill_space_errors c_space_errors と同様
chill_comment_string c_comment_strings と同様
chill_minlines c_minlines と同様
CHANGELOG changelog.vim ft-changelog-syntax
ChangeLogでは行頭のスペースのハイライトできる。これをオフにしたいなら、次の行
を .vimrc に加える:
let g:changelog_spacing_errors = 0
これは次にchangelogファイルを編集するときから有効になる。バッファごとに設定するには "b:changelog_spacing_errors" を使う(構文ファイルを読み込む前に設定する
こと)。
例えばスペースをエラーとするかどうかなどのハイライト方法を変えることができる:
:hi link ChangelogError Error
ハイライトをやめるには: :hi link ChangelogError NONE
これは即座に有効になる。CLOJURE ft-clojure-syntax
g:clojure_syntax_keywords
"clojure.core" 内の公開変数のシンタックスハイライトはデフォルトで提供されるが、
g:clojure_syntax_keywords 変数にシンボルを追加することによって、追加のシンボ
ルをハイライトすることができる。値は、それぞれが識別子の List を含む構文グ
ループ名の Dictionary である必要がある。
let g:clojure_syntax_keywords = {
\ 'clojureMacro': ["defproject", "defcustom"],
\ 'clojureFunc': ["string/join", "string/replace"]
\ }
\ 'clojureMacro': ["defproject", "defcustom"],
\ 'clojureFunc': ["string/join", "string/replace"]
\ }
有効な構文グループについては、Clojure 構文スクリプトを参照。
そしてまたプラグイン作者が動的にシンボルをハイライトする意図で使用するための
バッファローカル版として変数 b:clojure_syntax_keywords もある。
変数 b:clojure_syntax_without_core_keywords への設定で、"clojure.core" の変
数をデフォルトでハイライトしなくなる。これは (:refer-clojure :only []) で設
定される名前空間に便利である。
g:clojure_fold
g:clojure_fold を 1 に設定すると、Clojureコードの折り畳みが有効になる。複
数行にまたがる任意の list, vector または map は、標準のVimの fold-commands を
使用して折り畳むことができる。
g:clojure_discard_macro
この変数を 1 に設定すると Clojure の "discard リーダーマクロ" の基本的なハイ
ライトを有効にする。
#_(defn foo [x]
(println x))
(println x))
Note このオプションは、スタックされたdiscardマクロが正しくハイライトされない
(例 #_#_)。
COBOL cobol.vim ft-cobol-syntax
既存のCOBOLコードに要求されるハイライト方法と、新規に開発されるコードに要求さ
れるそれには違いがある。この違いはコードのおかれている状況(保守 vs 開発)やその
他の要素によって決定する。既存コードのハイライトを行うには .vimrc に次の行を加
える:
:let cobol_legacy_code=1
これを再び無効にするには次のようにする: :unlet cobol_legacy_code
COLD FUSION coldfusion.vim ft-coldfusion-syntax
ColdFusionには独自版のHTMLコメントが存在する。ColdFusionのコメントハイライトを
有効化するには、次の行を起動設定ファイルに加える:
:let html_wrong_comments=1
ColdFusionの構文ファイルはHTML用構文ファイルに基づいている。
CPP cpp.vim ft-cpp-syntax
大部分は ft-c-syntax と同じ。
変数 強調表示
cpp_no_cpp11 C++11 標準のアイテムを強調表示しない
cpp_no_cpp14 C++14 標準のアイテムを強調表示しない
cpp_no_cpp17 C++17 標準のアイテムを強調表示しない
cpp_no_cpp20 C++20 標準のアイテムを強調表示しない
CSH csh.vim ft-csh-syntax
これは "csh" という名前のシェルに対応している。システムによっては実際に使われ
ているのがtcshである場合もあることに注意。
ファイルがcshかtcshかを判定するのは難しいことがよく知られている。いくつかのシ
ステムでは/bin/cshを/bin/tcshにシンボリックリンクしていることが、この判別をほ
ぼ不可能にしている。Vimが間違った判定をする場合には変数 "filetype_csh" を設定
することができる。cshを使うには: g:filetype_csh
:let g:filetype_csh = "csh"
tcshを使うには:
:let g:filetype_csh = "tcsh"
拡張子がtcshであるか標準的なtcshファイル名(.tcshrc, tcsh.tcshrc, tcsh.login)を
持つスクリプトはすべてtcshファイル形式とされる。他のtcsh/cshスクリプトは、
"filetype_csh" 変数が存在しない限り、すべてtcshとみなされる。変数
"filetype_csh" が存在するならファイル形式はその値にセットされる。
CSV ft-csv-syntax
CSV ファイルの区切り文字を変更すると、構文ハイライトは変更されたファイルの内容
と一致しなくなる。次の変数を unlet する必要がある:
:unlet b:csv_delimiter
そして、ファイルを保存して再読み込みする:
:w
:e
:e
これで、構文エンジンは新しく変更された CSV 区切り文字を判断するはずだ。
CYNLIB cynlib.vim ft-cynlib-syntax
Cynlibファイルは、ハードウェアのモデリングとシミュレーションを行うCynlibクラス
ライブラリを使用したC++ファイルである。通常Cynlibのファイルは.ccや.cppという拡
張子を持つので、CynlibではないC++ファイルと区別するのは非常に困難である。だか
ら.ccファイルをCynlibでハイライトする際には、ファイル.vimrcに次の行を加える:
:let cynlib_cyntax_for_cc=1
cppファイルについても同様(この拡張子は通常Windowsだけで使用される)
:let cynlib_cyntax_for_cpp=1
これらを再び無効にするには次のコマンドを使用する:
:unlet cynlib_cyntax_for_cc
:unlet cynlib_cyntax_for_cpp
:unlet cynlib_cyntax_for_cpp
CWEB cweb.vim ft-cweb-syntax
"*.w" にマッチするファイルのタイプは Progress か cweb である。自動判別がうまく
機能しない場合、または Progress ファイルを一切編集しない場合は、vimrcでこれを
使用する:
:let filetype_w = "cweb"
DART dart.vim ft-dart-syntax
Dartは、モバイル開発、デスクトップ、Web およびバックエンドアプリケーションの開
発に使用される、オブジェクト指向で型定義されたクラス定義のガベージコレクション
言語である。Dartは、C, Java および JavaScriptから派生したCに似た構文を使用し、
Smalltalk, Python, Ruby などから採用された機能を備えている。
言語とその開発環境の詳細については、公式のDart言語Webサイト https://dart.dev
を参照のこと。
dart.vim 構文は、Dartステートメント、予約語、型宣言、ストレージクラス、条件、
ループ、補間値およびコメントを検出してハイライトする。 Flutterやその他のDartフ
レームワークからサポートしているイディオムはない。
変更、修正? 以下を介して問題またはプルリクエストを送信する:
https://github.com/pr3d4t0r/dart-vim-syntax/
DESKTOP desktop.vim ft-desktop-syntax
この構文ファイルの本来の目的は、freedesktop.org 標準の .desktop と .directory
を構文ハイライトすることである:
https://specifications.freedesktop.org/desktop-entry-spec/latest/
X- で始まらない非標準の拡張子のハイライトの設定
let g:desktop_enable_nonstd = 1
Note これは悪いハイライトの原因になる。KDEが予約している機能のハイライトの設定
let g:desktop_enable_kde = 1
g:desktop_enable_kde が与えられていない場合、g:desktop_enable_nonstd に従うDIFF diff.vim
diff 構文ハイライトは、通常ローカライズされた {訳注: 英語以外の} diff ヘッダも
検出する。ファイルにとても長い行が含まれる場合、この機能は低速になる。ローカラ
イズヘッダへの対応を無効化するには:
:let diff_translations = 0
diff-slowも参照。
DIRCOLORS dircolors.vim ft-dircolors-syntax
dircolorsユーティリティ用のハイライト定義には、Slackware GNU/Linuxディストリ
ビューション版のdircolorsに対応するためのオプションがある。このオプションはほ
とんどのバージョンでは無視されるいくつかのキーワードを付け加える。しかし
Slackwareシステムではdircolorsはこれらのキーワードを認め、処理に用いる。
Slackwareキーワードを有効化するには次を起動設定ファイルに付け加えればよい:
let dircolors_is_slackware = 1
DOCBOOK docbk.vim ft-docbk-syntax docbook
DOCBOOK XML docbkxml.vim ft-docbkxml-syntax
DOCBOOK SGML docbksgml.vim ft-docbksgml-syntax
DocBookファイルには2つの種類: SGMLとXMLがある。どちらのタイプを使用するのかを
指定するには変数 "b:docbk_type" をセットする。Vimがそのタイプを認識できた場合
にはこれを自動的に行う。認識できなかった場合にはデフォルトはXMLになる。
これを手動で設定するには:
:let docbk_type = "sgml"
または: :let docbk_type = "xml"
これは構文ファイルを読み込む前に行う必要がある。しかし構文ファイルの読み込みは込み入っている。より単純な方法はファイル形式を "docbkxml" または "docbksgml"
にセットすることである:
:set filetype=docbksgml
または: :set filetype=docbkxml
DocBook のバージョンを指定できる:
:let docbk_ver = 3
設定しない場合は 4 が使われる。DOSバッチファイル dosbatch.vim ft-dosbatch-syntax
変数 dosbatch_cmdextversion でサポートされる Windows コマンドインタープリター
拡張機能のセットを選択する。Windows NT のバージョン (Windows 2000 より前) の場
合、この値は 1 である必要がある。Windows 2000 以降の場合、値は 2 である必要が
ある。
次のようにすれば使用するバージョンを選択できる:
:let dosbatch_cmdextversion = 1
変数が定義されていない際のデフォルトは、Windows 2000 以降をサポートする 2 とな
る。
オリジナルの MS-DOS では、コメント行を入力する代替手段としてダブルコロン(::)
を使うイディオムをサポートしている。このイディオムは現在の Windows コマンドイ
ンタープリタでも使えるが、( ... ) コマンドブロックの中で使うと問題になることが
ある。これについては Stack Overflow で議論されている -
https://stackoverflow.com/questions/12407800/which-comment-style-should-i-use-in-batch-files
Windows コマンドインタープリターでコマンドブロック内のコメントに :: イディオム
を使用できるようにするには、dosbatch_colons_comment 変数を任意の値に設定する:
:let dosbatch_colons_comment = 1
この変数が設定されている場合、コマンドブロックの最後の行である :: コメントがエ
ラーとしてハイライトされる。
.btm ファイルを "dosbatch" タイプ (MS-DOS バッチファイル) として検出する
か、"btm" タイプ (4DOS バッチファイル) として検出するかを指定するオプションが
ある。デフォルトでは後者が使用される。以下の行で前者を選択することができる:
:let g:dosbatch_syntax_for_btm = 1
この変数が定義されていない、または0であると btm の構文が使われる。
DOXYGEN doxygen.vim doxygen-syntax
Doxygen は JavaDoc に似た特殊なフォーマットからコードのドキュメントを生成する。
この構文スクリプトは c, cpp, idl, php のファイルに対して Doxygen のハイライ
トを追加する。また、Java に対しても使える。
Doxygen のフォーマットを有効にするにはいくつかの方法がある。手動、またはモード
ラインでそのファイルの syntax に '.doxygen' を追加する。例:
:set syntax=c.doxygen
または // vim:syntax=c.doxygen
C, C++, C#, IDL, PHP のファイルに対しては、グローバルまたはバッファローカルな
変数 load_doxygen_syntax を設定すれば自動的にこれが行われる。次の行を .vimrc
に加える。
:let g:load_doxygen_syntax=1
構文ハイライトに影響を与える変数がいくつかある。また、これらは標準でないハイラ
イトオプションに関係している。
変数 既定値 効果
g:doxygen_enhanced_color
g:doxygen_enhanced_colour 0 Doxygen コメントに対して標準でないハイ
ライトを行う。
doxygen_my_rendering 0 HTML の太字、斜体、html_my_rendering
に対する下線の描画を無効にする。
doxygen_javadoc_autobrief 1 0にすると JavaDoc の autobrief に対す
るハイライトを無効にする。
doxygen_end_punctuation '[.]' brief の終わりを示す句読点にマッチする
正規表現。
また、次のハイライトグループを設定すると便利である。
ハイライト 効果
doxygenErrorComment code, verbatim, dot セクション中で句読点が抜け
ている終了コメントの色
doxygenLinkError \link セクションで \endlink が抜けているときの
終了コメントの色。
DTD dtd.vim ft-dtd-syntax
初期状態ではDTD構文ハイライトは大/小文字を区別する。区別しないようにするには、
起動設定ファイルに次の行を書き足す:
:let dtd_ignore_case=1
DTD構文ファイルでは未知のタグをエラーとしてハイライトする。これが煩わしいなら
ば、構文ファイルdtd.vimが読込まれる前に:
:let dtd_no_tag_errors=1
と設定することで無効化することができる。定義部内のパラメーターのエンティティ名
はハイライトグループ 'Type'、句読点と '%' は 'Comment' を使用してハイライトさ
れる。パラメーターエンティティの実体はハイライトグループ 'Constant' を、区切り
文字の%と;はハイライトグループ 'Type' を使用してハイライトされる。以下を設定す
るとこれを無効化できる:
:let dtd_no_param_entities=1
XML内の埋め込みDTDをハイライト表示するために、DTDの構文ファイルはxml.vimからも
参照される。
EIFFEL eiffel.vim ft-eiffel-syntax
Eiffelは大小文字の区別をしないけれども、スタイルガイドラインが示すように、構文
ハイライトではそれらが区別される。これにより大小文字が違えば違うクラス名として
ハイライト表示することが可能になっている。大小文字の違いを無視してハイライトを
行うならば、起動設定ファイルに次の行を書き足す:
:let eiffel_ignore_case=1
これを行ってもコメント内のクラス名とTODOの印には大小文字の区別がなされる。
逆に、もっと厳密に検査するには、次の行のいずれかを書き足す:
:let eiffel_strict=1
:let eiffel_pedantic=1
:let eiffel_pedantic=1
eiffel_strictを設定すると "Current", "Void", "Result", "Precursor" そして
"NONE" の5つの既定単語について、不正な大小文字の使用を捕捉し、機能やクラス名と
してそれらが使用されれば警告を与えるようになる。
eiffel_pedanticを設定すると、Eiffelのスタイルガイドラインを相当に厳格に強制す
る。(キーワードを大文字で書く時代遅れの方法と同様に、大小文字を任意にミックス
したようなものが捕捉される)
"Current", "Void", "Result" そして "Precursor" の小文字版を使用するには、大小
文字を区別するハイライト方法を無効化する代わりに:
:let eiffel_lower_case_predef=1
という方法を使うことができる。
ISEが提案し、実験的に幾つかのコンパイラでは取り扱うことのできる、新しい生成構
文は次のコマンドで使用できるようになる:
:let eiffel_ise=1
最後に幾つかのベンダーは16進数定数値をサポートしている。それを取り扱うには:
:let eiffel_hex_constants=1
この行を起動設定ファイルに書き足す。
EUPHORIA euphoria3.vim euphoria4.vim ft-euphoria-syntax
Euphoria には二つの構文強調表示ファイルがある。一つは Euphoria バージョン
3.1.1 用で、デフォルトではこれが使われる。もう一つは Euphoria 4.0.5 以降用であ
る。
Euphoria バージョン 3.1.1 (http://www.rapideuphoria.com/ リンク切れのようだ)
は DOS プラットフォームのアプリケーションの開発にまだ必要とされている。
Euphoria バージョン 4 (http://www.openeuphoria.org/) はそれをサポートしていな
い。
以下の拡張子のファイルは自動的に Euphoria ファイルタイプとして認識される:
*.e, *.eu, *.ew, *.ex, *.exu, *.exw
*.E, *.EU, *.EW, *.EX, *.EXU, *.EXW
Euphoria の構文強調ファイルを選択するには (*.e や *.E 拡張子のファイルが自動的
に Euphoria ファイルタイプとして認識された場合でも)、次の行を設定ファイルに加
える:
:let g:filetype_euphoria = "euphoria3"
または
:let g:filetype_euphoria = "euphoria4"
Elixir と Euphoria はファイル拡張子 *.ex を共有している。g:filetype_euphoria
変数でファイルタイプが Euphoria として明確に設定されている場合、またはファイル
内のキーワードに基づいてファイルが Euphoria であると判断された場合は、ファイル
タイプは Euphoria として設定される。それ以外の場合、ファイルタイプはデフォルト
で Elixir になる。
ERLANG erlang.vim ft-erlang-syntax
Erlang は Ericsson が開発した関数型プログラミング言語である。次の拡張子のファ
イルが Erlang ファイルとして認識される: erl, hrl, yaws
組み込み関数 (BIFs: built-in functions) はデフォルトで強調表示される。それを無
効化するには vimrc で次のように設定する:
:let g:erlang_highlight_bifs = 0
いくつかの特殊アトムを強調表示するには、vimrc で次のように設定する:
:let g:erlang_highlight_special_atoms = 1
ELIXIR elixir.vim ft-elixir-syntax
Elixir はスケーラブルでメンテナブルなアプリケーション向け動的関数言語である。
以下のファイル拡張子は自動的に Elixir ファイルタイプであると認識される:
*.ex, *.exs, *.eex, *.leex, *.lock
Elixir と Euphoria はファイル拡張子 *.ex を共有している。g:filetype_euphoria
変数でファイルタイプが Euphoria として明確に設定されている場合、またはファイル
内のキーワードに基づいてファイルが Euphoria であると判断された場合は、ファイル
タイプは Euphoria として設定される。それ以外の場合、ファイルタイプはデフォルト
で Elixir になる。
FLEXWIKI flexwiki.vim ft-flexwiki-syntax
FlexWiki は、ASP.NET ベースの wiki パッケージで、以前は
http://www.flexwiki.com で入手できた。
NOTE: このサイトは現在機能していない。Wikipedia によると 2009 年に開発がストッ
プした。
FlexWiki の構文のほとんどの一般的な要素に対して構文ハイライトができる。
FlexWiki のtplugin スクリプトはバッファローカルなオプションを設定し、FlexWiki
ページの編集をより便利にする。FlexWiki は改行を新しい段落の開始とみなすので、
このftplugin は 'tw' を0に設定し (行の長さを制限しない)、'wrap' をオンにし (長
い行を水平スクロールさせるのでなく、折り返す)、'linebreak' をオンにする (画面
上の最後の文字でなく 'breakat' の文字で折り返す)、などを行う。また、デフォルト
では無効にされているキーマップも含んでいる。
"j"、"k"、カーソルキーで表示行単位で移動するようにするキーマップを有効にするに
は次を .vimrc に追加する:
:let flexwiki_maps = 1
FORM form.vim ft-form-syntax
FORMファイルの構文要素に使用するカラースキームには、Conditional, Number,
Statement, Comment, PreProc, Type, そしてStringが、次の文献で定義される言語仕
様に沿って行われる。
文献: 'Symbolic Manipulation with FORM' by J.A.M. Vermaseren, CAN,
Netherlands, 1991.
デフォルトの色に変更を加えるには、次の構文グループを再定義すれば良い:
- formConditional
- formNumber
- formStatement
- formHeaderStatement
- formComment
- formPreProc
- formDirective
- formType
- formString
構文ファイルform.vimではFORMプリプロセッサーコマンドとディレクティブをそれぞ
れ、デフォルトでは同じ構文グループにしていることに注意。
FORM用の既定の拡張カラーモードではヘッダー命令とFORMプログラム本体での命令を区
別できるような色設定が利用可能である。拡張カラーモードを使用可能にするには、
ファイルvimrcに次の設定を書き足す:
:let form_enhanced_color=1
拡張モードを使うことは、gvimで暗いディスプレイを使用した場合にも利点がある。命
令文は黄色ではなく明るい黄色で表示され、条件文は視認性のため明るい青で表示され
る。
".frm" にマッチするファイルのタイプは Visual Basic か FORM である。どちらを使
用するか検知するため、Vim はファイル先頭5行に "VB_Name" という文字列があるかを
調べる。検出したら、ファイルタイプを "vb" にし、そうでないなら "form" にする。
自動判別がうまく機能しない場合、または例えば FORM ファイルのみしか編集し
ない場合は、vimrcでこれを使用する:
:let filetype_frm = "form"
FORTH forth.vim ft-forth-syntax
".f" にマッチするファイルは Fortran か Forth で、"*.fs" にマッチするファイルは
F# か Forth である。自動検出がうまくいかない場合や、F# や Fortran をまったく編
集しない場合は、スタートアップの vimrc でこれを使用する:
:let filetype_f = "forth"
:let filetype_fs = "forth"
:let filetype_fs = "forth"
FORTRAN fortran.vim ft-fortran-syntax
デフォルトのハイライトと方言
Vim は、Fortran 2023 (最新の標準) に従ってハイライトする。Fortran 2023 は以前
のバージョン (Fortran 2018、2008、2003、95、90、77、および 66) のほぼスーパー
セットであるため、ほとんどの場合、この選択がほとんどのユーザーにとって適切であ
る。最近の Fortran 標準では、いくつかのレガシー構造が削除されたり、廃止予定宣
言されたりし、それぞれエラーおよび ToDo 項目としてハイライトされる。
構文スクリプトは Fortran 方言をサポートしなくなった。変数 fortran_dialect は暗
黙的に無視されるようになった。現在ではコンピュータの速度が大幅に向上しているた
め、変数 fortran_more_precise は必要なくなり、暗黙的に無視される。
Fortranソースコードの形式
Fortran のソースコードには固定形式と自由形式が有る。Note 形式が誤って設定され
ていると構文ハイライトが正しくされないことに注意。
新規にFortranのファイルを作成する場合には、構文ファイルは固定形式であると仮定
する。常に自由形式を使う場合には
:let fortran_free_source=1
これを .vimrc でコマンド :syntax を実行する前に行う必要がある。常に固定形式を使うには
:let fortran_fixed_source=1
これも.vimrcでコマンド:syntaxを実行する前に行う必要がある。ソースコードの形式もしくは標準的な方法ではないがファイルの拡張子に依存する場
合、もっとも簡単な方法は ftplugin の中で fortran_free_source を設定する。
ftplugin ファイルのより詳細な情報は ftplugin を参照。
Note あなたの .vimrc ファイルで "filetype plugin indent on" コマンドを "syntax
on" よりも前に実行した場合にのみ動作する事に注意する。
既存の Fortran ファイルを編集する時には、変数 fortran_free_source が設定されて
いれば構文ファイルは自由形式のソースであると仮定し、変数
fortran_fixed_source が設定されていれば固定形式のソースであると仮定する。これ
らの変数がどちらも設定されていないと仮定する。この場合は、ifort, gfortran Cray,
NAG, PathScale コンパイラ (.f, .for, 固定形式の .f77, .f90, .f95, .f03, 自由形
式の .f08) の共通的な拡張子の変換を試みてどのソースが使われているのかを判定す
る。.fpp および .ftn ファイル拡張子には、コンパイラによって処理方法が異なるた
め、デフォルトは使用されない。これらのどれも機能しない場合、スクリプトはファイ
ルの最初の 500 行の最初の 5 列を調べる。自由なソース形式の兆候が検出されない場
合、ファイルは固定ソース形式であると見なされる。アルゴリズムはほとんどの場合に
機能するはずである。
500 以上の全行コメントで始まるファイルなど、場合によっては、スクリプトがコード
が固定形式であると誤って判断することがある。その場合は、最初の 25 行の最初の 5
列の任意の位置で始まるコメント以外の命令文を追加し、ファイルの保存 (:w) そして
再読込 (:e!) を行う。
ベンダー拡張
固定形式 Fortran では最大 72 文字の行長とする必要があるが、過去 30 年間に作成
されたすべてのコンパイラと同様に、スクリプトでは最大 80 文字の行長が許可されて
いる。以下のようなコマンドで変数 fortran_extended_line_length を設定すると、さ
らに長い 132 文字の行長が許可される
:let fortran_extended_line_length=1
コマンドの :syntax の前に置かれる。CUDA Fortran 拡張をさらにハイライトしたい場合は、以下のようなコマンドで変数
fortran_CUDA を設定する必要がある
:let fortran_CUDA=1
コマンドの :syntax の前に置かれる。一般的な非標準のベンダー提供の組み込み関数の認識を有効にするには、以下のような
コマンドで変数 fortran_vendor_intrinsics を設定する必要がある
:let fortran_vendor_intrinsics=1
コマンドの :syntax の前に置かれる。Fortranファイル内のタブ文字
標準のFortranではタブ文字は認識されない。固定桁位置での境界を必要とする固定形
式のFortranソースコードでタブ文字を使用するのは良いアイデアではない。従ってタ
ブ文字はエラーとしてハイライトされる。しかしながらプログラマによってはタブ文字
を使用することを望む場合があるだろう。Fortranファイルにタブ文字が含まれている
場合には、変数fortran_have_tabsをコマンド :syntax が実行される前に
:let fortran_have_tabs=1
このように.vimrcで設定すれば良い。タブ文字を使う場合には残念ながら、構文ファイルによって不正な余白を検出することができなくなる。
Fortranファイルの構文による折り畳み
以下のようなコマンドで .vimrc に変数 fortran_fold を設定すると、Vim は、
foldmethod=syntax を使用してファイルを折り畳む
:let fortran_fold=1
プログラム単位、つまりプログラム命令文で始まるメインプログラム、サブルーチン、関数、サブプログラム、モジュール、サブモジュール、コメント行のブロック、および
ブロックデータ単位の折り畳み領域を定義するように構文スクリプトに指示する。ブ
ロック、インターフェイス、アソシエート、クリティカル、型定義、および変更チーム
の構成も折り畳まれる。以下のようなコマンドで変数 fortran_fold_conditionals も
設定する
:let fortran_fold_conditionals=1
do ループ、if ブロック、select case、select type、select rank 構造に対しても折り畳み領域が定義される。Note 大きなファイルの場合、折り畳み領域の定義が遅くな
る可能性があることに注意。
syntax/fortran.vim スクリプトにはヒントとなるコメントが含まれている。行をコメ
ントアウトしたりコメントを外したりすることで、(a) 非標準またはベンダー固有構文
の認識を有効化したり、(b) 2008 標準で削除または廃止予定となった機能を todo ア
イテムとしてハイライトしないようにしたりできる。
制限事項
丸カッコチェックは、閉じカッコの不足については捕捉できない。ホレリス定数は認識
されない。幾つかのキーワードはFortran90の予約語ではないので誤ってハイライトさ
れる。
Fortranに関するその他の情報はft-fortran-indentやft-fortran-pluginを参照。
FREEBASIC freebasic.vim ft-freebasic-syntax
FreeBASIC のファイルは利用可能な4つの方言、"fb", "qb", "fblite", "deprecated"
ごとに異なる方法でハイライトされる。適切な方言の選択方法は
ft-freebasic-plugin を参照のこと。
ハイライトは、さらに以下の変数で設定可能である。
変数 ハイライト
freebasic_no_comment_fold 複数行コメントの折り畳みを無効化
freebasic_operators 非英字オペレータ
freebasic_space_errors 末尾空白と空白の前の<Tab>
freebasic_type_suffixes QuickBASIC 形式の型接尾語
FVWM 設定ファイル fvwm.vim ft-fvwm-syntax
*fvwmrc*または*fvwm2rc*というパターンにマッチしないFvwm設定ファイルを認識させ
るには、ファイルmyfiletypefile.vimであなたのシステムに合ったパターンを設定しな
ければならない。具体的には、変数 "b:fvwm_version" にFvwmのメジャーバージョンを
指定し、オプション 'filetype' にfvwmを設定する。
例えば、/etc/X11/fvwm2/配下の全てのファイルをFvwm2の設定ファイルと認識させるに
は次のようにする:
:au! BufNewFile,BufRead /etc/X11/fvwm2/* let b:fvwm_version = 2 |
\ set filetype=fvwm
\ set filetype=fvwm
GSP gsp.vim ft-gsp-syntax
GSPページのデフォルトカラーはhtml.vimにて定義され、Javaコード(Javaタグ内部や
インラインのバッククォート内)のカラーはjava.vimにて定義される。インライン
Javaコードをハイライトするために、html.vimで定義される以下のHTMLグループは、
再定義されている:
htmlString
htmlValue
htmlEndTag
htmlTag
htmlTagN
書かれた大抵の場所のインラインJavaコードは適切にハイライトされるが、幾つかの特
殊なケースではそうはならない。他のHTMLグループ内にインラインJavaコードを書いて
それが正しくハイライトされない場合には、必要な行をhtml.vimからコピーして
gspJavaをconstains節に加えれば、正しくハイライトされるようになる。
インラインJavaを示すバッククォートは、目立ちやすくするためにhtmlErrorグループ
でハイライトされる。
GROFF groff.vim ft-groff-syntax
groff構文ファイルはnroff.vimのラッパーであり、使用例と設定例についてはそこの
下に書かれている注意を参照。このラッパーの目的は、モードラインか個人用のファイ
ル定義ファイル(filetype.txt参照)からファイル形式をセットすることにより、
groff構文拡張を設定することである。
HASKELL haskell.vim lhaskell.vim ft-haskell-syntax
Haskell構文ファイルは、プレーンHaskellコードとliterate Haskellコード両方を
サポートしている。後者はBirdスタイルとTeXスタイル両方に対応している。Haskell用
の構文ハイライトはCプリプロセッサー命令もハイライトできる。
区切り文字もハイライトさせるには(明るい背景色を使っているなら便利)、次を.vimrc
に書き足す:
:let hs_highlight_delimiters = 1
TrueとFalseを通常の識別子と区別してキーワードとして扱うにはこれを書き足す: :let hs_highlight_boolean = 1
プリミティブ型の名前をキーワードして扱うには: :let hs_highlight_types = 1
比較的一般的な型の名前をキーワードとして扱うには: :let hs_highlight_more_types = 1
デバッグ関数の名前をハイライトさせるには、これを.vimrcに書き足す: :let hs_highlight_debug = 1
Haskell用の構文ハイライトはCプリプロセッサー命令もハイライトし、#で始まるが命
令として有効でない行をエラーとして警告する。Haskellの演算子の構文は#で始まるこ
ともあるため、これらが干渉する。これらをエラーでなく演算子としてハイライトした
いなら、次を.vimrcに書く:
:let hs_allow_hash_operator = 1
literate Haskellコード用の構文ハイライトはファイルがTeXマークアップを含んでい
るかどうか、それに応じてTeX要素をハイライトするかどうかを自動的に推測しようと
する。.vimrcに次のような行を書くと、これをグローバルに上書きすることができる
:let lhs_markup = none
と書くとまったくハイライトしなくする。または :let lhs_markup = tex
と書くと常にTeXマークアップをハイライトするように強制する。より柔軟に、この変数のバッファローカル版を使うこともできる。例.
:let b:lhs_markup = tex
と書くと特定のバッファにTeXハイライトさせるようにする。これはそのバッファに構文ハイライトを有効化するかファイルを読み込む前に設定しなければならない。
HTML html.vim ft-html-syntax
HTMLファイルのタグ用の構文ファイルは以下のように動作する。
開きタグの<>は、閉じタグの</>とは異なった色でハイライトされる。これは意図的に
そうしてある! 開きタグにはハイライト 'Function' が使用され、閉じタグにはハイラ
イト 'Identifier' が使用される(あなたの環境でこれらがどう定義されているかにつ
いては syntax.vim を参照すること)。
既知のタグ名はC命令文と同じようにハイライトされる。未知のタグ名は間違いを見分
けやすくするために、<>や</>と同じようにハイライトされる。
引数(もしくは属性)名にも同じことが言える。既知の属性名と未知の属性名には異なる
ハイライトがなされる。
幾つかのHTMLタグは表示する文字種を変更するために使用される。以下のタグは構文
ファイルhtml.vimによって認識され、その内容は通常の文字種とは異なる文字種で表示
される: <B> <I> <U> <EM> <STRONG> (<EM>は<I>のエイリアスとして使われ、<STRONG>
は<B>のエイリアス)、<H1> - <H6>、<HEAD>、<TITLE>そして<A>、ただしhrefが含まれ
ていてリンクとして使われている(例<A href="somefile.html">)場合。
それらのテキストの文字種を変更するには、以下の構文グループを再定義する必要があ
る:
- htmlBold
- htmlBoldUnderline
- htmlBoldUnderlineItalic
- htmlUnderline
- htmlUnderlineItalic
- htmlItalic
- htmlTitle タイトル用
- htmlH1 - htmlH6 見出し用
この再定義が機能するためには最後の2つを除くすべてを再定義しなければならない。
最後の2つ、htmlTitleとhtmlH[1-6]は任意である。そして次の変数をvimrcで設定しな
ければならない(初期化の際に読み込まれるファイルの順序のせい)。
:let html_my_rendering=1
この例については以下からmysyntax.vimをダウンロードすること。
http://www.fleiner.com/vim/download.html
次の行をvimrcに加えればこの描画を無効にできる:
:let html_no_rendering=1
デフォルトでは、Vim は最初の表示行の 250 行前に構文を同期する。これは以下のよ
うに設定できる:
:let html_minlines = 500
HTMLコメントはむしろ特別で(詳細はHTMLリファレンスドキュメントを参照)、すべての
エラーをハイライトする。しかしその間違ったスタイル(<!--で始まり-->で終わる)を
使いたいならこれを定義する
:let html_wrong_comments=1
HTMLドキュメント中に埋め込まれたJavaScriptやVisual Basicについては、文は
'Special' でハイライトされ、コメントや文字列などは標準のプログラミング言語と同
じように色づけされる。現在のところサポートされているのはJavaScriptとVisual
Basicだけであり、他のスクリプト言語はまだ加えられていない。
カスケードスタイルシート(CSS)の埋め込みとインラインもハイライトされる。
htmlプロセッサー言語は複数ある。html.vimはインクルードしやすいように簡素に書か
れている。html.vimをインクルードするには以下の2行をその言語用の構文ファイルに
書き足すこと(この例はasp.vimからとった):
runtime! syntax/html.vim
syn cluster htmlPreproc add=asp
syn cluster htmlPreproc add=asp
そしてプリプロセッサー言語を含むすべての領域をクラスタhtmlPreprocに加えればよ
い。
html-folding
HTML 構文ファイルは、開始タグと終了タグ間の構文折り畳み folding (:syn-fold
を参照) を提供する。これは次の方法でオンにできる
:let g:html_syntax_folding = 1
:set foldmethod=syntax
:set foldmethod=syntax
Note: 構文による折り畳みは、構文ハイライトを著しく遅くする可能性がある。特に巨
大なファイルではそうである。
HTML/OS (BY AESTIVA) htmlos.vim ft-htmlos-syntax
HTML/OS用のカラースキームは以下のように機能する:
デフォルトでは関数名と変数名は同じである。これは、Vimは関数と識別子に異なる色
を指定しないためである。これを変えるには(関数名を違う色にしたいならこうすると
よい)次の行を~/.vimrcに書き加える:
:hi Function term=underline cterm=bold ctermfg=LightGray
もちろん好みに応じてctermfgは違う色にしてよい。
HTML/OSに関するもう1つの問題は、ファイルがHTML/OSコーディングであることを示す
特別なファイル形式が存在しないことである。そのため、ファイルを開いた後に次のよ
うにしてHTML/OS構文をオンにしなければならない:
:set syntax=htmlos
HTML/OSコードのブロックの開始と終了を示す文字は、それぞれ<<または[[,
>>または]]のどちらであってもよい。
IA64 ia64.vim intel-itanium ft-ia64-syntax
Intel Itanium 64アセンブリ言語用のハイライト。このファイル形式を認識させる方法
についてはasm.vimを参照。
*.incファイルをIA64と認識させるには次を.vimrcに書き足す:
:let g:filetype_inc = "ia64"
INFORM inform.vim ft-inform-syntax
Inform構文ハイライトはInform Libraryによって提供されるシンボルを含んでいる。ほ
とんどのプログラムがそれを利用しているためである。Libraryのシンボルをハイライ
トさせたくないなら、次をvim初期化ファイルに加える:
:let inform_highlight_simple=1
デフォルトではInformプログラムはZ-machineターゲットと仮定され、Z-machineアセン
ブリ言語シンボルが適切にハイライトされる。もしプログラムがGlulx/Glk環境をター
ゲットとしたものなら、次を初期化ファイルに加える:
:let inform_highlight_glulx=1
こうすると代わりにGlulxオペコードをハイライトし、glk()をシステム関数としてハイ
ライトする。
Informコンパイラはある古いキーワードをエラーとみなす。普通、これらのキーワード
はエラーとしてハイライトされる。これをエラーとしてハイライトするのをやめるに
は、次を初期化ファイルに加える:
:let inform_suppress_obsolete=1
デフォルトではハイライトされる言語機能はコンパイラのバージョン6.30とライブラリ
のバージョン6.11に従う。これより古いInform開発環境を使っているなら、次の行を初
期化ファイルに加えるとよいかもしれない:
:let inform_highlight_old=1
IDL idl.vim idl-syntax
IDL (Interface Definition Language) ファイルは RPC 呼び出しを定義するために使
われる。Microsoft の世界では COM インターフェイスと呼び出しの定義にも使われる。
IDL の構造は単純であるため、ヒューリスティックな方法でなく、完全に文法にのっ
とったアプローチができる。その結果は巨大でいくぶん冗長であるが、一応は機能する
ようである。
idl ファイルには Microsoft 拡張がある。それらのうちいくつかは
idl_no_ms_extensions を定義すると無効になる。
より複雑な拡張は idl_no_extensions を定義すると無効になる。
変数 効果
idl_no_ms_extensions Microsoft 独自の拡張の一部を無効にする
idl_no_extensions 複雑な拡張を無効にする
idlsyntax_showerror IDL エラーを表示する (少々うるさいがとても助け
になる)
idlsyntax_showerror_soft エラーに対してデフォルトでよりソフトな色を使う
JAVA java.vim ft-java-syntax
java.vim構文ハイライトファイルはいくつかのオプションを提供している。
Java 1.0.2では、丸括弧の内側に波括弧が入ることは絶対になかったため、これはエ
ラーと判断された。Java1.1以降では、(無名クラスとともに) これが可能になったた
め、エラーと判断されなくなった。もし以前のようにしたい場合、Vim の初期化ファイ
ルに次の行を加えること:
:let g:java_mark_braces_in_parens_as_errors = 1
java.lang で宣言されたすべての (エクスポートされた) パブリック型は常に自動的
にインポートされ、単純な名前として使用できる。これらをハイライトするには、以下
を使用する:
:let g:java_highlight_java_lang_ids = 1
http://www.fleiner.com/vim/download.html で javaid.vim スクリプトをダウンロー
ドすると、ほとんどの標準 Java パッケージの型をハイライトすることもできる。特定
のパッケージ (例えば、java.io) の型のみをハイライトしたい場合は、以下のよう
にする:
:let g:java_highlight_java_io = 1
対応している全パッケージのリストは、javaid.vim を参照。インデントされた関数宣言のヘッダーは (ラムダ式やメソッド参照式の一部とともに)
ハイライトできるが、これは Java コードの記述方法によって異なる。認識される形式
は 2 つある:
1) 関数宣言をタブ、または、8 つまでのスペース文字で一貫してインデントして記述
する場合は、以下のいずれか設定する
:let g:java_highlight_functions = "indent"
:let g:java_highlight_functions = "indent1"
:let g:java_highlight_functions = "indent2"
:let g:java_highlight_functions = "indent3"
:let g:java_highlight_functions = "indent4"
:let g:java_highlight_functions = "indent5"
:let g:java_highlight_functions = "indent6"
:let g:java_highlight_functions = "indent7"
:let g:java_highlight_functions = "indent8"
Note 'shiftwidth' に関しては、これがインデントの一番左のステップであることに注:let g:java_highlight_functions = "indent1"
:let g:java_highlight_functions = "indent2"
:let g:java_highlight_functions = "indent3"
:let g:java_highlight_functions = "indent4"
:let g:java_highlight_functions = "indent5"
:let g:java_highlight_functions = "indent6"
:let g:java_highlight_functions = "indent7"
:let g:java_highlight_functions = "indent8"
意。
2) しかし、関数や型の名前の付け方 (大文字小文字の区別) に関する Java ガイドラ
インに従っており、インデントがある場合は、以下のように設定するとよいかもしれな
い
:let g:java_highlight_functions = "style"
さらに、"g:java_highlight_functions" の任意の値を以下と組み合わせて、
:let g:java_highlight_signature = 1
引数リストの括弧が付いた関数名を、その型パラメータ、戻り値の型、および仮引数から区別してハイライトしたり、矢印が付いたラムダ式の引数リストの括弧を、その仮引
数または識別子から区別してハイライトしたりすることができる。
もし、どちらの設定も機能せず、それでも関数宣言のヘッダーをハイライトしたい場合
は、現在の構文定義を変更するか、新しい構文定義を作成すること。
高階関数型は目視で解析するのが難しいため、一部のコンポーネントを統一的にトーン
ダウンすると効果的かもしれない。このような型名が Java 命名ガイドラインに準拠し
ている限り、以下で並べ替えることができる
:let g:java_highlight_generics = 1
Java 1.1 では、関数 System.out.println() と System.err.println() はデバッ
グのためだけに使用すべきである。スタートアップファイルに以下の定義を追加するこ
とを検討するとよい:
:let g:java_highlight_debug = 1
これらの文の大部分を次のように色分けする*Debug debugging statements,
さらに、独自の項目のいくつかをグループ化してリンクする:
*Special as DebugSpecial,
*String as DebugString,
*Boolean as DebugBoolean,
*Type as DebugType,
これらはそれぞれ、文字列内に表示される特殊文字、文字列自体、真偽値リテラル、お
よび特殊なインスタンス参照 (super、this、null) に使用される。
Javadoc は、Java プログラムファイルから特別なコメントを取り出し、HTML ページを
作成するプログラムである。標準設定では、この HTML コードは HTML ファイルと同様
にハイライトされる (html.vim を参照)。このコード内に JavaScript と CSS を追
加することもできる (以下を参照)。HTML および Markdown のレンダリングは次のよう
に分岐する:
1. 最初の文 (後ろに空白文字または行末文字が続く最初のピリオド . までのすべ
ての文字、または最初のブロックタグまでのすべての文字。例: @param、
@return) は以下として色付けされる
*SpecialComment special comments.
2. テキストは以下として色付けされる
*Comment comments.
3. HTML コメントは以下として色付けされる
*Special special symbols.
4. 標準の Javadoc タグ (@code、@see 等) は以下として色付けされる
*Special special symbols
そして、それらの引数の一部は以下として色付けされる
*Function function names.
HTML と Markdown の両方でこの機能をオフにするには、スタートアップファイルに以
下の行を追加する:
:let g:java_ignore_javadoc = 1
あるいは、HTML コメントまたは Markdown コメントのみを抑制する: :let g:java_ignore_html = 1
:let g:java_ignore_markdown = 1
:let g:java_ignore_markdown = 1
Markdown コメントの追加サポートについては ft-java-plugin を参照。
上で説明した特別な Javadoc コメントのハイライトを使用する場合、JavaScript、
Visual Basic スクリプト、埋め込み CSS (スタイルシート) の特別なハイライトもオ
ンにすることができる。これは、これらの言語のいずれかが実際に Javadoc コメント
に現れる場合にのみ意味がある。使用する変数は以下:
:let g:java_javascript = 1
:let g:java_css = 1
:let g:java_vb = 1
Note これら 3 つの変数は HTML 構文ファイルで維持されることに注意。:let g:java_css = 1
:let g:java_vb = 1
数字と文字列は、以下で Javadoc 以外のコメントでも認識される
:let g:java_comment_strings = 1
'foldmethod' が "syntax" に設定されている場合、コードブロックと複数行コメント
は折り畳まれる。複数行コメントの最初の行には通常テキストが書かれていないため、
デフォルトの 'foldtext' 値では、Javadoc コメントの折り畳まれた内容は情報が少な
くなる。この方法で書かれたコメントの場合は 2 行目の内容を表示し、それ以外の場
合は 1 行目の内容を表示するように以下で選択できる
:let g:java_foldtext_show_first_or_second_line = 1
末尾の空白文字またはタブ文字の前の連続したスペース文字は、以下でエラーとして
マークされる
:let g:java_space_errors = 1
ただし、以下のいずれかを定義することで、どちらの種類のエラーも抑制できる :let g:java_no_trail_space_error = 1
:let g:java_no_tab_space_error = 1
:let g:java_no_tab_space_error = 1
ネストされた括弧を異なる色でハイライトするには、javaParen、javaParen1、
javaParen2 の色を定義する。例えば、
:hi link javaParen Comment
あるいは :hi javaParen ctermfg=blue guifg=#0000ff
特定の修飾子は互いに相容れられない。例: abstract と final:
:syn list javaConceptKind
また、他の修飾子とはグループとして異なる方法でハイライトできる :hi link javaConceptKind NonText
後方スクロール中に CTRL-L で再描画すると修正されるハイライトエラーが発生する
場合は、"g:java_minlines" 変数をより大きな数値に設定してみて欲しい:
:let g:java_minlines = 50
これにより、最初の表示行の 50 行前から構文の同期が開始される。デフォルト値は10 である。大きな数値を使用すると、再描画が遅くなる可能性があるという欠点があ
る。
Java プラットフォームへの重要な変更は、リリース用に実装されたり、プレビュー機
能として提供される JDK Enhancement Proposals (JEPs) の形で徐々に導入される。こ
のような機能がプラットフォームに統合されるか、この取り組みから取り下げられるま
でには、複数の JEP とリリースサイクルが必要になる場合がある。アーリーアダプター
に対応するため Vim には実装されている構文関連のプレビュー機能に対するオプショ
ンのサポートがある。以下のようにプレビュー機能番号のリストを指定して、これをリ
クエストできる:
:let g:java_syntax_previews = [455, 476]
サポートされている JEP 番号は以下の表から取得される:
430: String Templates [JDK 21]
455: Primitive types in Patterns, instanceof, and switch
476: Module Import Declarations
Note 特定のプレビュー機能が Java プラットフォームに統合されると、すぐにそのエ
ントリはテーブルから削除され、関連するオプション機能は廃止されることに注意。
JSON json.vim ft-json-syntax g:vim_json_conceal
g:vim_json_warnings
json構文ファイルは、標準で conceal サポート付きのシンタックスハイライトを提供
する。conceal を無効にするには:
let g:vim_json_conceal = 0
エラーのシンタックスハイライトを無効にするには:
let g:vim_json_warning = 0
JQ jq.vim jq_quote_highlight ft-jq-syntax
数字に独自の色を付けないようにするには、vimrc に以下のコードを追加する:
hi link jqNumber Normal
引用符を文字列とは異なるハイライトにしたい場合は
let g:jq_quote_highlight = 1
LACE lace.vim ft-lace-syntax
Lace (Language for Assembly of Classes in Eiffel)は大文字・小文字を無視する。
しかしスタイルガイドラインはそうでない。大文字・小文字を区別してハイライトさせ
るには、vim変数 'lace_case_insensitive' を初期化ファイル中で定義すればよい:
:let lace_case_insensitive=1
LF (LFRC) lf.vim ft-lf-syntax g:lf_shell_syntax
b:lf_shell_syntax
lf ファイルマネージャー構成ファイル (lfrc) の場合、以下の変数を使用して異なる
'include' コマンド検索パターンを設定することにより、シェルコマンド構文のハイラ
イトをグローバルおよびバッファごとに変更できる:
let g:lf_shell_syntax = "syntax/dosbatch.vim"
let b:lf_shell_syntax = "syntax/zsh.vim"
let b:lf_shell_syntax = "syntax/zsh.vim"
これらの変数はデフォルトでは設定されていない。
デフォルトの 'include' コマンド検索パターンは 'syntax/sh.vim' である。
LEX lex.vim ft-lex-syntax
"^%%$" セクションデリミタが、その後にどんなセクションが続くかの手がかりを与え
ないため、Lexはブルートフォースなシンクロナイズを行う。それゆえ(巨大なlexファ
イルなどで)同期の問題が起こる場合には:
:syn sync minlines=300
の値を変更するとよいかもしれない。LIFELINES lifelines.vim ft-lifelines-syntax
廃止された関数をエラーとしてハイライトしたい場合は .vimrc で次のように設定する
こと:
:let g:lifelines_deprecated = 1
LISP lisp.vim ft-lisp-syntax
lisp の構文ハイライトには2つのオプションがある:
g:lisp_instring : この変数が存在すると "(...)" 形式の文字列が、その中
身が lisp であるかのようにハイライトされる。AutoLisp
用に便利である。
g:lisp_rainbow : この変数が存在し、0以外であると段階の異なる括弧に
対して異なるハイライトがつくようになる。
身が lisp であるかのようにハイライトされる。AutoLisp
用に便利である。
g:lisp_rainbow : この変数が存在し、0以外であると段階の異なる括弧に
対して異なるハイライトがつくようになる。
オプション g:lisp_rainbow は括弧とバッククォートされた括弧に対して10段階の異な
る色をつける。色づけ段階の多さのため、rainbow モード自身が ctermfg とguifg を
使ってハイライトを指定する (rainbow モードでない場合はそうではない)。それゆえ、
ハイライトグループを使う普通のカラースキームの影響を受けない。実際にどうハイラ
イトされるかはdark/bright の設定 ('bg' を参照) による。
LITE lite.vim ft-lite-syntax
lite構文ハイライトには2つのオプションがある。
文字列中でSQL構文ハイライトを行ってほしいならこうする:
:let lite_sql_query = 1
シンクロナイズの最小行数はデフォルトで100になっている。他の値に変えたいなら
"lite_minlines" をセットすればよい。例:
:let lite_minlines = 200
LPC lpc.vim ft-lpc-syntax
LPCはシンプルでメモリ効率的な言語、Lars Pensjö Cの略である。LPCのファイル名は
通常*.cである。これらのファイルをLPCと認識するとCプログラムのみを書くユーザー
の迷惑になる。LPC構文を使用したいなら、.vimrcでこの変数をセットすること:
:let lpc_syntax_for_c = 1
これでも適切に動作しないCまたはLPCのファイルに対してはモードラインを使うこと。
LPCファイルには:
// vim:set ft=lpc:
LPCと認識されてしまうCファイルには:
// vim:set ft=c:
変数をセットしたくないなら全てのLPCファイルでモードラインを使うこと。
LPCには複数の実装がある。我々はもっとも広く使われているものをサポートしたいと
思っている。デフォルトのLPC文法はMudOSシリーズ用である。MudOS v22以前を使って
いるなら、次をセットすることによりsensible モディファイヤをオフにし、v22以降の
新しいefunを無効にするとよい。MudOSの最新版を使っているときはこの変数をセット
しないこと:
:let lpc_pre_v22 = 1
LPCのLpMud 3.2シリーズには:
:let lpc_compat_32 = 1
LPCのLPC4シリーズには:
:let lpc_use_lpc4_syntax = 1
LPCのuLPCシリーズには:
uLPCはPike用に開発されている。なのでPike構文を代わりに使い、ソースファイルの名
前を.pikeとすること。
LUA lua.vim ft-lua-syntax
Lua 構文ファイルはバージョン 4.0, 5.0, 5.1, 5.2 に対して使える (5.2 がデフォル
ト) グローバル変数 lua_version と lua_subversion を設定することでバージョンを
指定することができる。例えば、Lua 5.1 の構文ハイライトを有効にするには次のよう
に変数を設定する:
:let lua_version = 5
:let lua_subversion = 1
:let lua_subversion = 1
MAIL mail.vim ft-mail.vim
Vimはemailの標準的な要素(ヘッダー、シグネチャ、引用文、URL / emailアドレス)の
全てをハイライトする。標準的な慣習に従い、シグネチャは、"--" とそれに続く任意
個の空白、そして改行のみからなる行で始まる。
Vimは ']', '}', '|', '>' で始まる行または '>' が続く単語を引用文とみなす。引用
文中のヘッダーとシグネチャについては、テキストが '>' (1個のスペースが続いても
よい)で引用された場合のみハイライトする。
デフォルトではmail.vimは先頭表示行の100行前までの構文をシンクロナイズさせる。
遅いマシンを使っていて、一般的に短いヘッダーのemailを扱っているなら、これをよ
り小さい値に変えることができる:
:let mail_minlines = 30
MAKE make.vim ft-make-syntax
Makefileではエラーを見つけやすくするためにコマンドがハイライトされる。しかし、
これは色が多すぎるかもしれない。この機能をオフにするにはこうする:
:let make_no_commands = 1
コメントもデフォルトでハイライトされる。これをオフにするには:
:let make_no_comments = 1
Microsoft Makefile は変数の展開とコメントを異なる方法で処理する (エスケープに
バックスラッシュは使用されない)。このために間違ったハイライトが表示される場合
は、以下を試すこと:
:let make_microsoft = 1
MAPLE maple.vim ft-maple-syntax
Waterloo Maple IncによるMaple Vは記号代数をサポートしている。その言語はユーザー
によって選択的にロードされる関数のパッケージをたくさんサポートしている。Maple
V release 4で供給される標準的なパッケージセットの関数がユーザーの判断によって
強調される。ユーザーは.vimrcに以下を書くと、全てのパッケージ関数がハイライトさ
れる:
:let mvpkg_all= 1
あるいは以下の表から任意のサブセット変数/パッケージを選んで.vimrcファイル中で
その変数を1にセットしてもよい($VIMRUNTIME/syntax/syntax.vimを読み込む前に行う
必要がある)。
Maple V パッケージ関数選択肢の表
mv_DEtools mv_genfunc mv_networks mv_process
mv_Galois mv_geometry mv_numapprox mv_simplex
mv_GaussInt mv_grobner mv_numtheory mv_stats
mv_LREtools mv_group mv_orthopoly mv_student
mv_combinat mv_inttrans mv_padic mv_sumtools
mv_combstruct mv_liesymm mv_plots mv_tensor
mv_difforms mv_linalg mv_plottools mv_totorder
mv_finance mv_logic mv_powseries
mv_Galois mv_geometry mv_numapprox mv_simplex
mv_GaussInt mv_grobner mv_numtheory mv_stats
mv_LREtools mv_group mv_orthopoly mv_student
mv_combinat mv_inttrans mv_padic mv_sumtools
mv_combstruct mv_liesymm mv_plots mv_tensor
mv_difforms mv_linalg mv_plottools mv_totorder
mv_finance mv_logic mv_powseries
MARKDOWN ft-markdown-syntax g:markdown_minlines
g:markdown_fenced_languages g:markdown_syntax_conceal
長い領域がある場合、間違ったハイライトがおこなわれる可能性がある。表示を遅くす
る代償として、エンジンに領域の開始を同期するためにもっと後方を見るようにするこ
とができる。500行の例 (デフォルトは 50):
:let g:markdown_minlines = 500
markdown ドキュメントで囲われたコードブロックの構文ハイライトを有効にしたい場
合は、以下のようにする:
:let g:markdown_fenced_languages = ['html', 'python', 'bash=sh']
markdown 構文の conceal を無効にするには、vimrc に以下を追加する:
:let g:markdown_syntax_conceal = 0
MATHEMATICA mma.vim ft-mma-syntax ft-mathematica-syntax
次を .vimrc に書いておかないかぎり、空の *.m ファイルは自動的に Matlab のファ
イルであるとみなされる:
let filetype_m = "mma"
MEDIAWIKI ft-mediawiki-syntax
デフォルトでは、構文のハイライトにはスタイルやヘッダーなどの基本的な HTML タグ
が含まれる html.vim。厳密な Mediawiki 構文のハイライトは以下:
let g:html_no_rendering = 1
HTML のハイライトが必要な場合は、以下によって太字や斜体などの端末ベースのテキ
スト書式設定が可能:
let g:html_style_rendering = 1
MODULA2 modula2.vim ft-modula2-syntax
Vim は方言タグを持つコメントを認識し、特定の方言を自動的に選択する。
方言タグのコメントの構文は次のとおり:
taggedComment :=
'(*!' dialectTag '*)'
;
'(*!' dialectTag '*)'
;
dialectTag :=
m2pim | m2iso | m2r10
;
m2pim | m2iso | m2r10
;
reserved words
m2pim = 'm2pim', m2iso = 'm2iso', m2r10 = 'm2r10'
m2pim = 'm2pim', m2iso = 'm2iso', m2r10 = 'm2r10'
方言タグのコメントは、ソースファイルの最初の 200 行以内にある場合に Vim によっ
て認識される。そのようなコメントは最初のものだけが認識され、追加の方言タグのコ
メントは無視される。
例:
DEFINITION MODULE FooLib; (*!m2pim*)
...
...
変数 g:modula2_default_dialect は、Modula-2 ファイルの内容から方言を決定できな
い場合に、デフォルトの Modula-2 方言を設定する。定義されて 'm2pim' に設定され
ている場合、デフォルトの方言は PIM になる。
例:
let g:modula2_default_dialect = 'm2pim'
ハイライトは、以下の変数を使用して方言ごとにさらに構成できる。
変数 ハイライト
modula2_iso_allow_lowline 識別子内のアンダースコアを許可する
modula2_iso_disallow_octals 8 進数リテラルを禁止する
modula2_iso_disallow_synonyms "@", "&" および "~" の同義語を禁止する
modula2_pim_allow_lowline 識別子内のアンダースコアを許可する
modula2_pim_disallow_octals 8 進数リテラルを禁止する
modula2_pim_disallow_synonyms "&" および "~" の同義語を禁止する
modula2_r10_allow_lowline 識別子内のアンダースコアを許可する
MOO moo.vim ft-moo-syntax
式の中でCスタイルのコメントを使っていて、それがハイライトを乱している場合は、C
スタイル用の拡張マッチ(これは遅い!)を使うことができる:
:let moo_extended_cstyle_comments = 1
文字列中の代名詞置換パターンのハイライトを無効化させるには:
:let moo_no_pronoun_sub = 1
正規表現演算子 '%l' のハイライトと文字列中の '%(' と '%)' のマッチを無効化させ
るには:
:let moo_no_regexp = 1
対応していないダブルクォートを認識してエラーとしてハイライトすることができる:
:let moo_unmatched_quotes = 1
組み込みプロパティ(.name, .location, .programmerなど)をハイライトするには:
:let moo_builtin_properties = 1
未知の組み込み関数を認識してエラーとしてハイライトすることができる。このオプ
ションを使うなら、mooKnownBuiltinFunctionグループに自分自身の拡張を加えること。
このオプションを有効化するには:
:let moo_unknown_builtin_functions = 1
既知の組み込み関数のリストにsprintf()を加える例:
:syn keyword mooKnownBuiltinFunction sprintf contained
MSQL msql.vim ft-msql-syntax
msql構文ハイライトには2つのオプションがある。
文字列中でSQL構文ハイライトをさせるにはこうする:
:let msql_sql_query = 1
シンクロナイズは、minlinesはデフォルトで100になっている。この値を変えるには、
"msql_minlines" の望む値にすればよい。例:
:let msql_minlines = 200
NEOMUTT neomutt.vim ft-neomuttrc-syntax
ft-neomuttlog-syntax
デフォルトの NeoMutt ログの色を無効にするには:
:let g:neolog_disable_default_colors = 1
N1QL n1ql.vim ft-n1ql-syntax
N1QL は、Couchbase Server データベースで JSON 文書を操作するための SQL ライク
な宣言型言語である。
Vim は、N1QL ステートメント、キーワード、オペレータ、型、コメントおよび特殊な
値を構文ハイライトする。COLUMN や CHAR のような、N1QL に存在しない SQL 特有な
構文要素やその他たくさんある方言は無視される。
NCF ncf.vim ft-ncf-syntax
NCF構文ハイライトには1つのオプションがある。
ncf.vimによって認識されない文をエラーとしてハイライトさせるにはこうする:
:let ncf_highlight_unknowns = 1
これらをエラーとしてハイライトさせたくない場合は、この変数をセットしないでお
く。
NROFF nroff.vim ft-nroff-syntax
nroff構文ファイルはそのままでAT&T n/troffに対応している。構文ファイルに含まれ
ているGNU groff拡張機能を使うには、それを有効化する必要がある。
例えば、LinuxとBSDディストリビューションは、デフォルトではテキスト処理パッケー
ジとしてgroffを使う。groff用の拡張構文ハイライト機能を有効化するには、ファイル
を groff (ft-groff-syntax を参照)として認識されるように調整する、あるいは次
のオプションを初期化ファイルに加える:
:let nroff_is_groff = 1
groffは、Solarisでまだ使われているかもしれない古いAT&T n/troffとは異なる。
groffのマクロとリクエスト名は2文字以上の長さであってもよく、言語プリミティブに
拡張がされている。例えば、AT&T troffではリクエスト\(yrを使い、2桁の数で年にア
クセスする。groffでは互換性のために同じリクエストを使うこともできるし、または
groffネイティブの構文,\[yr]を使うこともできる。さらに、\[year]として4桁の年を
直接使うこともできる。マクロリクエストは2文字以上の長さであってもよい。例えば、
GNU mmはverbatim環境を作るのに ".VERBON" と ".VERBOFF" というリクエストを受け
つける。
g/troffによって得られる最良の整形された出力を得るには、スペースと句読点に関す
るいくつかの単純なルールに従うべきである。
1. 行の末尾に空のスペースを置かないこと
2. 文末のピリオド、エクスクラメーションマークなどの後にはちょうど1個のスペース
を置くこと。
3. 後述の理由により、全てのピリオドの後に改行(carriage return)を置くとよい。
これらの妙なtipsの理由は、g/n/troffが改行に、これらのルールに従わないとすぐに
混乱してしまうアルゴリズムを使っているためである。
troffはTeXと違い、段落ごとでなく行ごとにテキストを書き込む。さらに、glueや
stretchの概念を持たず、入力に水平、垂直の空白があると全てそのまま出力される。
それゆえ、最終的なドキュメントで意図する以上の空白を文と文の間にはさまないよう
に注意すること。この理由のため、全ての句読点記号の後すぐに改行を入れるという習
慣がある。最終的に処理された出力が「一様な」テキストになってほしければ、入力の
テキストで正しくスペースを置いておく必要がある。行末の空白と句読点の後の2個以
上の空白をエラーとしてハイライトしたいならこうする:
:let nroff_space_errors = 1
正しい活字組みと干渉するかもしれないが、余分な空白や他のエラーを検出するもう1
つの方法は、設定ファイル中で構文グループ "nroffDefinition" と "nroffDefSpecial"
に目立つハイライト定義を定義することである。例:
hi def nroffDefinition term=italic cterm=italic gui=reverse
hi def nroffDefSpecial term=italic,bold cterm=italic,bold
\ gui=reverse,bold
hi def nroffDefSpecial term=italic,bold cterm=italic,bold
\ gui=reverse,bold
ソースファイル中のプリプロセッサーのエントリをセクションマーカーと同じくらい容
易に表示させたいなら、.vimrc中で次のオプションを有効化する:
let b:preprocs_as_sections = 1
同様に、構文ファイルはmsパッケージ中の拡張段落マクロ(.XP)用の余分な段落マーカー
も含んでいる。
最後に、構文ファイルgroff.vimが存在する。これはデフォルトでfile basisとグ
ローバルの両方でgroff構文ハイライトすることができる。
OCAML ocaml.vim ft-ocaml-syntax
OCaml構文ファイルは以下の拡張子を持つファイルに対応している: .ml, .mli, .mll
.mly。以下の変数をセットする:
:let ocaml_revised = 1
標準的OCaml構文からcamlp4プリプロセッサでサポートされている修正構文に切り替え
ることができる:
:let ocaml_noend_error = 1
"end" がエラーとしてハイライトされるのを防ぐ。これは、ソースに Vim が同期しな
い非常に長い構造が含まれている場合に便利である。
PANDOC ft-pandoc-syntax
デフォルトでは、markdown ファイルはファイルタイプ "markdown" として検出される。
あるいは、代わりにファイルタイプ "pandoc" として検出されるようにすることもで
る。これを行うには、g:filetype_md 変数を設定する:
:let g:filetype_md = 'pandoc'
Pandoc 構文プラグインは、きれいにハイライトするために conceal を使用する。デ
フォルトは 1
:let g:pandoc#syntax#conceal#use = 1
非表示にすべきでない要素を指定するには、以下の変数を設定する:
:let g:pandoc#syntax#conceal#blacklist = []
ここで使用できるルールのリストは以下のとおり:
- titleblock
- image
- block
- subscript
- superscript
- strikeout
- atx
- codeblock_start
- codeblock_delim
- footnote
- definition
- list
- newline
- dashes
- ellipses
- quotes
- inlinecode
- inlinemath
非表示の動作方法をカスタマイズできる。例えば、脚注に * 記号を付けたい場合は、
以下のようにする:
:let g:pandoc#syntax#conceal#cchar_overrides = {"footnote" : "*"}
リンク内の URL を非表示にするには、次を使用する:
:let g:pandoc#syntax#conceal#urls = 1
特定のコードブロックタイプをハイライトしないようにして、通常のままにする。コー
ドブロックの種類には、定義ブロック内のコードブロックの "definition" と、区切ら
れたコードブロックの "delimited" が含まれる。デフォルト = []
:let g:pandoc#syntax#codeblocks#ignore = ['definition']
言語が指定されている場合は、区切り文字で区切られたコードブロックに埋め込みハイ
ライトを使用する。デフォルト = 1
:let g:pandoc#syntax#codeblocks#embeds#use = 1
埋め込みをハイライトする言語と構文ファイルを指定する。これは言語名のリストであ
る。Pandoc と vim が使用する言語が一致しない場合は、"PANDOC=VIM" 構文を使用で
きる。例:
:let g:pandoc#syntax#codeblocks#embeds#langs = ["ruby", "bash=sh"]
イタリックと強調を使用する。デフォルト = 1
:let g:pandoc#syntax#style#emphases = 1
"0" を指定すると、g:pandoc#syntax#conceal#blacklist に "block" が追加される。
そうしないと、スタイルがどこに適用されているかが分からなくなるからである。
下線付き文字、上付き文字、取り消し線のテキストスタイルを追加する。
デフォルト = 1
:let g:pandoc#syntax#style#underline_special = 1
定義リストを検出してハイライトする。これを無効にするとパフォーマンスが向上する
可能性がある。デフォルト = 1 (つまり、デフォルトで有効)
:let g:pandoc#syntax#style#use_definition_lists = 1
Pandoc 構文スクリプトには、次のコマンドも付属している:
:PandocHighlight LANG
コードブロック内の言語 LANG の埋め込み強調表示を有効にする。
g:pandoc#syntax#codeblocks#embeds#langs の項目の構文を使用する。
:PandocUnhighlight LANG
コードブロック内の言語 LANG の埋め込み強調表示を無効にする。
PAPP papp.vim ft-papp-syntax
PApp構文ファイルは.pappファイルと、その小さな拡張、トップレベルのファイル
フォーマットとしてxmlを用いたperl/xml/html/その他の混合である.pxml, .pxslファ
イルを扱う。デフォルトでは、phtmlやpxmlセクションの内側の全ては埋め込みプリプ
ロセッサーコマンドつきの文字列として扱われる。次の変数を初期化ファイルで設定す
るとphtmlセクションの内側のhtmlコードを構文ハイライトしようとする:
:let papp_include_html=1
しかしこれは比較的遅く、実用的に編集するにはカラフルすぎる。
構文ファイルpapp.vimの最新版は、通常以下で得られる。
http://papp.plan9.de
PASCAL pascal.vim ft-pascal-syntax
"*.p" にマッチするファイルのタイプは Progress か Pascal で、"*.pp" にマッチす
るファイルのタイプは Puppet か Pascal ある。自動判別がうまく機能しない場合、ま
たは Pascal ファイルしか編集しない場合は、vimrcでこれを使用する:
:let filetype_p = "pascal"
:let filetype_pp = "pascal"
:let filetype_pp = "pascal"
Pascal構文ファイルはTurbo Pascal, Free Pascal CompilerとGNU Pascal Compilerで
提供される拡張に対応するための拡張が施されてきた。Delphiのキーワードもサポート
されている。デフォルトではTurbo Pascal 7.0の機能が有効化されている。標準的な
Pascalのキーワードだけを使いたいなら、次の行を初期化ファイルに加えること:
:let pascal_traditional=1
Delphi固有の構文(1行コメント、キーワード等)を有効化したいなら:
:let pascal_delphi=1
オプションpascal_symbol_operatorは、+, *などのような演算子記号をOperatorの色を
使って表示するどうかを制御する。演算子記号を色づけするには、次の行を初期化ファ
イルに加えること:
:let pascal_symbol_operator=1
いくつかの関数はデフォルトでハイライトされる。これをオフにするには:
:let pascal_no_functions=1
さらに、いくつかのコンパイラ用に個別の変数がある。pascal_delphi, pascal_gpc,
pascal_fpcがある。デフォルトの拡張はTurbo Pascalに合うようになっている。
:let pascal_gpc=1
または
:let pascal_fpc=1
文字列が1行で定義されるものとするなら、変数pascal_one_line_string variableを定
義するとよい。
:let pascal_one_line_string=1
タブ文字が好きでないなら、変数pascal_no_tabsをセットするとよい。するとタブがエ
ラーとしてハイライトされる。
:let pascal_no_tabs=1
PERL perl.vim ft-perl-syntax
perl用の構文ハイライトにはたくさんのオプションがある。
インライン POD 強調表示はデフォルトで有効化される。Perl ファイル内に埋め込まれ
たPOD を強調表示して複雑にしたくない場合は、'perl_include_pod' オプションを 0
に設定する:
:let perl_include_pod = 0
パースの複雑さを軽減するために (そしてパフォーマンスを上げるために)、変数名と
内容のパースにおける2つの要素をオフにすることができる。
変数名と関数名中のパッケージ参照 ('$PkgName::VarName' 中の 'PkgName::' のよう
な) を他の名前と区別しないようにするには次のようにする:
:let perl_no_scope_in_variables = 1
(Vim 6.x では違う方法だった: "perl_want_scope_in_variables" を設定するとこの機
能が有効になった)
'@{${"foo"}}' のように複雑なものをパースさせたくないなら次のようにする:
:let perl_no_extended_vars = 1
(Vim 6.x では違う方法だった: "perl_extended_vars" を設定するとこの機能が有効に
なった)
文字列の色づけは変更できる。デフォルトでは文字列とqq friendsは第1行と同じよう
にハイライトされる。変数perl_string_as_statementをセットすると第2行のようにハ
イライトされる。
"hello world!"; qq|hello world|;
^^^^^^^^^^^^^^NN^^^^^^^^^^^^^^^N (unlet perl_string_as_statement)
S^^^^^^^^^^^^SNNSSS^^^^^^^^^^^SN (let perl_string_as_statement)
(^ = perlString, S = perlStatement, N = None at all)
シンクロナイズには3つのオプションがある。最初の2つは、シンクロナイズのトリガー
の一部をオフにするもので、ハイライトが適切に機能しないときのみ必要になる。スク
ロール中に突然スクリーン全体の色がすっかり変わってしまったらこれらのうち1つを
オフにしてみること。その誤りを引き起こした行を特定できる場合、それを開発者に知
らせてください。
1つのトリガーは "^\s*sub\s*" に関するもので、もう1つはほぼ "^[$@%]" に関するも
のである。
:let perl_no_sync_on_sub
:let perl_no_sync_on_global_var
:let perl_no_sync_on_global_var
以下のようにして、どこから構文ハイライトを始めるかの最大距離を設定できる:
:let perl_sync_dist = 100
perlで折りたたみを使いたいならperl_foldをセットすること:
:let perl_fold = 1
if 文などでも同様にブロックを折り畳みたければ、次のように設定する:
:let perl_fold_blocks = 1
デフォルトでは 'perl_fold' が設定されていればサブルーチンの折り畳みは有効化さ
れる。無効化したい場合は 'perl_nofold_subs' を設定する:
:let perl_nofold_subs = 1
デフォルトでは無名サブルーチンは折り畳まれない。折り畳みを有効化するには
'perl_fold_anonymous_subs' を設定する:
:let perl_fold_anonymous_subs = 1
デフォルトでは 'perl_fold' が設定されていればパッケージは折り畳まれる。無効化
したい場合は 'perl_nofold_packages' を設定する:
:let perl_nofold_packages = 1
PHP3 and PHP4 php.vim php3.vim ft-php-syntax ft-php3-syntax
[Note: これは以前は "php3" と呼ばれていた。しかし現在はphp4もサポートしている
ので "php" と名前が変更された]
php用の構文ハイライトには以下のオプションがある。
文字列中でSQL構文ハイライトを行いたいなら:
let php_sql_query = 1
Baselibメソッドのハイライトを行いたいなら:
let php_baselib = 1
文字列中でHTML構文ハイライトを行いたいなら:
let php_htmlInStrings = 1
古いカラースタイルを使いたいなら:
let php_oldStyle = 1
ASPスタイルのショートタグを有効化したいなら:
let php_asp_tags = 1
ショートタグを無効化したいなら:
let php_noShortTags = 1
] や ) の対応エラーをハイライトしたいなら:
let php_parent_error_close = 1
対応する閉じ括弧がない開き括弧 ( や [ が存在する場合、php終了タグをスキップさ
せたいなら:
let php_parent_error_open = 1
クラスや関数の折り畳みを有効化するには:
let php_folding = 1
シンクロナイズ方法を選ぶには:
let php_sync_method = x
x = -1 で検索によるシンクロナイズ(デフォルト)
x > 0 少なくともx行上までシンクロナイズ
x = 0 最初からシンクロナイズ
PLAINTEX plaintex.vim ft-plaintex-syntax
TeX とは組版言語であり、plaintex は「素の」TeX に対して使われるファイルタイプ
である。*.tex ファイルを決して素の TeX と認識してほしくないならば
ft-tex-plugin を参照。
この構文ファイルは次のオプションを持つ
let g:plaintex_delimiters = 1
角括弧 "[]" と波括弧 "{}" をハイライトさせるには上の変数を設定する。
PPWIZARD ppwiz.vim ft-ppwiz-syntax
PPWizardはHTMLとOS/2 INFファイル用のプリプロセッサーである。
構文ファイルは以下のオプションを持つ:
- ppwiz_highlight_defs : PPWizardの定義についてのハイライトモードを決める。
とりうる値は
ppwiz_highlight_defs = 1 : #define 文においてその内容の色を保つ(例. PPWizard
マクロと変数)。
ppwiz_highlight_defs = 2 : 行継続記号を除き、#defineと#evaluate文が単一の色
で表示される。
ppwiz_highlight_defsのデフォルトは1である。
- ppwiz_with_html : この値が1(デフォルト)なら、HTMLコードをハイライトする。0な
らHTMLコードを通常のテキストのように扱う。
PHTML phtml.vim ft-phtml-syntax
phtml用の構文ハイライトには2つのオプションがある。
文字列中でSQL構文ハイライトをさせたいならこうする:
:let phtml_sql_query = 1
シンクロナイズについては、minlinesのデフォルトは100になっている。他の値にした
いなら "phtml_minlines" を望む値にセットすればよい。例:
:let phtml_minlines = 200
POSTSCRIPT postscr.vim ft-postscr-syntax
PostScript用の構文ハイライトにはいくつかのオプションがある。
まず、どのバージョンのPostScript言語をハイライトするかである。現在のところ、言
語の3つのバージョン、あるいはレベルが定義されている。レベル1はオリジナルの基本
バージョンで、レベル2のリリース以前のすべての拡張を含んでいる。レベル2はもっと
も一般的なバージョンで、レベル3リリース以前のすべての拡張を含んでいる。レベル3
は現在のところサポートされている中でもっともレベルが高い。次のように変数
postscr_levelを定義することによって、PostScript言語のどのレベルをハイライトす
るか選ぶことができる:
:let postscr_level=2
この変数が定義されていないときはデフォルトの2(レベル2)になる。これが現在のとこ
ろもっとも普及しているためである。
Note: すべてのPSインタープリターがその言語レベルのすべての言語機能をサポートし
ているわけではない。とくに、PSファイルの先頭の%!PS-Adobe-3.0は現在の
PostScriptがレベル3であることを示すわけではない!
以下のように変数postscr_displayを定義すると、Display PostScriptの言語機能もハ
イライトさせることができる:
:let postscr_display=1
以下のように変数postscr_ghostscriptを定義すると、Ghostscript固有の言語機能もハ
イライトさせることができる:
:let postscr_ghostscript=1
PostScriptはたくさんの定義済み要素を持つ巨大な言語である。これらの要素すべてを
ハイライトすると便利であるが、そうすると遅いマシンではVimの動作が遅くなってし
まう。マシンフレンドリーにするために、デフォルトではフォント名と文字エンコー
ディングはハイライトされない、これらをハイライトさせるには、以下の変数のどちら
かまたは両方をセットすること:
:let postscr_fonts=1
:let postscr_encodings=1
:let postscr_encodings=1
and、or、notのハイライトについて、スタイル上のオプションが存在する。PostScript
では、これらの演算子の機能はオペランドの型に依存する。オペランドが両方ブール型
なら論理演算子となり、両方整数型なら2項演算子となる。2項演算子と論理演算子を区
別してハイライトすることができるので、どちらにしてもこれらはハイライトされなけ
ればならない。デフォルトではどちらも論理演算子としてハイライトされる。変数
postscr_andornot_binaryを定義すると、どちらも2項演算子としてハイライトされる:
:let postscr_andornot_binary=1
ptcap.vim ft-printcap-syntax
PRINTCAP + TERMCAP ft-ptcap-syntax ft-termcap-syntax
この構文ファイルはprintcapとtermcapデータベースに適用される。
*printcap*または*termcap*というパターンにマッチしないprintcap/termcapファイル
を認識させるためには、ファイルmyfiletypefileにおいて、あなたのシステムに合っ
たパターンを追加しなければならない。これらのパターンには、変数 "b:ptcap_type"
を "print" か "term" のどちらかにセットしなければならない。するとオプション
'filetype' の値がptcapになる。
例えば、/etc/termcaps/以下の全てのファイルをtermcapファイルと識別させるように
するには次を書き加える:
:au BufNewFile,BufRead /etc/termcaps/* let b:ptcap_type = "term" |
\ set filetype=ptcap
\ set filetype=ptcap
上方向にスクロールしているときハイライトがおかしくなり、それがCTRL-Lで再描画す
ると直るようなら、変数 "ptcap_minlines" の値を大きくしてみるとよい:
:let ptcap_minlines = 50
(デフォルトは20行)
PROGRESS progress.vim ft-progress-syntax
"*.w" にマッチするファイルのタイプは Progress か cweb である。自動判別がうまく
機能しない場合、または cweb ファイルを一切編集しない場合は、vimrcでこれを使用
する:
:let filetype_w = "progress"
同じことが "*.i" (アセンブリでもありうる)と "*.p" (Pascal でもありうる)にもいえる。アセンブリと Pascal を使わないとわかっているならこれを使用する:
:let filetype_i = "progress"
:let filetype_p = "progress"
:let filetype_p = "progress"
PYTHON python.vim ft-python-syntax
Python構文ハイライトをコントロールするオプションは 6 つある。
数字のハイライト:
:let python_no_number_highlight = 1
組み込み関数のハイライト:
:let python_no_builtin_highlight = 1
標準例外のハイライト:
:let python_no_exception_highlight = 1
doctest とその中のコードのハイライト:
:let python_no_doctest_highlight = 1
または :let python_no_doctest_code_highlight = 1
最初のオプションは 2 番目のオプションも含む。行末の空白と、スペースとタブの混在のハイライト:
:let python_space_error_highlight = 1
全てのハイライトを有効化させるには:
:let python_highlight_all = 1
これは python_space_error_highlight を設定し、他のすべての設定を解除するのと同じ効果がある。
Python 2 や straddling code (Python 2 と 3 の互換性) を使っている場合、Python 2
と Python 3.5 までをサポートした古い構文ファイルの使用を強制することができる
:let python_use_python2_syntax = 1
このオプションは、最新の Python 3.6 以上の機能をすべて除外する。Note: 変数が定義されているかどうかが意味を持つ。値は関係ない。設定値は 1 以外
でも構わない。
QUAKE quake.vim ft-quake-syntax
Quake構文定義はQuakeエンジンのどれかに基づくほとんどのFPS(First Person Shooter)
用に対応するはずである。しかし3つのゲーム(Quake, Quake 2, Quake 3 Arena)間でコ
マンド名が少々異なる。そのため、3つのグローバル変数により、どのコマンドが有効
であるか指定できるようになっている。3つの変数には次のような効果がある:
Quakeでのみ利用可能なコマンドをハイライトするように設定:
:let quake_is_quake1 = 1
Quake 2でのみ利用可能なコマンドをハイライトするように設定:
:let quake_is_quake2 = 1
Quake 3 Arenaでのみ利用可能なコマンドをハイライトするように設定:
:let quake_is_quake3 = 1
これら3つのコマンドを自由に組み合わせることができる。しかしゲームで利用できな
いコマンドもハイライトしてしまうかもしれない。
R r.vim ft-r-syntax
構文ハイライトのためのRコードの構文解析は、40行後ろから開始するが、vimrc に
異なる値を設定することができる。例:
let r_syntax_minlines = 60
また、ROxygenの構文ハイライトをオフにすることもできる:
let r_syntax_hl_roxygen = 0
丸括弧、角括弧、波括弧で区切られたコードの折り畳みを有効にする:
let r_syntax_folding = 1
そして、キーワードの後に開き丸括弧がつくすべてを関数としてハイライトする:
let r_syntax_fun_pattern = 1
R MARKDOWN rmd.vim ft-rmd-syntax
YAMLヘッダーの構文ハイライトを無効にするには、vimrc に追加する:
let rmd_syn_hl_yaml = 0
引用キーの構文ハイライトを無効にする:
let rmd_syn_hl_citations = 0
knitrチャンクヘッダー内のRコードをハイライトする:
let rmd_syn_hl_chunk = 1
デフォルトでは、R言語の規則に従って、Rコードのチャンクがハイライトされる。さら
に、バッファが保存されるたびに、Vim はバッファをスキャンし、新しいチャンクに他
の言語が存在する場合はそれをハイライトする。LaTeX コードも、バッファが保存され
るときに自動的に認識され、ハイライトされる。この動作は、変数
rmd_dynamic_fenced_langages および rmd_include_latex で制御できる。有効な
値は次のとおり:
let rmd_dynamic_fenced_languages = 0 " 言語の自動検出なし
let rmd_dynamic_fenced_languages = 1 " 言語の自動検出あり
let rmd_include_latex = 0 " LaTeX コードをハイライトしない
let rmd_include_latex = 1 " LaTeX コードを自動検出する
let rmd_include_latex = 2 " 常に LaTeX のハイライトを含める
let rmd_dynamic_fenced_languages = 1 " 言語の自動検出あり
let rmd_include_latex = 0 " LaTeX コードをハイライトしない
let rmd_include_latex = 1 " LaTeX コードを自動検出する
let rmd_include_latex = 2 " 常に LaTeX のハイライトを含める
rmd_dynamic_fenced_langages の値が 0 の場合でも、次の例のように、コードのチャ
ンクを適切にハイライトする必要がある言語のリストを設定できる:
let rmd_fenced_languages = ['r', 'python']
R RESTRUCTURED TEXT rrst.vim ft-rrst-syntax
knitrチャンクヘッダー内のRコードをハイライトするには、vimrc に追加する:
let rrst_syn_hl_chunk = 1
RASI rasi.vim ft-rasi-syntax
Rasi は Rofi Advanced Style Information の略である。これは、検索ウィンドウのレ
ンダリングをスタイル設定するために、プログラム rofi によって使用される。この言
語は、CSS スタイルシートに大きく影響を受けている。次の拡張子を持つファイルは、
rasi ファイルとして認識される: .rasi。
READLINE readline.vim ft-readline-syntax
readlineライブラリは主としてBASHシェルで使われ、BASHはかなりの数のコマンドとオ
プションを追加している。これらの項目を同様にハイライトするには次をvimrcに加
えるか、readline構文ファイルを読み込む前にこれをタイプすればよい:
let readline_has_bash = 1
こうするとBASH(バージョン2.05a以降。一部それ以前)が追加するコマンドもハイライ
トするようになる。
REGO rego.vim ft-rego-syntax
Rego は Styra が開発したクエリ言語である。主に kubernetes のポリシー言語として
使用されるが、ほぼ全てのアプリケーションに適用できる。次の拡張子のファイルが
rego ファイルとして認識される: .rego
RESTRUCTURED TEXT rst.vim ft-rst-syntax
選択したファイルタイプの数について、文書内のコードブロックに対して構文ハイライ
トが有効になる。デフォルトの構文リストについては、$VIMRUNTIME/syntax/rst.vim
を参照。
ユーザー定義のコードブロック構文ハイライトの一覧を設定するには:
let rst_syntax_code_list = ['vim', 'lisp', ...]
複数のコードブロックタイプを単一の構文に割り当てるには、マッピングとして
rst_syntax_code_list を定義する:
let rst_syntax_code_list = {
\ 'cpp': ['cpp', 'c++'],
\ 'bash': ['bash', 'sh'],
...
\ }
\ 'cpp': ['cpp', 'c++'],
\ 'bash': ['bash', 'sh'],
...
\ }
強調テキストにカラーハイライトを使用するには:
let rst_use_emphasis_colors = 1
セクションの折りたたみを有効にするには:
let rst_fold_enabled = 1
Note 一部のプラットフォームでは、折りたたみによってパフォーマンスの問題が発生
する可能性がある。
REXX rexx.vim ft-rexx-syntax
上方向にスクロールしているときにハイライトがおかしくなり、それがCTRL-Lで再描画
すると直るようなら、変数 "rexx_minlines" の値を大きくしてみるとよい:
:let rexx_minlines = 50
こうすると構文シンクロナイズが画面最上行の50行前から始まるようになる。値を大きくすることの欠点は、再描画が遅くなることである。
Vim は ".r" ファイルのタイプを推測しようとする。(コメント行から) タイプを特定
できなかった場合、デフォルトは "r" である。デフォルトを rexx にするには次の行
を .vimrc に追加すること: g:filetype_r
:let g:filetype_r = "r"
RUBY ruby.vim ft-ruby-syntax
Ruby: 演算子のハイライト ruby_operators
Ruby: ホワイトスペース エラー ruby_space_errors
Ruby: 折り畳み ruby_fold ruby_foldable_groups
Ruby: 負荷の高い処理の削減 ruby_no_expensive ruby_minlines
Ruby: スペルチェック ruby_spellcheck_strings
ruby_operators
Ruby: 演算子のハイライト
"ruby_operators" を定義すると、演算子をハイライトできる:
:let ruby_operators = 1
ruby_space_errors
Ruby: ホワイトスペース エラー
"ruby_space_errors" を定義すると、ホワイトスペースのエラーをハイライトできる:
:let ruby_space_errors = 1
これは、行末のホワイトスペースとスペース文字に続くタブ文字をエラーとしてハイラ
イトする。"ruby_no_trail_space_error" と "ruby_no_tab_space_error" の定義によ
り、行末のホワイトスペースやスペース文字直後のタブ文字を無視するよう個別に制御
できる。
ruby_fold ruby_foldable_groups
Ruby: 折り畳み
"ruby_fold" を定義すると、折り畳みを有効化できる:
:let ruby_fold = 1
これは、'foldmethod' の値として "syntax" を現在のバッファまたはウィンドウに限
定で設定し、Ruby ファイルの編集時に、構文に基づく折り畳みを有効にする。
デフォルトの折り畳みはある程度、精密である。すなわち、"if", "do", "%w[]" など
の小さな構文ユニットは、対応する折り畳みレベルを構成する。
"ruby_foldable_groups" をセットすることで、折り畳み可能なグループを制限できる:
:let ruby_foldable_groups = 'if case %'
値は、キーワードのリストをスペース文字区切りで指定:
キーワード 意味
---------- -------------------------------------
ALL 大部分のブロック構文 (デフォルト)
NONE なし
if "if" or "unless" ブロック
def "def" ブロック
class "class" ブロック
module "module" ブロック
do "do" ブロック
begin "begin" ブロック
case "case" ブロック
for "for", "while", "until" ループ
{ 波カッコ ブロック、またはハッシュ リテラル
[ 配列リテラル
% "%" 記法によるリテラル。 例: %w(STRING), %!STRING!
/ 正規表現
string 文字列とシェルコマンドの出力 (', ", ` でくくられた)
: シンボル
# 複数行コメント
<< ヒアドキュメント
__END__ "__END__" ディレクティブ以降のソースコード
ruby_no_expensive
Ruby: 負荷の高い処理の削減
デフォルトではキーワード "end" はそれに対応するブロック開始文にしたがって色づ
けされる。この機能は便利だが、コストがかかる。再描画が遅くなったら(または色機
能の貧弱なターミナルを使っているなら)変数 "ruby_no_expensive" を定義することに
よってこの機能をオフにできる:
:let ruby_no_expensive = 1
この場合すべての制御キーワードに同じ色が使われる。
ruby_minlines
この機能を有効化したいが、上にスクロールしているときにハイライトがおかしくな
り、それがCTRL-Lで再描画すると直るようなら、変数 "ruby_minlines" を50以上の値
にセットしてみるとよい:
:let ruby_minlines = 100
理想的には、ファイル中の最も行数の多いクラスやモジュールをカバーできるほどの十
分な行数を値として設定するべき。
ruby_spellcheck_strings
Ruby: スペルチェック
"ruby_spellcheck_strings" を定義すると、Ruby シンタックスはスペルチェックを行
う:
:let ruby_spellcheck_strings = 1
SCHEME scheme.vim ft-scheme-syntax
デフォルトでは R7RS のキーワードだけをハイライトし、正しくインデントする。
scheme.vim は CHICKEN Scheme->C コンパイラの拡張子にも対応している。それを有効
にするには b:is_chicken または g:is_chicken を定義する。
SDL sdl.vim ft-sdl-syntax
SDL用のハイライトにはいくつかのキーワードが抜けているかもしれない。しかしSDLに
はたくさんのキーワードがあるので、すべてに対応することはほとんど不可能である。
新しい標準SDL-2000ではすべての識別子の大文字・小文字が区別される(以前はそうで
はなかった)。また、すべてのキーワードが全部大文字または全部小文字であってもよ
い。構文ハイライトにこれを反映させるには次の変数をセットすればよい:
:let sdl_2000=1
これはたくさんの新しいキーワードもセットする。古いキーワードを無効にするには
(これはよい考えである)こうする:
:let SDL_no_96=1
インデントもおそらく不完全であるが、今のところ私はこれでとても満足している。
SED sed.vim ft-sed-syntax
タブをハイライトして通常の空白と区別しやすくするには、次の行をvimrcに書いて
"g:sed_highlight_tabs" を定義する(TODOと同じ構文グループが使われる)
:let g:sed_highlight_tabs = 1
(タブのハイライトは、検索パターン、置換テキスト、アドレス、
Append/Change/Insertコマンドに含まれるテキストいずれかの中のタブにだけ適用され
る)。このオプションを有効化するなら、タブ幅を1文字にするとよい。そうすると文字
列中のタブの数を数えやすくなる。
GNU sed では、同じ行のテキストの後ろにコメントを書くことができる。BSD sed では
"#" が行頭である場合にしかコメントとみなされない。BSD 形式のコメントを強制す
る、すなわち行末コメントをエラーとして表示するには:
:let g:sed_dialect = "bsd"
Note GNU sed と BSD sed の間には、この設定によって (まだ) 影響を受けていない他
の違いがある。
バグ:
変換コマンド(y)は置換コマンドとまったく同様に扱われる。つまり、この構文ファ
イルにおいては、変換は置換と同じフラグを受け取ると判断される。これは間違いで
ある(変換は一切フラグを受け取らない)。これに関係したコマンドは非常に複雑な処
理を要求するため(95パターン、もっともらしいパターンデリミタごとに1つ)、私は
このバグを容認している。
SGML sgml.vim ft-sgml-syntax
SGMLファイル中のタグをハイライトする方法は以下のように動作する。
開きタグ<>と閉じタグ</>は異なる色がつけられる。これは意図されたものである。開
きタグには 'Function' の色が使われ、閉じタグには 'Type' の色が使われる(これら
がどう定義されているかを確かめたいならsyntax.vimを見ること)。
登録されているタグ名はCの文と同じ方法で色づけされる。エラーを見つけやすくする
ため、登録されていないタグ名は色づけされない。
引数名(や属性名)も同様である。登録されている属性名は登録されていない属性名と異
なる色がつけられる。
いくつかのSGMLタグはテキストの外見を変更するのに使われる。以下のタグは構文ファ
イルsgml.vimによって認識され、通常のテキストの表示法を変更する:
<varname> <emphasis> <command> <function> <literal> <replaceable> <ulink>
<link>。
そのテキストの表示法を変えたいなら以下の構文グループを再定義しなければならない:
- sgmlBold
- sgmlBoldItalic
- sgmlUnderline
- sgmlItalic
- sgmlLink リンク用
この再定義を機能させるにはこれらすべてを再定義し、以下の変数をvimrc中で定義し
なければならない(初期化の際にファイルが読み込まれる順序のため)
let sgml_my_rendering=1
この表示法を無効にしたければ次の行をvimrcに加える:
let sgml_no_rendering=1
(Claudio Fleiner <claudio@fleiner.com>によるhtml.vimのヘルプテキストから一部借
用した)
ft-posix-syntax ft-dash-syntax
SH sh.vim ft-sh-syntax ft-bash-syntax ft-ksh-syntax
これは、古い UNIX (Bourne) sh と bash や dash、POSIX、Korn シェルのような新し
い UNIX シェルの構文ハイライトをカバーする。
Vimは様々なファイル名がどのタイプであるかを指定することによって、どのシェルが
使われているかを決定しようとする。例えば:
ksh : .kshrc* *.ksh
bash: .bashrc* bashrc bash.bashrc .bash_profile* *.bash
bash: .bashrc* bashrc bash.bashrc .bash_profile* *.bash
パターンの完全なリストについては、$VIMRUNTIME/filetype.vim を参照すること。こ
れらのうちどれにも当てはまらなければ、ファイルの第一行によって判断される(例.
/bin/sh /bin/ksh /bin/bash を探す)。第一行でシェルを指定されていれば、そのシェ
ルが使用される。しかしいくつかのファイル(例. .profile)はシェルファイルであるこ
とはわかっていても、どのタイプか明らかではない。さらに、多くのシステムでshは
"bash" (Linux, Windows+cygwin) や "ksh" (Posix) へのシンボリックリンクになって
いる。
以下の変数のどれかを.vimrcで定義することにより、デフォルトを設定すること
ができる:
ksh:
let g:is_kornshell = 1
posix: (これは g:is_kornshell に1を設定することとほぼ同じ) let g:is_posix = 1
bash: let g:is_bash = 1
sh: (デフォルト) Bourne shell let g:is_sh = 1
(dash 使用者は posix を使用するべき)
"#! ..." という行がなく、かつユーザーが上の方法でデフォルトの sh.vim の構文を
設定していない場合、sh.vim は Bourne シェルの構文であると仮定する。エラーレポー
トで RFC や市場浸透統計を引用する必要はありません。ただただ、デフォルトでシス
テムに使用されるバージョンのシェルを選択し、それに対応する "let..." をあなたの
.vimrc に導入してください。
syntax/sh.vim は構文ベースの折り畳みを数種類用意している:
let g:sh_fold_enabled= 0 (デフォルト。構文折り畳みなし)
let g:sh_fold_enabled= 1 (関数の折り畳みを有効化)
let g:sh_fold_enabled= 2 (ヒアドキュメントの折り畳みを有効化)
let g:sh_fold_enabled= 4 (if/do/for の折り畳みを有効化)
let g:sh_fold_enabled= 1 (関数の折り畳みを有効化)
let g:sh_fold_enabled= 2 (ヒアドキュメントの折り畳みを有効化)
let g:sh_fold_enabled= 4 (if/do/for の折り畳みを有効化)
様々な構文要素(例: ヒアドキュメントと関数の中身)がsyntaxメソッドによって折り畳
み可能になる(:syn-fold)。これらのうち複数を組み合わせることもできる:
let g:sh_fold_enabled= 3 (関数とヒアドキュメントの折り畳みを有効化)
上方向にスクロールしているときにハイライトがおかしくなり、それがCTRL-Lで再描画
すると直るようなら、変数 "sh_minlines" の値を大きくしてみるとよい。例:
let sh_minlines = 500
こうすると構文シンクロナイズが画面最上行の500行前から始まるようになる。デフォ
ルトの値は200である。大きい値を設定することの欠点は、動作が遅くなるかもしれな
いことである。
シンクロナイズさせるものがあまりないときは表示がとても遅くなるかもしれない。こ
れを減らすために、変数 "sh_maxlines" をセットすることができる。例:
let sh_maxlines = 100
デフォルトはsh_minlinesの2倍の値が使われる。表示を高速化するにはこれをもっと小
さい値にすること。欠点はハイライト間違いが出るかもしれないことである。
syntax/sh.vim は特定のプログラムをエラーとして表示しようとする。通常は、余分な
"]", "done", "fi" などがこれに当たる。もしもこのエラーの扱いがあなたの目的で問
題を起こす場合は、.vimrc に以下を書くことでエラーの強調表示を抑制できる:
let g:sh_no_error= 1
sh-embed sh-awk
Sh: 埋め込み言語
sh に言語を埋め込みたい場合。Lorance Stinson が awk を埋め込む例を出してくれた
のでそれを載せる。以下のファイルを $HOME/.vim/after/syntax/sh/awkembed.vim
に置くこと:
" AWK Embedding:
" ==============
" Shamelessly ripped from aspperl.vim by Aaron Hope.
if exists("b:current_syntax")
unlet b:current_syntax
endif
syn include @AWKScript syntax/awk.vim
syn region AWKScriptCode matchgroup=AWKCommand start=+[=\\]\@<!'+ skip=+\\'+ end=+'+ contains=@AWKScript contained
syn region AWKScriptEmbedded matchgroup=AWKCommand start=+\<awk\>+ skip=+\\$+ end=+[=\\]\@<!'+me=e-1 contains=@shIdList,@shExprList2 nextgroup=AWKScriptCode
syn cluster shCommandSubList add=AWKScriptEmbedded
hi def link AWKCommand Type
" ==============
" Shamelessly ripped from aspperl.vim by Aaron Hope.
if exists("b:current_syntax")
unlet b:current_syntax
endif
syn include @AWKScript syntax/awk.vim
syn region AWKScriptCode matchgroup=AWKCommand start=+[=\\]\@<!'+ skip=+\\'+ end=+'+ contains=@AWKScript contained
syn region AWKScriptEmbedded matchgroup=AWKCommand start=+\<awk\>+ skip=+\\$+ end=+[=\\]\@<!'+me=e-1 contains=@shIdList,@shExprList2 nextgroup=AWKScriptCode
syn cluster shCommandSubList add=AWKScriptEmbedded
hi def link AWKCommand Type
この例では次のようなシングルクォートで囲まれた awk コードが awk 言語として強調
表示されるようになる:
awk '...awk code here...'
これは他の言語にも応用できる。SPEEDUP spup.vim ft-spup-syntax
(AspenTech plant simulator)
Speedup構文ファイルにはいくつかのオプションがある:
- strict_subsections : この変数が定義されていると、セクションとサブセクション
用のキーワードだけが文としてハイライトされ、他のキーワードにはされなくなる
(OPERATIONセクションのWITHINと同様)。
- highlight_types : この変数が定義されていると、温度や圧力のようなストリーム
型が単純な識別子でなくTypeとしてハイライトされる。Includedは通常DECLAREセク
ション中に現れる型である; ユーザーが自分用の型を定義しているならそれらを構文
ファイルに含めなければならない。
- oneline_comments : この値は1から3までの間になり、#スタイルのコメントのハイラ
イトを決定する。
oneline_comments = 1 : 偶数個の#の後にも通常のSpeedupコードが現れることを許す
oneline_comments = 2 : 2番目の#で始まるコードをエラーとして表示する。これが
デフォルトの設定である。
oneline_comments = 3 : 1個以上の#を含む行全体をエラーとしてハイライトする。
変数のPRESETにより、OPERATIONセクションはとても大きくなりがちであり、そのため
シンクロナイズが追いつかなくなるかもしれない。あなたのコンピュータが十分速いな
ら構文ファイルの最後近くでminlinesとmaxlinesの値を大きくするとよいかもしれな
い。
SQL sql.vim ft-sql-syntax
sqlinformix.vim ft-sqlinformix-syntax
sqlanywhere.vim ft-sqlanywhere-syntax
SQLにはANSI標準があるのだが、ほとんどのデータベースエンジンは独自の拡張を追加
している。現在のところ、VimはOracleとInformixのSQL方言をサポートしている。
デフォルトではVimは "*.sql" のファイルをOracle SQLであると判断する。
現在のところ、Vimは構文スクリプトによって、様々なベンダーのSQLに対応している。
デフォルト設定をOracleから他の対応しているSQLに変更することができる。また、
バッファごとに使うSQLの方言を変えることも簡単にできる。
より詳しい説明はft_sql.txtを参照。
SQUIRREL squirrel.vim ft-squirrel-syntax
Squirrel はハイレベルな命令型オブジェクト指向プログラミング言語であり、ビデオ
ゲームなどのアプリケーションのサイズ、メモリ帯域幅、リアルタイム性の要件に適す
る軽量なスクリプト言語として設計されている。次の拡張子のファイルは、Squirrel
ファイルとして認識される: .nut
TCSH tcsh.vim ft-tcsh-syntax
これは "tcsh" という名前のシェルをカバーしている。これはcshのスーパーセットで
ある。ファイル形式がどのように判定されるかはcsh.vimを参照。
tcshはシェル変数 backslash_quote をセットしていない限り文字列中に \" が現れる
ことを許さない。Vimにバックスラッシュクォート構文が存在しないと判断させたいな
ら、次の行を.vimrcに加えること:
:let tcsh_backslash_quote = 0
上方向にスクロールしているときにハイライトがおかしくなり、それがCTRL-Lで再描画
すると直るようなら、変数 tcsh_minlines の値を大きくしてみるとよい:
:let tcsh_minlines = 1000
こうすると構文シンクロナイズが画面最上行の1000行前から始まるようになる。
tcsh_minlines に "fromstart" をセットすると、ファイルの先頭からシンクロナイズ
が行われるようになる。tcsh_minlines の既定値は 100。大きな値にすることの欠点
は、再描画が遅くなることである。
TEX tex.vim ft-tex-syntax latex-syntax
syntax-tex syntax-latex
Tex 目次
Tex: 構文折り畳みをするには tex-folding
Tex: スペルチェックを行いたくない場合 g:tex_nospell
Tex: コメントの中ではスペルチェックを行いたくない場合 tex-nospell
Tex: Verbatim ゾーンをスペルチェックするには tex-verb
Tex: コメントや MathZone の区切り tex-runon
Tex: 構文ハイライトが遅いならば tex-slow
Tex: もっとコマンドをハイライトさせるには tex-morecommands
Tex: エラーのハイライトが行き過ぎならば tex-error
Tex: 新しいMathグループが必要ならば tex-math
Tex: 新しいスタイルを始めるには tex-style
Tex: Conceal モードを活用する tex-conceal
Tex: Conceal モードの選択 g:tex_conceal
Tex: iskeyword を制御する g:tex_isk
Tex: 下付き記号と上付き記号を制御する tex-supersub
Tex: 一致のチェックの制御 tex-matchcheck
tex-folding g:tex_fold_enabled
Tex: 構文折り畳みをするには
<syntax/tex.vim>のバージョン28以降では、構文による部分、章、節、小節などの折り
畳みに対応している。それを有効にするには次の行を<.vimrc>に書き、
let g:tex_fold_enabled=1
:set fdm=syntaxとする。後者をLaTeXファイルの末尾にモードラインとして書いておくといいかもしれない:
% vim: fdm=syntax
これによってシステムが遅くなり過ぎる場合は次のリンクを参照することg:tex_nospell
Tex: スペルチェックを行いたくない場合
LaTeX 文章でどこにもスペルチェックを行わせたくない場合は、
let g:tex_nospell=1
を .vimrc に書けばよい。ただ単にコメント内だけでスペルチェックを抑制したい場合は、g:tex_comment_nospell を参照せよ。
tex-nospell g:tex_comment_nospell
Tex: コメントの中ではスペルチェックを行いたくない場合
LaTeX ファイルのコメントの中にソースコードのようなものを含めることがあるので、
コメントの中ではスペルチェックを無効にしたいという人もいる。そのようにするには
次の行を .vimrc に加える:
let g:tex_comment_nospell= 1
LaTeX 文章中のどこででもスペルチェックを抑制したい場合は、g:tex_nospell を参照せよ。
tex-verb g:tex_verbspell
Tex: Verbatim ゾーンをスペルチェックするには
たいてい verbatim リージョンはソースコードのようなものを書くのに使われる。
ソースコードをスペルチェックしたいと思うことはほとんどないだろう。とはいえ、も
し verbatim ゾーンの内容をスペルチェックしたいときは <.vimrc> で次のように設定
すること:
let g:tex_verbspell= 1
tex-runon tex-stopzone
Tex: コメントや MathZone の区切り
<syntax/tex.vim>の構文ハイライトはTeX, LaTeX, AmsTeXをサポートしている。normal,
texZone, texMathZoneの3つの主な区間・範囲がサポートされている。これらの区間を
適切に区切るようかなりの努力がされたが、$..$と$$..$$で線引きされる区間は開始・
終了のパターンとまったく同じにシンクロナイズさせることはできない。その結果、特
別な "TeX comment" が提供されている
%stopzone
このコメントがあると、ここで強制的にtexZoneまたはtexMathZoneのハイライトを終わらせる。
tex-slow tex-sync
Tex: 構文ハイライトが遅いならば
遅いコンピュータを使っているなら、これらの値を減らすとよいかもしれない
:syn sync maxlines=200
:syn sync minlines=50
(特に後者を)。速いコンピュータを使っているならこれらの値を増やしてもよい。これ:syn sync minlines=50
らは第一にシンクロナイズ(つまり、画面最上行のテキストがどのグループに入るか)に
影響を与える。
構文による折り畳みによって遅くなる場合もある。回避方法については
tex-folding を参照のこと。
g:tex_fast
最後に、もし構文強調表示がまだ遅い場合は、.vimrc で次のように設定するとよい
:let g:tex_fast= ""
g:tex_fast 変数を設定すると、構文強調表示でリージョンや同期が定義されなくな
る。それによって構文強調表示が速くなる。ただし、豊富な強調表示、構文ベースの折
り畳み、構文ベースのエラーチェックはできなくなる。
特定の構文のみを有効化することもできる。次の一覧の中から有効化したい構文強調表
示を選ぶことができる:
b : ボールド、イタリックを許可
c : texComment を許可
m : texMatcher を許可 (例: {...} と [...])
M : texMath を許可
p : 部 (parts)、章 (chapter)、節 (section) などを許可
r : texRefZone を許可 (nocite, bibliography, label, pageref, eqref)
s : superscript/subscript リージョンを許可
S : texStyle を許可
v : verbatim を許可
V : texNewEnv と texNewCmd を許可
c : texComment を許可
m : texMatcher を許可 (例: {...} と [...])
M : texMath を許可
p : 部 (parts)、章 (chapter)、節 (section) などを許可
r : texRefZone を許可 (nocite, bibliography, label, pageref, eqref)
s : superscript/subscript リージョンを許可
S : texStyle を許可
v : verbatim を許可
V : texNewEnv と texNewCmd を許可
例えば、let g:tex_fast= "M" は 数学関連の強調表示を有効化する。他のリージョン
ベースの構文強調表示は有効化されない。
(g:tex_conceal と tex-supersub も参照)
tex-morecommands tex-package
Tex: もっとコマンドをハイライトさせるには
LaTeXはプログラミング言語であり、特殊化されたLaTeXのコマンド、構文、フォントが
つまったパッケージがたくさんある。そのようなパッケージを使っている人は、標準の
syntax/tex.vimにそのパッケージを対応させてほしいと思うだろう。しかしそれは明ら
かに非現実的である。そこで、mysyntaxfile-addで使われているテクニックを使っ
て、syntax/tex.vimで提供されているハイライトを拡張・修正してみてください。拡張
(典型的には $HOME/after/syntax/tex/[pkgname].vim に置いて使う) を書いたら、そ
れを http://vim.sf.net/ にアップロードすることを検討してみてください。
私のウェブサイトで様々な人気パッケージのいくつかのサポートを含めた:
そこにある構文ファイルを、あなたの .../after/syntax/tex/ ディレクトリに入れる
といい。
tex-error g:tex_no_error
Tex: エラーのハイライトが行き過ぎならば
<tex.vim>は様々な種類のレキシカルエラーチェックをサポートしている。すなわち、
エラーチェックはとても便利だが、実際にはエラーでない箇所もエラーと示すかもしれ
ない。それが嫌なら、次の行を<.vimrc>に置くとよい:
let g:tex_no_error=1
すると<syntax/tex.vim>によるすべてのエラーチェックが行われなくなる。tex-math
Tex: 新しいMathグループが必要ならば
新しいmathグループをLaTeXに含めるには、以下のコードがその例となるだろう:
call TexNewMathZone(sfx,mathzone,starform)
新しいmathグループに一意な接尾辞をつけたいと思うだろう(現在のところ、AからLまでとVからZまでは<syntax/tex.vim>自身によって取得されている)。
例として、<syntax/tex.vim>でeqnarrayがどのように設定されているかを見てみよ
う:
call TexNewMathZone("D","eqnarray",1)
"mathzone" をあなたが作ったmathグループの名前に変える必要がある。また、それが呼ばれるようにするために.vim/after/syntax/tex.vimに書くこと。
変数 "starform" が真ならば、あなたが作ったmathグループがアスタリスクつきの形を
もつことを意味する(例. eqnarray*)。
tex-style b:tex_stylish
Tex: 新しいスタイルを始めるには
*.tex ファイルで "\makeatletter" を使用すると、"@" を含むコマンドを使用できる
ようになる。しかしながら、*.tex ファイルは sty cls clo dtx ltx のいずれかの接
尾辞ではないため、構文の強調表示によって @ の使用箇所がエラーとして表示される。
これを解決するには:
:let b:tex_stylish = 1
:set ft=tex
:set ft=tex
"let g:tex_stylish=1" を<.vimrc>に書くと<syntax/tex.vim>は常にこのような @ の
使用法を受け入れるようになる。
tex-cchar tex-cole tex-conceal
Tex: Conceal モードを活用する
'conceallevel' が 2 に設定され、エンコーディングとして utf-8 が使われていると
き、さまざまな文字シーケンスがそれに対応した utf-8 グリフとして表示される。対
応している文字としてはアクセント付き文字、Math ゾーンの中のギリシャ文字、Math
ゾーンの中の上付き記号と下付き記号などがある。すべての上付き記号と下付き記号を
表示できるわけではない。utf-8 がサポートしている範囲でのみ利用可能である。実際
のところ、サポートされている下付き記号は少ししかない。
使用例としては、ウィンドウを垂直分割して (CTRL-W_v 参照)、一つのウィンドウは
'conceallevel' を 0 に設定してもう一方は 2 に設定し、両方で 'scrollbind'
を設定するような使い方がある。
g:tex_conceal
Tex: Conceal モードの選択
g:tex_conceal を <.vimrc> で設定することで Conceal モードの表示を変更できる。
デフォルトでは、g:tex_conceal には "admgs" が設定されており、これによって次の
文字セットが Conceal 表示される:
a = アクセント/合字 (accents/ligatures)
b = 太字と斜体 (bold and italic)
d = 区切り記号 (delimiters)
m = 数学記号 (math symbols)
g = ギリシャ文字 (Greek)
s = 上付き記号/下付き記号 (superscripts/subscripts)
b = 太字と斜体 (bold and italic)
d = 区切り記号 (delimiters)
m = 数学記号 (math symbols)
g = ギリシャ文字 (Greek)
s = 上付き記号/下付き記号 (superscripts/subscripts)
これらの文字を設定から外すことで、それに関連した文字が Conceal 表示されなくな
る。
g:tex_isk g:tex_stylish
Tex: iskeyword を制御する
通常、LaTeX キーワードは 0-9、a-z、A-z、192-255 のみがサポートされる。Latex
キーワードはアンダースコアをサポートしない (*.sty ファイルを除く)。構文強調表
示スクリプトは次の手順でそれを判断する:
* g:tex_stylish が存在して値が 1 なら
ファイルは "sty" ファイルとして扱われる。"_" はキーワードの一
部として認識される。
(g:tex_isk に左右されない)
* または、ファイル名の末尾は sty, cls, clo, dtx, ltx なら
ファイルは "sty" ファイルとして扱われる。"_" はキーワードの一
部として認識される。
(g:tex_isk に左右されない)
* g:tex_isk が存在するなら、'iskeyword' のローカル値として使用される。
* 存在しない場合、'iskeyword' のローカル値として 48-57,a-z,A-Z,192-255
が設定される。
tex-supersub g:tex_superscripts g:tex_subscripts
Tex: 下付き記号と上付き記号を制御する
Conceal による文字の代替表示を有効にするには tex-conceal を参照。
g:tex_conceal を設定することでアクセント、太字/斜体、数学記号、ギリ
シャ文字、上付き記号/下付き記号のどれを Conceal 表示するかを選択でき
る。
どの上付き記号/下付き記号を構文に基づいて Conceal 表示 (:syn-cchar
参照) するかを制御できる。すべてのフォントがすべての文字をサポートして
いるわけではないので、Conceal 表示する文字を変更できるようになってい
る。デフォルトでは次のように設定されている:
let g:tex_superscripts= "[0-9a-zA-W.,:;+-<>/()=]"
let g:tex_subscripts= "[0-9aehijklmnoprstuvx,+-/().]"
let g:tex_subscripts= "[0-9aehijklmnoprstuvx,+-/().]"
例えば、私は Luxi Mono Bold を使っているが、これは "hklmnpst" に対する
下付き記号をサポートしていない。そこで私は
let g:tex_subscripts= "[0-9aeijoruvx,+-/().]"
この設定を ~/.vim/ftplugin/tex/tex.vim に書いて、utf-8 の謎グリフが表示されないようにしている。
tex-matchcheck g:tex_matchcheck
Tex: 一致のチェックの制御
実際には時として、かっこ、角かっこ、中かっこが一致しないことが必要な場
合があり; 例えば、\text{(1,10]} は範囲の開始に1を含まず10を含む。
この要望はもちろん、区切りの不一致を検知したいという要望と衝突する。
この衝突の調整のゴールを、syntax/tex.vim が提供する
g:tex_matchcheck = '[({[]'
これはデフォルトの設定に従っていることを示す。そして [] と () の不一致をチェックさせるなら、次のようにする
let g:tex_matchcheck= '[{}]'
太字やイタリック体の範囲内で一致チェックを望まないなら、 let g:tex_excludematcher= 1
という設定で範囲に含まれる texMatcher グループの開始を抑制する。TF tf.vim ft-tf-syntax
tfの構文ハイライトには1つのオプションがある。
シンクロナイズについて、minlinesのデフォルトは100になっている。この値を変える
には、"tf_minlines" に望みの値をセットする。例:
:let tf_minlines = your choice
TYPESCRIPT typescript.vim ft-typescript-syntax
typescriptreact.vim ft-typescriptreact-syntax
TypeScript 構文のハイライトを制御する 1 つのオプションがある。
g:typescript_host_keyword
この変数を 1 に設定すると、addEventListener などのホスト固有の API がハイラ
イトされる。無効にするには、.vimrc で 0 に設定する:
let g:typescript_host_keyword = 0
デフォルト値は 1 である。
TYPST ft-typst-syntax
g:typst_embedded_languages
Typst ファイルでは、g:typst_embedded_languages 変数を設定することで、他の言
語の構文強調表示を埋め込むことができる。この変数は、構文定義が Typst ファイル
に含まれる言語名のリストである。例:
let g:typst_embedded_languages = ['python', 'r']
VIM vim.vim ft-vim-syntax
g:vimsyn_minlines g:vimsyn_maxlines
正確な構文ハイライトと画面更新速度はトレードオフの問題である。正確さを向上させ
るには、変数 g:vimsyn_minlines の値を大きくすればよい。g:vimsyn_maxlines も画
面更新頻度を高めるのに使える(これについては:syn-syncを参照)。
g:vimsyn_minlines : シンクロナイズの最小行数を指定する
g:vimsyn_maxlines : シンクロナイズの最大行数を指定する
g:vimsyn_maxlines : シンクロナイズの最大行数を指定する
(g:vim_minlines と g:vim_maxlines はこれらのオプションの以前の名前であ
る)
g:vimsyn_embed
g:vimsyn_embed オプションは、どの外部スクリプト言語の埋め込みに対応するかを指
定する。
g:vimsyn_embed == 0 : どのスクリプトの埋め込みも対応しない
g:vimsyn_embed =~ 'l' : 埋め込み Lua をサポート
g:vimsyn_embed =~ 'm' : 埋め込み MzScheme をサポート
g:vimsyn_embed =~ 'p' : 埋め込み Perl をサポート
g:vimsyn_embed =~ 'P' : 埋め込み Python をサポート
g:vimsyn_embed =~ 'r' : 埋め込み Ruby をサポート
g:vimsyn_embed =~ 't' : 埋め込み Tcl をサポート
g:vimsyn_embed =~ 'l' : 埋め込み Lua をサポート
g:vimsyn_embed =~ 'm' : 埋め込み MzScheme をサポート
g:vimsyn_embed =~ 'p' : 埋め込み Perl をサポート
g:vimsyn_embed =~ 'P' : 埋め込み Python をサポート
g:vimsyn_embed =~ 'r' : 埋め込み Ruby をサポート
g:vimsyn_embed =~ 't' : 埋め込み Tcl をサポート
デフォルトでは、g:vimsyn_embed には Vim がサポートしている言語が設定される。指
定された文字を連結して、複数のタイプの埋め込みインタープリタをサポートする (例
えば、g:vimsyn_embed = "mp" は、埋め込み mzscheme と埋め込み perl をサポートす
る)。
g:vimsyn_folding
'foldmethod' が "syntax" に設定されている場合、一部の折り畳みがサポートされる
ようになった:
g:vimsyn_folding == 0 または変数が存在しない: 構文ベースの折り畳みはしない
g:vimsyn_folding =~ 'a' : augroups を折り畳む
g:vimsyn_folding =~ 'c' : Vim9 クラスを折り畳む
g:vimsyn_folding =~ 'e' : Vim9 列挙型を折り畳む
g:vimsyn_folding =~ 'f' : 関数を折り畳む
g:vimsyn_folding =~ 'h' : heredoc を折り畳む
g:vimsyn_folding =~ 'i' : Vim9 インターフェイスを折り畳む
g:vimsyn_folding =~ 'H' : Vim9 の旧来のヘッダーを折り畳む
g:vimsyn_folding =~ 'l' : Lua スクリプトを折り畳む
g:vimsyn_folding =~ 'm' : MzScheme スクリプトを折り畳む
g:vimsyn_folding =~ 'p' : Perl スクリプトを折り畳む
g:vimsyn_folding =~ 'P' : Python スクリプトを折り畳む
g:vimsyn_folding =~ 'r' : Ruby スクリプトを折り畳む
g:vimsyn_folding =~ 't' : Tcl スクリプトを折り畳む
g:vimsyn_folding =~ 'a' : augroups を折り畳む
g:vimsyn_folding =~ 'c' : Vim9 クラスを折り畳む
g:vimsyn_folding =~ 'e' : Vim9 列挙型を折り畳む
g:vimsyn_folding =~ 'f' : 関数を折り畳む
g:vimsyn_folding =~ 'h' : heredoc を折り畳む
g:vimsyn_folding =~ 'i' : Vim9 インターフェイスを折り畳む
g:vimsyn_folding =~ 'H' : Vim9 の旧来のヘッダーを折り畳む
g:vimsyn_folding =~ 'l' : Lua スクリプトを折り畳む
g:vimsyn_folding =~ 'm' : MzScheme スクリプトを折り畳む
g:vimsyn_folding =~ 'p' : Perl スクリプトを折り畳む
g:vimsyn_folding =~ 'P' : Python スクリプトを折り畳む
g:vimsyn_folding =~ 'r' : Ruby スクリプトを折り畳む
g:vimsyn_folding =~ 't' : Tcl スクリプトを折り畳む
デフォルトでは、g:vimsyn_folding は設定されていない。複数の構文構造の折りたた
みをサポートするには、指定する文字を連結する (例えば、g:vimsyn_folding = "fh"
は、関数とヒアドキュメントの両方の折り畳みを有効にする)。
g:vimsyn_comment_strings
デフォルトでは、コメント内の文字列はハイライトされる。これは、
g:vimsyn_comment_strings を false に設定することで無効にできる。
g:vimsyn_noerror
syntax/vim.vimによるエラーのハイライトは必ずしも正しいとは限らない。Vim script
は正しくハイライトするのが難しい言語である。エラーのハイライトをやめるには次
をvimrcに書けばよい:
let g:vimsyn_noerror = 1
WDL wdl.vim wdl-syntax
ワークフロー記述言語は、人間が読み書きできる構文でデータ処理ワークフローを指定
する方法である。これはバイオインフォマティクスでよく使われる。仕様詳細について
は、以下を参照。
https://github.com/openwdl/wdl
XF86CONFIG xf86conf.vim ft-xf86conf-syntax
XF86Configファイルの構文はXFree86 v3.xとv4.xで異なっている。両方のバージョンが
サポートされている。自動的に判定がされるが、完全からはほど遠い。手動でバージョ
ンを設定する必要があるかもしれない。使用しているXFree86に応じて、.vimrc中で変
数xf86conf_xfree86_versionを3または4にセットすること。例:
:let xf86conf_xfree86_version=3
複数のバージョンが混在しているときには変数b:xf86conf_xfree86_versionをセットすること。
Note オプション名の中のスペースとアンダースコアはハイライトされない。オプショ
ン名をハイライトさせるには "__s yn con gr_e_e_n" でなく "SyncOnGreen" と書くこ
と。
XML xml.vim ft-xml-syntax
Xml名前空間がデフォルトでハイライトされる。次のグローバル変数をセットするとそ
れが無効化される:
:let g:xml_namespace_transparent=1
xml-folding
xml構文ファイルを使うと、開始タグと終了タグの間を折りたたむfoldingことができ
る(:syn-foldを参照)。これをオンにするには
:let g:xml_syntax_folding = 1
:set foldmethod=syntax
:set foldmethod=syntax
とする。
Note: 構文による折り畳みは、構文ハイライトを著しく遅くする可能性がある。特に巨
大なファイルではそうである。
X Pixmaps (XPM) xpm.vim ft-xpm-syntax
xpm.vimは編集中のXPMファイルの内容から、動的に構文要素を生成する。そのため、色
設定文字列などを変更したときは ":set syn=xpm" などとしてxpm.vimを読み直さなけ
ればならない。
色つきのピクセルをコピーするには "yl" で "pixel" をヤンクし、どこかで "P" とし
てそれを挿入する。
マウスで図を描くには、次のようにしてみるとよい:
:function! GetPixel()
: let c = getline(".")[col(".") - 1]
: echo c
: exe "noremap <LeftMouse> <LeftMouse>r" .. c
: exe "noremap <LeftDrag> <LeftMouse>r" .. c
:endfunction
:noremap <RightMouse> <LeftMouse>:call GetPixel()<CR>
:set guicursor=n:hor20 " to see the color beneath the cursor
これを行うと、右ボタンがピペットになり、左ボタンがペンになる。これは1ピクセル: let c = getline(".")[col(".") - 1]
: echo c
: exe "noremap <LeftMouse> <LeftMouse>r" .. c
: exe "noremap <LeftDrag> <LeftMouse>r" .. c
:endfunction
:noremap <RightMouse> <LeftMouse>:call GetPixel()<CR>
:set guicursor=n:hor20 " to see the color beneath the cursor
につき1文字だけとなっているXPMファイルでうまく機能する。ピクセル文字列の外をク
リックしてはならない。これを自由に改良してください。
セルサイズが正方形のフォントを使うと見栄えがよくなる。Xの場合の例:
:set guifont=-*-clean-medium-r-*-*-8-*-*-*-*-80-*
YAML yaml.vim ft-yaml-syntax
g:yaml_schema b:yaml_schema
YAML スキーマとはタグのコンビネーションと、特定されないタグを解決する為のメカ
ニズムである。ユーザーにとってはこれはプレーンなスカラーのコンテンツに依存して
その簡素なスカラー(実際は文字列もしくはそれ以外の何か)をそれぞれ異なる値として
扱う YAML パーサーを意味しているかもしれない: null, boolean, floating-point,
integer. g:yaml_schema オプションは特別にハイライトさせるスキーマの値を特定
する為のオプション。サポートしているスキーマは
Schema Description
failsafe 追加されるハイライトはない。
json JSON スタイルの number や boolean, null をサポートする。
core number や boolean、null をよりサポートする。
pyyaml timestamp のハイライトをサポートをコアスキーマに追加するが、
number がどの様に認識されるか、boolean 型として認識する為に多
くの値が追加されたという点で幾らか違いがある。
デフォルトのスキーマは core。
実際にはスキーマは、プレーンなスカラーに限定されるものではない、これが YAML 仕
様の定義に存在する唯一の違いであり、唯一異なるシンタックスが定義されているとい
う点を注意しておく。
ZSH zsh.vim ft-zsh-syntax
この zsh のための構文スクリプトは、構文に基づく折り畳みを可能にする:
:let g:zsh_fold_enable = 1
==============================================================================
6. 構文を定義する :syn-define E410
構文アイテムには3つのタイプがある。
1. キーワード (Keyword)
キーワード文字は、:syn-iskeyword または 'iskeyword' オプションで指定され
た文字に従ってのみ含むことができる。他の構文項目を含むことはできない。完全
な単語でのみマッチする (マッチの前後にキーワード文字がない)。キーワード
"if" は、"if(a=b)" ではマッチするが、"ifdef x" ではマッチしない。"(" はキー
ワード文字ではなく、"d" はキーワード文字だからである。
2. マッチ (Match)
単一の正規表現パターンにマッチする。
3. リージョン (Region)
正規表現パターン "start" のマッチ位置から始まり、正規表現パターン "end" の
マッチ位置で終わる。その間にどんなテキストがあってもよい。正規表現パターン
"skip" を使うとパターン "end" にマッチするのを避けることができる。
複数の構文アイテムを1つの構文グループに入れることができる。構文グループにはハ
イライト属性を与えることができる。例えば、"/* .. */" のコメントを定義する要素
と "// .." のコメントを定義する要素を作り、両方を "Comment" グループに入れる。
そして "Comment" を青のボールドフォントで表示するように指定すると、両方のタイ
プのコメントに対して同じハイライトがされるようになる。1つの構文要素に対し1つの
構文グループを作ってもよいし、すべての要素を1つのグループに入れてもよい。これ
はハイライト属性をどう指定したいかによる。各要素をそれ自身のグループに入れると
すると、たくさんのグループに対して色を指定しなければならなくなる。
構文グループとハイライトグループは似ているが異なることに注意。ハイライトグルー
プに対してはハイライト属性を与えることになる。それらの属性が同名の構文グループ
に対して適用される。
同じ箇所に対して複数のアイテムがマッチした場合には、最後に定義されたものが有効
になる。よって同じテキストにマッチする要素を使って、以前に定義された構文アイテ
ムを上書きすることができる。大文字・小文字の違いも含めてマッチするキーワードが
ある場合は、そうでないものより優先される。
優先順位 :syn-priority
複数の構文アイテムがマッチするときは、以下のルールが適用される:
1. 複数のマッチまたはリージョンアイテムが同じ場所で始まるときは、後に定義され
たものが優先される。
2. マッチとリージョンよりキーワードが優先される。
3. より前の位置から始まる要素が優先される。
大文字・小文字の区別 :syn-case E390
:sy[ntax] case [match | ignore]
これ以降の ":syntax" コマンドが大文字・小文字を区別するかどうかを定義
する。"match" を使うと区別し、"ignore" を使うと区別しなくなる。これ以
前の要素には影響せず、次の ":syntax case" コマンドまでのすべての要素に
影響する。
:sy[ntax] case
"syntax case match" または "syntax case ignore" を表示する。
折り畳みレベルの定義 :syn-foldlevel
:sy[ntax] foldlevel start
:sy[ntax] foldlevel minimum
foldmethod=syntax 利用時での行の折り畳みレベル算出の方法を定義する
(fold-syntax と :syn-fold を参照):
start: 行の先頭を含むアイテムのレベルを使う。
minimum: 行の項目の最小の局所レベルの最低値を使う。
デフォルトは "start"。"minimum" を使うと行内でより高いレベルに包括され
ている最低レベルを水平方向に探す。これにより、構文アイテムが行内で水平
方向に開閉する場合に、より自然な折りたたみが生成される。
:sy[ntax] foldlevel
現在の折り畳みレベルを表示する方法、"syntax foldlevel start" もしくは
"syntax foldlevel minimum" を表示する。
{+folding機能なしでコンパイルされた場合は意味を持たない}
スペルチェック :syn-spell
:sy[ntax] spell toplevel
:sy[ntax] spell notoplevel
:sy[ntax] spell default
構文アイテムに入っていないテキストに対して、どこでスペルチェック
を行うかを定義する:
toplevel: テキストのスペルチェックを行う。
notoplevel: テキストのスペルチェックを行わない。
default: クラスタ@Spellがあるときスペルチェックを行わない。
構文アイテムに入っているテキストはクラスタ@Spellと@NoSpellを使う
spell-syntax。クラスタ@Spellと@NoSpellがないときは、スペルチェックは
"default" と "toplevel" に対して行われる。
スペルチェックを有効化するにはオプション 'spell' をオンにしなければな
らない。
:sy[ntax] spell
現在の構文でのスペルチェックの方法、"syntax spell toplevel", "syntax
spell notoplevel" または "syntax spell default" を表示する。
構文の iskeyword 設定 :syn-iskeyword
:sy[ntax] iskeyword [clear | {option}]
キーワード文字を定義する。'iskeyword' オプションに似ているがシン
タックスハイライトのみに適用される。
clear: シンタックス固有の iskeyword の設定を無効にし、
バッファローカルの 'iskeyword' 設定を有効にする。
{option} シンタックスの 'iskeyword' オプション値を設定する。
例:
:syntax iskeyword @,48-57,192-255,$,_
これは全てのアルファベットと数字、アクセント付き文字、および "_" と
"$" をシンタック固有の iskeyword オプションに設定する。
引数を指定しない場合は現在の値を表示する。
このオプションを設定するとシンタックスパターン内での /\k のマッチや
:syn-keyword が新しいマッチをチェックする際のデリミタに影響する。
シンタックスファイルを書く際はこのコマンドを使って言語固有の文法に対す
る正しい値を設定し 'iskeyword' を変更しない事が推奨されている。
キーワードの定義 :syn-keyword
:sy[ntax] keyword {group-name} [{options}] {keyword} .. [{options}]
キーワードを定義する。
{group-name} "Comment" のような構文グループ名。
[{options}] 後述の:syn-argumentsを参照。
{keyword} .. このグループに含めるキーワードのリスト。
例:
:syntax keyword Type int long char
{options}は行のどこに置いてもよい。それらは与えられたキーワード全てに
適用される。オプションがキーワードの後にあっても同じ。以下の例はまった
く同じ意味になる:
:syntax keyword Type contained int long char
:syntax keyword Type int long contained char
:syntax keyword Type int long char contained
E789 E890:syntax keyword Type int long contained char
:syntax keyword Type int long char contained
Vimのexコマンドのようにキーワードに短縮形があるとき、省略可能な部分を
[] でくくることによって受け入れるキーワードをいっぺんに定義することが
できる:
:syntax keyword vimCommand ab[breviate] n[ext]
キーワードは、その文字全てがオプション 'iskeyword' に含まれていないと
認識されないことに注意。1文字でも含まれていないものがあると、そのキー
ワードは認識されない。
マルチバイト文字を使うこともできる。マルチバイト文字は 'iskeyword' に
含まれている必要はない。
シンタックス特有の iskeyword 設定については:syn-iskeywordを参照。
キーワードは常にマッチやリージョンより優先される。キーワードは一要素以
上マッチしたとき使われる。キーワードは入れ子にならなく、それ以外のもの
を含むこともできない。
オプション名と同じ単語は、それがその位置で利用できないものであったとし
ても、キーワードとして定義することはできない。マッチで代用すること。
キーワードの長さは最大80文字である。
containmentが異なれば、同じキーワードを複数回定義することができる。例
えば、まずキーワードをcontainedでなく定義して1つのハイライトグループを
設定し、次にcontainedとして定義して別のハイライトグループを設定するこ
とができる。例:
:syn keyword vimCommand tag
:syn keyword vimSetting contained tag
構文要素の外側に "tag" があったときはハイライトグループ "vimCommand":syn keyword vimSetting contained tag
が適用される。"vimSetting" を含む構文要素の中に "tag" があったとき
は "vimSetting" グループが適用される。
マッチの定義 :syn-match
:sy[ntax] match {group-name} [{options}]
[excludenl]
[keepend]
{pattern}
[{options}]
マッチを定義する。
{group-name} "Comment" のような構文グループ名。
[{options}] 後述の:syn-argumentsを参照。
[excludenl] 行末の "$" を含んでいるパターンに対して、行末
以降までマッチやリージョンを拡張しないようにす
る。パターンの前に置かなければならない。
:syn-excludenl
keepend 内包されたマッチが終了パターンを越えないように
する。:syn-keependを参照。
{pattern} マッチを定義する検索パターン。
後述の:syn-patternを参照。
パターンは複数行にもマッチする。よって検索を開
始する場所によってマッチが変わってくる可能性が
ある。シンクロナイズが関係してくることに注意。
例 (文字定数にマッチする):
:syntax match Character /'.'/hs=s+1,he=e-1
リージョンの定義 :syn-region :syn-start :syn-skip :syn-end
E398 E399
:sy[ntax] region {group-name} [{options}]
[matchgroup={group-name}]
[keepend]
[extend]
[excludenl]
start={start-pattern} ..
[skip={skip-pattern}]
end={end-pattern} ..
[{options}]
リージョンを定義する。複数行にわたってもよい。
{group-name} "Comment" のような構文グループ名。
[{options}] 後述の:syn-argumentsを参照。
[matchgroup={group-name}] 以下の開始パターンと終了パターンのマッチに
のみ使われる構文グループ。マッチの開始パターン
と終了パターンの間のテキストには使われない。開
始パターンと終了パターン用に異なるグループを使
わないようにリセットするにはNONEを使う。
:syn-matchgroupを参照。
keepend 内包されたマッチが終了パターンを越えないように
する。:syn-keependを参照。
extend このリージョンを含むアイテムの "keepend" を上
書きする。:syn-extendを参照。
excludenl 行末の "$" を含んでいるパターンに対して、行末
以降までマッチやアイテムを拡張しないようにす
る。終了パターンに対してのみ使い道がある。適用
するパターンの前に置かねばならない。
:syn-excludenl
start={start-pattern} リージョンの開始を定義する検索パターン。後述の
:syn-patternを参照。
skip={skip-pattern} その中ではリージョンの終了を探さないテキストを
定義する検索パターン。:syn-patternを参照。
end={end-pattern} リージョンの終了を定義する検索パターン。
後述の:syn-patternを参照。
例:
:syntax region String start=+"+ skip=+\\"+ end=+"+
start/skip/endパターンとオプションはどんな順序で書いてもよい。skip
パターンは0個か1個許される。startとendパターンは1個以上なければならな
い。つまりskipパターンは省略できるが、少なくとも1つのstartとendパター
ンを書かなければならない。等号記号の前後にはホワイトスペースがあっても
よい(たいていはホワイトスペースがないほうが見やすいが)。
2個以上のstartパターンが与えられたときは、それらの1つがマッチすれば十
分である。つまりstartパターンらの間にはOR関係があることになる。最後に
マッチしたものが使われる。endパターンについても同じである。
endパターンの検索はstartパターンの直後から行われる。これはendパターン
のマッチとstartパターンは決して重ならないことを意味する。
skipとendパターンは改行をまたいでマッチしてもよい。しかしパターンの検
索はどの行からも始まりうるので、望みどおりにならないこともある。
skipパターンは次の行のendパターンのマッチを回避しない。問題を避けるに
は単一行のパターンを使うこと。
Note: リージョンの開始は、startパターンのマッチによってのみ決まる。
endパターンの照合のチェックはされない。次のは機能しない:
:syn region First start="(" end=":"
:syn region Second start="(" end=";"
Secondは常にFirstより前にマッチする(最後に定義されたパターンが優先さ:syn region Second start="(" end=";"
れる)。こうすると、その前に ':' があるかどうかにかかわらず、Secondの
リージョンが次の ';' まで続く。マッチを使うとうまくいく:
:syn match First "(\_.\{-}:"
:syn match Second "(\_.\{-};"
このパターンは "\_." によって任意の文字と改行にマッチし、"\{-}" によっ:syn match Second "(\_.\{-};"
て繰り返しにマッチする(最小限の個数の繰り返し)。
:syn-keepend
デフォルトでは内包されたマッチはendパターンのマッチを隠す。これはネス
ト用に便利である。例えば、"{" で始まり "}" で終わるリージョンがもう1つ
のリージョンを含むことができる。"}" に出会うと内包されたリージョンが終
わり、外側のリージョンは終了しない:
{ 外側の "{}" リージョンの開始
{ 内包された "{}" リージョンの開始
} 内包された "{}" リージョンの終了
} 外側の "{}" リージョンの終了
この挙動が望みでないなら、引数 "keepend" をつければ、外側のリージョン
のendパターンのマッチによって内包されたアイテムも終了させることができ
る。そうすると同一リージョンのネストが不可能になるが、内包されたアイテ
ムでendパターンをスキップさせることなく、endパターンの一部をハイライト
することができる。例:
:syn match vimComment +"[^"]\+$+
:syn region vimCommand start="set" end="$" contains=vimComment keepend
"keepend" によってvimCommandが常に行末で終わるようにしている。たとえ内:syn region vimCommand start="set" end="$" contains=vimComment keepend
包されたvimCommentが<EOL>とのマッチを含んでいてもそのようになる。
"keepend" が使われないときは、内包されたマッチの後でendパターンのマッ
チが検索される。"keepend" が含まれているときは最初にendパターンにマッ
チしたところで終了し、内包されたマッチもすべてそこで終了になる。
:syn-extend
引数 "extend" を使うと "keepend" の挙動が変わる。"keepend" 付きのアイ
テム中に "extend" 付きのアイテムが内包されていると、"keepend" が無視さ
れ、外側のリージョンが拡張される。これによっていくつかのアイテムに対し
て例外的にリージョンを拡張させるようにできる。例:
:syn region htmlRef start=+<a>+ end=+</a>+ keepend contains=htmlItem,htmlScript
:syn match htmlItem +<[^>]*>+ contained
:syn region htmlScript start=+<script+ end=+</script[^>]*>+ contained extend
:syn match htmlItem +<[^>]*>+ contained
:syn region htmlScript start=+<script+ end=+</script[^>]*>+ contained extend
この例では、htmlItemの位置でhtmlRefが終了する。htmlItemは<>要素をハイ
ライトするためだけに使われる。htmlScriptアイテムはhtmlRefアイテムを拡
張する。
もう1つの例:
:syn region xmlFold start="<a>" end="</a>" fold transparent keepend extend
"</a>" を別の色でハイライトしたいときなどのために、"keepend" つきでリージョンを定義し、内包するアイテムによって終端が変更されないようにしてい
る。ただしxmlFoldがネストしたとき(それ自身を含んだとき)、"extend" が適
用され、内側の "</a>" はそのリージョン自身だけを終了させ、それを含んで
いるリージョンは終了しない。
:syn-excludenl
マッチ用のパターンやリージョンの終了パターンが行末にマッチさせるために
'$' を含んでいると、それを含むリージョンアイテムが次の行まで継続するよ
うになる。例えば、"\\$" (行末のバックスラッシュ)とのマッチを使うと、通
常は行末で終了するはずのリージョンを継続させることができる。これはデ
フォルトの挙動である。これが望みどおりでないなら、これをされる2つの方
法がある:
1. 外側のアイテムに "keepend" を使う。こうすると含んでいるアイテム全て
に対して拡張しないようにする。含んでいるアイテム全てが外側のアイテム
を拡張してはならないときに使える。
2. 内側のアイテムに "excludenl" を使う。こうするとそのマッチに対して、
それを含んでいるマッチやリージョンを拡張しないようにする。これはい
くつかのアイテムだけが外側のアイテムを拡張してはならないときに使え
る。"excludenl" はそれを適用するパターンの前に置かねばならない。
:syn-matchgroup
"matchgroup" は、リージョンの本体とその開始・終了パターンに対して異な
るハイライトをしたいときに使える。例:
:syntax region String matchgroup=Quote start=+"+ skip=+\\"+ end=+"+
こうすると引用符を "Quote" グループでハイライトし、その間にあるテキストを "String" グループでハイライトすることができる。
"matchgroup" は次の "matchgroup" が現れるまでその後に続くすべての開
始・終了パターンに対して使われる。matchgroup を使わないように戻すには
"matchgroup=NONE" を使う。
開始・終了パターンが "matchgroup" でハイライトされるとき、そのリージョ
ンに含まれているアイテムは無視される。これによって含まれているアイテム
が開始・終了パターンにマッチするのを避けることができる。"transparent"
を使っている場合、これは "matchgroup" でハイライトされる開始・終了パ
ターンのマッチ部分には適用されない。
次の例は、3段階の括弧を異なる色でハイライトする例である:
:sy region par1 matchgroup=par1 start=/(/ end=/)/ contains=par2
:sy region par2 matchgroup=par2 start=/(/ end=/)/ contains=par3 contained
:sy region par3 matchgroup=par3 start=/(/ end=/)/ contains=par1 contained
:hi par1 ctermfg=red guifg=red
:hi par2 ctermfg=blue guifg=blue
:hi par3 ctermfg=darkgreen guifg=darkgreen
:sy region par2 matchgroup=par2 start=/(/ end=/)/ contains=par3 contained
:sy region par3 matchgroup=par3 start=/(/ end=/)/ contains=par1 contained
:hi par1 ctermfg=red guifg=red
:hi par2 ctermfg=blue guifg=blue
:hi par3 ctermfg=darkgreen guifg=darkgreen
E849
構文グループの最大数は 19999 である。
==============================================================================
7. :syntaxの引数 :syn-arguments
構文アイテムを定義する :syntax コマンドにはたくさんの引数がある。
ここでは共通のものを説明する。引数はどんな順序でもよく、パターンと混ざっていて
もよい。
全てのコマンドが全ての引数を受けいれるわけではない。次の表はどの引数がどのコマ
ンドに対して利用可能かを示している:
E395
contains oneline fold display extend concealends
:syntax keyword - - - - - -
:syntax match yes - yes yes yes -
:syntax region yes yes yes yes yes yes
以下の引数は3つのコマンド全てに対して使える:
conceal
cchar
contained
containedin
nextgroup
transparent
skipwhite
skipnl
skipempty
conceal conceal :syn-conceal
{訳注: conceal = 隠す、秘密にする}
"conceal" 引数が指定されると、そのアイテムは Conceal 可能になる。アイテムが実
際に Conceal 表示されるかどうかは 'conceallevel' オプションの設定に依存する。
現在行のアイテムを Conceal 表示するかどうかは 'concealcursor' オプションで制御
できる (行の編集を妨げないようにするため)。
テキストを隠す別の方法は matchadd() を使用することだが、内部的には少し異なる
動作をする。syntax-vs-match
concealends :syn-concealends
"concealends" 引数が指定されると、リージョンの開始部分と終了部分が Conceal 可
能になる (リージョンの中身はならない)。アイテムが実際に Conceal 表示されるかど
うかは 'conceallevel' の設定に依存する。"matchgroup" で別のハイライトを設定す
ることでリージョンの終了部分だけを別に Conceal 表示するということもできる。
synconcealed() 関数を使用すると、conceal された項目に関する情報を取得できる。
cchar :syn-cchar
E844
"cchar" 引数はアイテムが Conceal 表示されたときに実際に画面に表示される文字を
定義する ("cchar" は conceal 引数が指定されたときのみ意味を持つ)。
"cchar" が指定されていない場合はデフォルトの Conceal 文字として 'listchars' オ
プションが使われる。Tab 文字のようなコントロール文字は使用できない。例:
:syntax match Entity "&" conceal cchar=&
ハイライトについては hl-Conceal を参照のこと。contained :syn-contained
引数 "contained" が与えられると、そのアイテムはトップレベルでは認識されず、他
のマッチの "contains" フィールドで指定されたときのみ認識される。例:
:syntax keyword Todo TODO contained
:syntax match Comment "//.*" contains=Todo
:syntax match Comment "//.*" contains=Todo
display :syn-display
引数 "display" が与えられると、そのアイテムは検出されたハイライトが表示されな
い時にはスキップされる。こうすることで、表示されるべきテキストの構文状態だけを
検索するときにはこのアイテムはスキップされ、ハイライトが高速になる。
通常は、以下の条件に合うときマッチとリージョンに "display" を使うとよい:
- アイテムが行末を越えて継続しない。Cの例: "/*" コメント用のリージョンは
"display" を含んではならない。なぜなら次の行に継続するからである。
- アイテムが、行を越えて継続したり、そのコンテナを次行まで継続させる効果を持つ
子アイテムを含んでいない。
- それを含むどんなアイテムのサイズも変更しない。Cの例: プリプロセッサーマッチ
中の "\\$" とのマッチは "display" を含んではならない。なぜならこれによってプ
リプロセッサーマッチが短くなるかもしれないからである。
- 他のアイテムがマッチすることを許さず、そうでなければマッチせず、加えてマッチ
自体が非常に長くなるようなアイテム。
Cの例: "//" コメント用のマッチは "display" を使ってはならない。なぜならその
コメントの内側の "/*" がマッチするかも知れず、そうなると行末をまたぐコメント
が始まるからである。
例としてC言語では次のとき "display" が使える:
- 数字とのマッチ
- ラベルとのマッチ
transparent :syn-transparent
引数 "transparent" が与えられると、そのアイテムはそれ自身ではハイライトされず、
それを含むアイテムのハイライトを引き継ぐ。これはハイライトはせず、テキストの一
部をスキップするためだけに使われる構文アイテムに対して有効である。
transparentなアイテム自身に引数 "contains" が与えられていない場合、それを含む
アイテムから引数 "contains=" も受け継がれる。望まないアイテムが含まれるのを避
けるには "contains=NONE" とすること。文字列中の単語をハイライトするが、"vim"
だけは例外とする例:
:syn match myString /'[^']*'/ contains=myWord,myVim
:syn match myWord /\<[a-z]*\>/ contained
:syn match myVim /\<vim\>/ transparent contained contains=NONE
:hi link myString String
:hi link myWord Comment
"myVimが "myWord" の後に来ているので、"myVim" が優先される(同じ位置で複数のア:syn match myWord /\<[a-z]*\>/ contained
:syn match myVim /\<vim\>/ transparent contained contains=NONE
:hi link myString String
:hi link myWord Comment
イテムにマッチした場合、最後に定義されたものが前のものを上書きする)。
"transparent" により、"myVim" にマッチしたテキストは "myString" と同じハイライ
トになる。しかし "myVim" は何も含まない。もし "contains=NONE" を取り除くと、
"myVim" は "myString" から引数containsを受け継いで "myWord" を含むようになり、
テキスト "vim" はCommentとしてハイライトされる。これは、内包されたマッチは同じ
位置でそれ自身の内側でマッチしないためこうなる。つまり、ここではマッチ "myVim"
は、マッチ "myWord" を上書きしない。
色づけされたテキストは、内包されたアイテムの層のようにみなすことができる。内包
されたアイテムは内包しているアイテムより上にあり、そのため内包されたアイテムを
見ることができる。内包されたアイテムがtransparentな場合、それを透過して見るこ
とができ、よってそれを含んでいるアイテムが見える。図にすると:
ここから見る
| | | | | |
V V V V V V
xxxx yyy さらに内包されたアイテム達
.................... 内包されたアイテム (transparent)
============================= 最初のアイテム (最も外側のアイテム)
'x', 'y', '=' はハイライトされた構文アイテムを表す。'.' はtransparentなグルー
プを表している。
このとき次のように見える:
=======xxxx=======yyy========
つまりtransparentな "...." は透過して見える。
oneline :syn-oneline
引数 "oneline" をつけると、そのリージョンは行をまたがないという意味になる。つ
まり、現在行の中で完全にマッチしなければならない。しかし、そのリージョンが行を
またぐアイテムを内包している場合は次の行に継続する。内包されたアイテムによって
行継続パターンを認識することができる。しかしその場合でも "end" パターンは最初
の行内でマッチしなければならない。そうでないとリージョンは開始すらしない。
startパターンが行末にマッチする "\n" を含んでいるときは、startパターンの終了位
置と同じ行にendパターンがなければならない。endパターンも行末を含んでもよい。つ
まり引数 "oneline" は、startパターンの終了位置とendパターンの開始位置が同一行
にあることを意味する。改行にマッチするskipパターンを使ってもこの規則を変えるこ
とはできない。
fold :syn-fold
引数 "fold" はこのアイテムに対して折り畳みレベルを1増加させる。例:
:syn region myFold start="{" end="}" transparent fold
:syn sync fromstart
:set foldmethod=syntax
これは{}ブロックごとに1つの折り畳みを作らせる。:syn sync fromstart
:set foldmethod=syntax
折り畳みはそのアイテムの開始位置から始まり、アイテムの終了位置で終わる。開始位
置と終了位置が同一行にある場合、折り畳みは作られない。
オプション 'foldnestmax' によって構文折り畳みのネストを制限できる。
:syn-foldlevel の構文アイテムから算出される行の折り畳みレベルを制御する方法
を参照
{+folding機能なしでコンパイルされた場合は利用できない}
:syn-contains E405 E406 E407 E408 E409
contains={group-name},..
引数 "contains" の後には構文グループ名のリストを続ける。"contains" で指定され
たグループは、そのアイテムの内側で始まることを許可される(内包されるグループに
よっては、外側のアイテムの終端が拡張されることもある)。これを使うと、マッチと
リージョンが再帰的にネストできるようになる。引数 "contains" がまったく指定され
ない場合は、そのアイテムはどんなグループも内包しない。ここで使うグループ名は、
必ずしも以前に定義していなくてもよい。
contains=ALL
containsリストが "ALL" だけのとき、全てのグループがこのアイテ
ムの内側で許可される。
contains=ALLBUT,{group-name},..
containsリストの最初の要素が "ALLBUT" のとき、{group-name}で列
挙したグループを除く全てのグループがこのアイテムの内側で許可さ
れる。例:
:syntax region Block start="{" end="}" ... contains=ALLBUT,Function
contains=TOP
containsリストの最初の要素が "TOP" のとき、引数 "contained" を
持たないグループ全てが許可される。
contains=TOP,{group-name},..
"TOP" と同様だが、{group-name}に列挙したグループは除かれる。
contains=CONTAINED
containsリストの最初の要素が "CONTAINED" のとき、引数
"contained" を持つグループ全てが許可される。
contains=CONTAINED,{group-name},..
"CONTAINED" と同様だが、{group-name}に列挙したグループは除かれ
る。
"contains" リスト内の{group-name}はパターンであってもよい。そのパターンにマッ
チするグループ名全てが含まれる("ALLBUT" が使われたときはそれが除かれる)。パター
ンはホワイトスペースや ',' を含んではならない。例:
... contains=Comment.*,Keyw[0-3]
パターンの照合はそのsyntaxコマンドが実行されたときに行われる。それ以降に定義されたグループは照合されない。また、現在のsyntaxコマンドが新しいグループを定義し
ている場合、そのグループは照合されない。ファイル内にsyntaxコマンドを書く場合、
定義されていないグループを当てにすることはできないことに注意。これは、そのファ
イルは以前に読み込まれているかもしれず、":syn clear" はグループ名を削除しない
ためである。
内包されたグループはリージョンのstartとendパターン内にもマッチする。これが望み
の挙動でないなら、引数 "matchgroup" を使うとよい:syn-matchgroup。オフセット
"ms=" と "me=" によって内包されたアイテムがマッチする領域を変更することができ
る。これはハイライトされる範囲も制限することに注意。
containedin={group-name}... :syn-containedin
引数 "containedin" の後には構文グループ名のリストを続ける。するとこのアイテム
がそれらのグループの内側で始まることが許可される。これは外側のアイテムが引数
"contains=" でこのアイテムを指定したのと同じように動作する。
{group-name}...の指定の仕方は前述の "contains" と同様である。
これは構文アイテムを後から追加するときに便利である。既に定義されているアイテム
の定義を変更することなく、その内側にアイテムを含めることができる。例えば、Cの
構文を読み込んだ後で、Cコメント中の単語をハイライトしたいときは:
:syn keyword myword HELP containedin=cComment contained
このアイテムがトップレベルではマッチしないように "contained" を使っている。"containedin" の照合は、このアイテムが現れる場所に追加される。引数 "contains"
も通常通り追加される。注意: キーワードは他のアイテムを含むことができないため、
"containedin" の先にキーワードを指定することは無意味である。
nextgroup={group-name},.. :syn-nextgroup
引数 "nextgroup" の後には構文グループ名のリストをコンマ区切りで続ける
("contains" と同様。パターンを使うこともできる)。
引数 "nextgroup" が与えられると、マッチやリージョンの終了位置の後ろで、指定さ
れた構文グループにマッチする部分が探される。どのグループもマッチしなければ、ハ
イライトは通常通り続けられる。マッチが見つかった場合はそのグループが使われる。
現在のグループの引数 "contains" でそのグループが指定されていなくてもそうなる。
つまり、これは指定されたグループの優先度を最大にすることと同じである。例:
:syntax match ccFoobar "Foo.\{-}Bar" contains=ccFoo
:syntax match ccFoo "Foo" contained nextgroup=ccFiller
:syntax region ccFiller start="." matchgroup=ccBar end="Bar" contained
:syntax match ccFoo "Foo" contained nextgroup=ccFiller
:syntax region ccFiller start="." matchgroup=ccBar end="Bar" contained
これは "Foo" の後に "Bar" が現れたときのみ、"Foo" と "Bar" に異なるハイライト
をする。以下のテキストにおいて、"f" と書いたところはccFooでハイライトされ、
"bbb" と書いたところはccBarでハイライトされる。
Foo asdfasd Bar asdf Foo asdf Bar asdf
fff bbb fff bbb
fff bbb fff bbb
".\{-}" を使い、次のBarまでのスキップが最小になるようにしている。もし ".*" を
使うと、最初の "Foo" と最後の "Bar" がccFooBarのマッチ部分に含まれるため、
"Bar" と "Foo" の間の "asdf" が "ccFoobar" グループとしてハイライトされてしま
う(patternを参照)。
skipwhite :syn-skipwhite
skipnl :syn-skipnl
skipempty :syn-skipempty
これら3個の引数は "nextgroup" と組み合わせたときのみ意味を持つ。これらを指定す
ると、次のグループがマッチする前に、以下のテキストがあってもよくなる。
skipwhite スペースとタブ文字をスキップする
skipnl 行末をスキップする
skipempty 空行をスキップする(自動的に "skipnl" も含むことになる)
例えば "skilwhite" を指定した場合、次のどのグループもホワイトスペースにマッチ
しないならば、ホワイトスペースをスキップする。
"skipnl" を指定すると、nextgroupの照合が次の行からも探される。これは現在のアイ
テムが行末で終わったときのみ有効である。"skipnl" を指定しない場合、nextgroupは
同一行のそのアイテム以降から照合される。
次のグループまでスキップされたテキストの中では他のグループの照合は無視される。
次のグループの照合が見つからなかったとき、再び他のグループの照合が検索される。
つまり、次のグループの照合と、ホワイトスペースと<EOL>のスキップは他のアイテム
より優先される。
例:
:syn match ifstart "\<if.*" nextgroup=ifline skipwhite skipempty
:syn match ifline "[^ \t].*" nextgroup=ifline skipwhite skipempty contained
:syn match ifline "endif" contained
Note マッチ "[^ \t].*" はホワイトスペース以外の全てのテキストにマッチする。よっ:syn match ifline "[^ \t].*" nextgroup=ifline skipwhite skipempty contained
:syn match ifline "endif" contained
て "endif" にもマッチする。そのためマッチ "endif" を最後に置き、最優先にしてい
る。
Note この例はネストした "if" には機能しないことに注意。ネストに対応するには引
数 "contains" を指定する必要がある(この例では簡単のため省略した)。
暗黙の conceal :syn-conceal-implicit
:sy[ntax] conceal [on|off]
これ以降の ":syntax" コマンドでキーワード、マッチ、リージョンを定義し
たときに "conceal" フラグをセットするかどうかを定義する。":syn conceal
on" を実行した後で ":syn keyword"、":syn match"、":syn region" を実行
すると、暗黙的に "conceal" フラグがセットされる。":syn conceal off" を
実行することで通常の状態、つまり "conceal" フラグを明示的に設定しなけ
ればならない状態に戻る。
:sy[ntax] conceal
"syntax conceal on" または "syntax conceal off" を表示する。
==============================================================================
8. syntaxのパターン :syn-pattern E401 E402
syntaxコマンドでは、パターンの前後を同じ文字で囲まなければならない。これは
":s" コマンドと同様である。もっともよく使われるのはダブルクォートである。しか
しパターンがダブルクォートを含んでいる場合は、そのパターンが含んでいない他の文
字を使ったほうがよい。例:
:syntax region Comment start="/\*" end="\*/"
:syntax region String start=+"+ end=+"+ skip=+\\"+
:syntax region String start=+"+ end=+"+ skip=+\\"+
パターンの説明についてはpatternを参照。構文パターンは常に 'magic' オプション
がセットされているのと同じように解釈される(実際の 'magic' オプションの値とは無
関係)。また、'cpoptions' に 'l' フラグが含まれていない場合と同じように解釈され
る。これは構文ファイルの可搬性を高め、'compatible' と 'magic' の設定と無関係に
するためである。
"[a-z]*" など空文字列にマッチするパターンは避けること。これは全ての位置にマッ
チするため、ハイライトがとても遅くなる。
:syn-pattern-offset
パターンに文字数のオフセットを指定することができる。これによってハイライトされ
る部分を変更したり、マッチやリージョンに含まれるテキスト領域(これは他のアイテ
ムを照合するときにだけ関係する)を変更することができる。どちらもマッチしたパター
ンに相対的である。skipパターンに対して文字数のオフセットを指定すると、endパター
ンの検索が始まる位置を決めることができる。
オフセットは "{what}={offset}" の形で指定する。
{what}は次の7個の文字列のどれかである:
ms Match Start マッチしたテキストの開始位置のオフセット
me Match End マッチしたテキストの終了位置のオフセット
hs Highlight Start ハイライトが始まる位置のオフセット
he Highlight End ハイライトが終わる位置のオフセット
rs Region Start リージョンの本体が始まる位置のオフセット
re Region End リージョンが終わる位置のオフセット
lc Leading Context パターンの "leading context" を過ぎた後のオフセット
{offset}は次のうちのどれか:
s パターンのマッチ部分の先頭
s+{nr} パターンのマッチ部分の先頭から右へ{nr}文字目
s-{nr} パターンのマッチ部分の先頭から左へ{nr}文字目
e パターンのマッチ部分の末尾
e+{nr} パターンのマッチ部分の末尾から右へ{nr}文字目
e-{nr} パターンのマッチ部分の末尾から左へ{nr}文字目
{nr} ("lc" 専用): 右へ{nr}文字目からマッチを開始する
例: "ms=s+1", "hs=e-2", "lc=3".
どのパターンの後にどのオフセットを指定してもよいが、それが意味を持たない場合も
ある。次の表はどのオフセットが実際に有効かを示している:
ms me hs he rs re lc
match item yes yes yes yes - - yes
region item start yes - yes - yes - yes
region item skip - yes - - - - yes
region item end - yes - yes - yes yes
複数のオフセットの間に ',' を入れて連結することができる。例:
:syn match String /"[^"]*"/hs=s+1,he=e-1
some "string" text
^^^^^^ ここがハイライトされる
Notes:
- パターンとオフセットの間にホワイトスペースを挟んではならない。
- ハイライトされる領域がマッチしたテキストの外側にはみ出してはならない。
- endパターンに対する負のオフセットは機能しない場合がある。これはハイライトが
既に終わっているべきとき、endパターンは検出されない可能性があるからである。
- Vim 7.2 以前では、オフセットは文字単位でなくバイト単位であった。それではマル
チバイト文字ではうまく機能しないので、7.2 から変更された。
- マッチの開始位置が、パターンがマッチした位置と別の行になってはならない。つま
り "a\nb"ms=e というのは正常に機能しない。ハイライトの開始位置は別の行にあっ
てもかまわない。"a\nb"hs=e というのは正常に機能する。
例(コメントにマッチするが /* と */ はハイライトしない):
:syntax region Comment start="/\*"hs=e+1 end="\*/"he=s-1
/* this is a comment */
^^^^^^^^^^^^^^^^^^^ ここがハイライトされる
より複雑な例:
: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
abcfoostringbarabc
mmmmmmmmmmm マッチ部分
sssrrreee start/region/endとしてハイライトされる部分
("Foo", "Exa", "Bar")
Leading context :syn-lc :syn-leading :syn-context
Note: これは古い機能であり、以前のバージョンとの後方互換性のためだけに残されて
いる。現在はパターン中の /\@<= コンストラクトを使うことが推奨されている。
/\zs も多くの場合使うことができる。
"lc" オフセットはリーディングコンテキストを指定する。これはパターンの一部にな
ければならないが、マッチ部分の一部とは見なされないものである。"lc=n" のオフセッ
トを使うとパターンの照合を試みる前にn桁戻るようになる。リーディングコンテキス
ト内に他のパターンにマッチしている文字が現れてもよい。これはマッチの前方にあっ
てはならない「エスケープ」文字を指定する場合などに使える:
:syn match ZNoBackslash "[^\\]z"ms=s+1
:syn match WNoBackslash "[^\\]w"lc=1
:syn match Underline "_\+"
:syn match WNoBackslash "[^\\]w"lc=1
:syn match Underline "_\+"
___zzzz ___wwww
^^^ ^^^ Underlineにマッチする
^ ^ ZNoBackslashにマッチする
^^^^ WNoBackslashにマッチする
"ms" を指定しないと自動的に "lc" と同じ値にセットされる。
複数行にわたるパターン :syn-multi-line
パターンが "\n" を含むと改行にマッチするようになる。たいていの場合これは期待通
りに動作するが、少しだけ例外がある。
startパターンにオフセットをつけるとき、マッチ部分の開始位置が次の行の先頭で
あってはならない。ハイライトは次の行で始まってもよい。"\zs" を使うときも、マッ
チ部分の開始位置が他の行になってはならない。
skipパターンも "\n" を含んでよい。ただし次の行の最初の文字がskipパターンにマッ
チしていても、そこからendパターンの検索が続けられる。これは、再描画は領域内の
どの行でも始まることができ、skipパターンが前の行から始まったかどうかはチェック
されないからである。例えば、skipパターンが "a\nb" で、endパターンが "b" のと
き、次のテキストの2行目でendパターンがマッチする。
x x a
b x x
つまり、skipパターンは "\n" 以降の文字にはマッチしないことになる。b x x
外部マッチ :syn-ext-match
リージョンのパターンでは特別に以下の正規表現が使える:
/\z( /\z(\) E50 E52 E879
\z(\) 一部を「external」としてマークする。これをつけると他のパターン
からアクセスできるようになる。現在はリージョンのstartパターン
内でのみ使用可能。
/\z1 /\z2 /\z3 /\z4 /\z5
\z1 ... \z9 /\z6 /\z7 /\z8 /\z9 E66 E67
startパターンにマッチしたテキスト中からマークしておいた部分を
参照する。
リージョンのstartとendパターンで正規表現の一部を共有したい場合がある。
一般的な例としてはPerlやUnixシェルのヒアドキュメントがある。これは特別な正規表
現アイテム "\z" を使えば達成できる。これは正規表現の一部を "external" として
マークしておく。するとその部分を他のパターンから参照できるようになる。例えば、
ヒアドキュメントは次のようにすればよい:
:syn region hereDoc start="<<\z(\I\i*\)" end="^\z1$"
このように、\zは2つの役割を果たす。startパターンにおいては正規表現の一部
"\(\I\i*\)" をexternalとしてマークする。endパターンでは\z1によってstartパターン
中の最初のマークされた部分への外部参照とする。外部参照はskipパターン中でも使え
る:
:syn region foo start="start \z(\I\i*\)" skip="not end \z1" end="end \z1"
通常のマークとexternalなマークはまったく独立であり、別々に番号が振られる。例え
ば、文字列 "aabb" に対してパターン "\z(..\)\(..\)" を適用すると、\1は "bb" を
参照し、\z1は "aa" を参照するようになる。externalなマークをした部分は、通常の
マークと違って、同一パターン内で後方参照することはできない。ある部分に対して通
常のマーク、externalなマーク両方をつけたい場合は、"\(\z(...\)\)" のようにネス
トさせればよい。
一行内でマッチした部分しか参照できないことに注意。複数行にわたってマッチした部
分は参照できない。
==============================================================================
9. クラスタ :syn-cluster E400
:sy[ntax] cluster {cluster-name} [contains={group-name}..]
[add={group-name}..]
[remove={group-name}..]
このコマンドを使うと、複数の構文グループを1つの名前のもとにまとめることができ
る。このまとまりのことをクラスタと呼ぶ。
contains={group-name}..
クラスタに含まれるグループを指定する。
add={group-name}..
指定したグループをクラスタに加える。
remove={group-name}..
指定したグループをクラスタからとり除く。
定義したクラスタはcontains=..やcontainedin=..、nextgroup=..、add=..、remove=..
などの文脈で使うことができる。そのとき、クラスタ名の頭に "@" をつける。クラス
タを定義する前にそのクラスタ名を使用してもよい。
例:
:syntax match Thing "# [^#]\+ #" contains=@ThingMembers
:syntax cluster ThingMembers contains=ThingMember1,ThingMember2
:syntax cluster ThingMembers contains=ThingMember1,ThingMember2
この例からわかるように、クラスタに対する変更はさかのぼって効果がある。クラスタ
の定義は直前になってチェックされる。例:
:syntax keyword A aaa
:syntax keyword B bbb
:syntax cluster AandB contains=A
:syntax match Stuff "( aaa bbb )" contains=@AandB
:syntax cluster AandB add=B " これによって2つのキーワードがStuff内で
マッチするようになる
:syntax keyword B bbb
:syntax cluster AandB contains=A
:syntax match Stuff "( aaa bbb )" contains=@AandB
:syntax cluster AandB add=B " これによって2つのキーワードがStuff内で
マッチするようになる
これはクラスタのネスト度にも関係がある:
:syntax keyword A aaa
:syntax keyword B bbb
:syntax cluster SmallGroup contains=B
:syntax cluster BigGroup contains=A,@SmallGroup
:syntax match Stuff "( aaa bbb )" contains=@BigGroup
:syntax cluster BigGroup remove=B " BはBigGroup内にないので無意味
:syntax cluster SmallGroup remove=B " Stuff内でbbbがマッチしなくなる
:syntax keyword B bbb
:syntax cluster SmallGroup contains=B
:syntax cluster BigGroup contains=A,@SmallGroup
:syntax match Stuff "( aaa bbb )" contains=@BigGroup
:syntax cluster BigGroup remove=B " BはBigGroup内にないので無意味
:syntax cluster SmallGroup remove=B " Stuff内でbbbがマッチしなくなる
E848
クラスタの最大数は 9767 である。
==============================================================================
10. 構文ファイルのインクルード :syn-include E397
構文ファイルの中で、関係する構文ファイルをインクルードしたい場合がある。
これには、構文ファイルの関係に応じて2種類の方法がある:
- インクルードされるファイル内のトップレベルのアイテムをそのままトップ
レベルとしたい場合は、単に:runtimeコマンドを使えばよい:
" In cpp.vim:
:runtime! syntax/c.vim
:unlet b:current_syntax
:runtime! syntax/c.vim
:unlet b:current_syntax
- インクルードされるファイル内のトップレベルのアイテムをリージョンに内
包させるには、":syntax include" コマンドを使うとよい:
:sy[ntax] include [@{grouplist-name}] {file-name}
インクルードされるファイル中で宣言された構文アイテム全てに
"contained" フラグがつけられる。さらにグループのリストを指定すると、
インクルードされるファイル中のトップレベルの構文アイテム全てに対して
そのリストがつけられる。
" In perl.vim:
:syntax include @Pod <sfile>:p:h/pod.vim
:syntax region perlPOD start="^=head" end="^=cut" contains=@Pod
:syntax include @Pod <sfile>:p:h/pod.vim
:syntax region perlPOD start="^=head" end="^=cut" contains=@Pod
{file-name}が絶対パスである場合("/", "c:", "$VAR", "<sfile>" のどれ
かで始まる場合)そのファイルが読み込まれる(sourceされる)。相対パスの
場合(例: "syntax/pod.vim")、そのファイルが 'runtimepath' 中から探さ
れる。マッチしたファイル全てが読み込まれる。相対パスを使用することが
推奨される。そうすればユーザーが ":syn include" を書き換えることな
く、インクルードされるファイルを改変して別の場所に置けるからである。
E847
インクルードの最大数は 999 である。
==============================================================================
11. 表示のシンクロナイズ :syn-sync E403 E404
ドキュメント中のどの位置からでも再描画を開始できると望ましい。これを実現するに
は、再描画を開始する位置における構文の状態を知る必要がある。
:sy[ntax] sync [ccomment [group-name] | minlines={N} | ...]
シンクロナイズには4つのやり方がある:
1. 常にファイルの最初からパースする。
:syn-sync-first
2. Cスタイルのコメントに基づく。VimはCコメントの仕様を理解し、現在行がコメント
の内側から始まっているか外側から始まっているかを判定することができる。
:syn-sync-second
3. 一定行さかのぼり、そこからパースを開始する。
:syn-sync-third
4. テキストをさかのぼり、シンクロナイズを始める目印の正規表現を検索する。
:syn-sync-fourth
:syn-sync-maxlines :syn-sync-minlines
最後の3つの方法に関して、さかのぼる行数は "minlines" と "maxlines" で制限され
る。
引数 "minlines={N}" が指定されると、常に少なくともその行数さかのぼってパースが
開始される。パースする行数が少なすぎて正しくハイライトできないかもしれないと
き、またはシンクロナイズを使うのが不可能であるとき、この引数を使うとよい。
引数 "maxlines={N}" が指定されると、コメントや正規表現を検索するためにさかのぼ
る行数が最大N行になる。これは遅いマシンを使っていて、シンクロナイズする行数が
少ないとわかっているときに便利である。例:
:syntax sync maxlines=500 ccomment
:syn-sync-linebreaks
複数行にマッチする正規表現を使っているとき、ある行に変更を施すと、前の行でマッ
チしていた正規表現がマッチしなくなってしまうことがある。この場合、変更を施した
位置より上からシンクロナイズを行わなければならない。その行数を引数 "linebreaks"
で指定する。例えば、正規表現が改行を1個含んでいる場合はこのようにする:
:syntax sync linebreaks=1
こうすると、常に変更が施された行の少なくとも1行前から再描画が開始される。"linebreaks" のデフォルト値は0。通常 "minlines" の値は "linebreaks" の値より大
きい。
第一の方法: :syn-sync-first
:syntax sync fromstart
ファイルの最初からパースする。この方法を使うと構文ハイライトが正確になるが、大
きいファイルに対しては遅くなる。Vimは以前にパースしたテキストをキャッシュして
おく。そのため、遅くなるのはファイルを最初にパースするときだけである。しかし、
変更を施すと、それ以降の一部をパースし直さなければならなくなる(最悪の場合はファ
イルの最後まで)。
"fromstart" を使うことは "minlines" を非常に大きな値にすることと同じ効果を持
つ。
第二の方法: :syn-sync-second :syn-sync-ccomment
第二の方法を使うには、単に引数 "ccomment" をつければよい。
例:
:syntax sync ccomment
画面最上行がCスタイルコメントの内側にあると判断される場合、グループ名が
"Comment" のリージョン構文アイテムが使われる。この方法を使うには "Comment" と
いうグループ名のリージョンがなければならないことに注意。他のグループ名を指定す
ることもできる。例:
:syntax sync ccomment javaComment
こうすると、検出されたCコメントのリージョンに対して "syn region javaComment"で指定されたアイテムのうち最後のものが使われる。ここで指定するリージョンの
startパターンが "\/*"、endパターンが "*\/" となっていないと適切に機能しない。
引数 "maxlines" を使うと検索の行数を制限できる。引数 "minlines" を使うと少なく
ともその行数だけさかのぼって開始させることができる(例:2,3行だけを受け取るコン
ストラクトがある場合。ただしその場合シンクロナイズするのが困難)
Note: "*/" を含む文字列で行をまたぐものがあると、Cコメントによるシンクロナイズ
は適切に機能しない。行をまたいで文字列を書くのは悪いプログラミング習慣である
(多くのコンパイラが警告を出す)。また、コメント中に "*/" が現れる機会はまれなの
で、この制限は注意するほどのものではない。
第三の方法: :syn-sync-third
第三の方法を使うには引数 "minlines={N}" を加えればよい。この方法を指定すると、
{N}行前からパースを開始する。これは{N}行余分にパースされることを意味する。その
ためこの方法は少し遅くなる。
例:
:syntax sync minlines=50
"lines" は "minlines" と同じ意味である(古いバージョンで使われている)。
第四の方法: :syn-sync-fourth
第四の方法は、シンクロナイズパターンと呼ばれる特定のリージョンの末尾でシンクロ
ナイズするものである。行をまたげるのはリージョンだけなので、リージョンの末尾に
出会ったら、どの構文アイテムの中にいるのかを知ることができる。再描画が始まる行
のすぐ上から検索を開始し、ファイルの上方に向かって検索する。
これはシンクロナイズしない構文アイテムとちょうど同じように機能する。内包された
マッチ、nextgroupなどを使うことができる。ただし少しだけ違いがある。
- キーワードを使うことはできない。
- "sync" キーワード付きの構文アイテムは、完全に別の構文アイテムのグループを形
成する。シンクロナイズするグループとしないグループを混ぜることはできない。
- 照合はバッファ内で1行ごとに逆向きに行われる(前向きではない)。
- 行継続パターンをつけることができる。これを使うと、あたかも1行であるかのよう
に検索する一連の行を指定することができる。これは、指定したアイテムとの照合が
継続パターンを含む一連の行の最初から始まることを意味する。
- "nextgroup" や "contains" は1行(または継続された一連の行)内でだけ有効。
- リージョンは同一行(または継続された一連の行)内で開始・終了しなければならな
い。そうでないと行末(または継続された一連の行)内で終わるものとされる。
- シンクロナイズパターンとのマッチが見つかると、その行(または継続された一連の
行)の残りから再びマッチが探される。最後のマッチが使われる。
これはリージョンの開始と終了が同一行内にあるとき使われる
(例: /* this */ のようなCコメントでは、最後の "*/" が使われる)。
シンクロナイズパターンとのマッチは2通りの使い方がある。
1. 再描画を始める場所(シンクロナイズパターンの検索が始まる場所でもある)から強
調のためのパースを始める。そこで有効であると期待される構文グループを指定し
なければならない。行をまたぐリージョンが他のリージョンを含んではならない場
合にこれはうまく機能する。
2. ハイライトのためのパースはマッチの直後から継続される。マッチの直後に現れる
と期待される構文グループを指定しなければならない。
これは前の方法がうまくいかないときに使われる。より多くのテキストをパースす
る必要があるため、とても遅い。
両方のタイプを同時に使うこともできる。
シンクロナイズパターンだけでなく、他のマッチとリージョンを指定して望まないマッ
チが見つかるのを避けることができる。
[シンクロナイズパターンが別々に与えられる理由は、シンクロナイズポイントの検索
はたいていの場合、ハイライトするところを判別するよりずっと単純だからである。パ
ターンの数が減るとそれだけ速くなる。]
syn-sync-grouphere E393 E394
:syntax sync match {sync-group-name} grouphere {group-name} "pattern" ..
シンクロナイズ用に使うマッチを定義する。{group-name}はマッチのすぐ後に
続く構文グループの名前である。ハイライトのためのテキストのパースはマッ
チの直後から始まる。この{group-name}がついたリージョンが存在しなければ
ならない。最初に定義されたリージョンが使われる。マッチの後に構文グルー
プが続かない場合は "NONE" を使う。
syn-sync-groupthere
:syntax sync match {sync-group-name} groupthere {group-name} "pattern" ..
"grouphere" と同様。ただし{group-name}はシンクロナイズポイントの検索が
始まる行の行頭で使われる構文グループの名前である。マッチとシンクロナイ
ズパターンの検索が始まる位置との間のテキストは構文ハイライトを変えては
ならない。例えばCにおいて "/*" と "*/" を後方検索することができる。
"/*" が先に見つかったら、今はコメントの内側にいるとわかる。なので
"groupthere" は "cComment" となる。"*/" が先に見つかったら今はコメント
の中ではないとわかる。なので "groupthere" は "NONE" となる。(実際は、
文字列の中に "/*" と "*/" があるかもしれないので、もう少し込み入ってい
る。これは読者の練習問題としておく...)。
:syntax sync match ..
:syntax sync region ..
引数 "groupthere" なしの場合。シンクロナイズポイントの検索の際にスキッ
プされるリージョンやマッチを定義する。
syn-sync-linecont
:syntax sync linecont {pattern}
{pattern}とのマッチが次の行にも継続されるとみなされる。つまりシンクロ
ナイズポイントの検索の際、行は連結されているものと見なされる。
引数 "maxlines={N}" が同時に与えられると、マッチを検索する行がN行に制限される。
これは遅いマシンを使っていて、シンクロナイズするものが少ないとわかっているとき
に便利。例:
:syntax sync maxlines=100
全てのシンクロナイズの設定をクリアするには:
:syntax sync clear
あるシンクロナイズパターンをクリアするには:
:syntax sync clear {sync-group-name} ..
==============================================================================
12. 構文アイテムのリストを表示する :syntax :sy :syn :syn-list
次のコマンドは全ての構文アイテムのリストを表示する:
:sy[ntax] [list]
ある構文グループに属する構文アイテムを表示するには:
:sy[ntax] list {group-name}
あるクラスタに属する構文グループを表示するには: E392
:sy[ntax] list @{cluster-name}
":syntax" コマンドに対する他の引数については上を参照。
":syntax" コマンドは ":sy" とも略記できる。しかし ":syn" の方が見栄えがよいた
め、普通はこちらが使われる。
==============================================================================
13. カラースキーム color-schemes
次の章では個別のハイライトグループとその固有の色をどのようにすべきかについての
情報を見付けることができる。可能性が高いのは :colorscheme コマンドを使いあな
たの欲しい色のセットについてちょうどよいものを選択することである。例:
colorscheme pablo
:colo :colorscheme E185
:colo[rscheme] 現在のカラースキームの名前を表示する。
基本的には次のコマンドと同じである
:echo g:colors_name
g:colors_name が定義されていない場合は "default" と表示される。そのパレットは、ファイル
"$VIMRUNTIME/syntax/syncolor.vim" で定義されており、
peachpuff と desert の旧バージョンに基づいている。
+eval 機能付きでコンパイルされていない場合は
"unknown" と表示される。
:colo[rscheme] {name} カラースキーム{name}を読み込む。これは 'runtimepath'
の中から "colors/{name}.vim" というファイルを検索する。
最初に見つかったものが読み込まれる。
デフォルトのカラースキームを読み込むには、
:colo default を使用する。
同様に、'packpath' 内の全てのプラグインを検索し、それ
ぞれについて "start" 内、"opt" 内の順で検索する。
再帰的な読み込みはされない。つまりカラースキームスクリ
プト中で ":colorscheme"を使うことはできない。
カラースキームのカスタマイズには2つの選択肢がある。特定の色の見栄えを変えるた
め、カラースキームを読み込む前にカラー名を再定義することができる。desert スキー
ムは、カーソルに khaki 色が使用されている。同じ色のより暗いバリエーションを使
用する場合:
let v:colornames['khaki'] = '#bdb76b'
colorscheme desert
colorscheme desert
:highlight-link の関連付けを変更するなど、さらにカスタマイズするには、別の名
前を使用する。例えば、 ~/.vim/colors/mine.vim" と :runtime を使用してオリジ
ナルのカラースキームを読み込む:
runtime colors/evening.vim
hi Statement ctermfg=Blue guifg=Blue
hi Statement ctermfg=Blue guifg=Blue
カラースキームが読み込まれる前に全デフォルトのカラーリストのスクリプト
(colors/lists/default.vim)が実行され、ColorSchemePre 自動コマンドイベント
がトリガーされる。カラースキームが読み込まれた後に ColorScheme 自動コマンド
イベントがトリガーされる。
colorscheme-override
カラースキームがほぼ相応しい場合は、ColorScheme 自動コマンドを使用して、その
上に変更を加えることができる。例えば、背景色を削除するには(一部の端末では透過
することができる):
augroup my_colorschemes
au!
au Colorscheme pablo hi Normal ctermbg=NONE
augroup END
au!
au Colorscheme pablo hi Normal ctermbg=NONE
augroup END
さらに2色を変更する:
augroup my_colorschemes
au!
au Colorscheme pablo hi Normal ctermbg=NONE
\ | highlight Special ctermfg=63
\ | highlight Identifier ctermfg=44
augroup END
au!
au Colorscheme pablo hi Normal ctermbg=NONE
\ | highlight Special ctermfg=63
\ | highlight Identifier ctermfg=44
augroup END
多くの変更を行う場合は、配布された配色をホームディレクトリにコピーして変更する
ことをお勧めする:
:!cp $VIMRUNTIME/colors/pablo.vim ~/.vim/colors
:edit ~/.vim/colors/pablo.vim
:edit ~/.vim/colors/pablo.vim
Vim 9.0 ではカラースキームのコレクションが更新され、さまざまな端末で動作するよ
うになった。変更の1つは、Normal ハイライトグループを複数定義して、色が適切に表
示されるようにすることであった。古いバージョンを好む場合は、ここで見つけること
ができる:
https://github.com/vim/colorschemes/blob/master/legacy_colors/
カラースキームファイルを書くための情報については次を参照:
:edit $VIMRUNTIME/colors/README.txt
==============================================================================
14. ハイライトコマンド :highlight :hi E28 E411 E415
ハイライトグループには3つのタイプがある:
- 特定の構文言語用のもの。名前がその言語の名前で始まる。このタイプのほとんど
は属性を持たず、2番目のタイプのグループにリンクされる。
- 全ての構文言語に対して使われるもの。
- 'highlight' オプションに使われるもの。
hitest.vim
現在有効な全てのグループを知るにはこのコマンドを使う:
:so $VIMRUNTIME/syntax/hitest.vim
このコマンドは新しいウィンドウを開き、そこに全てのハイライトグループ名を、それ自身の色を使って表示する。
:hi[ghlight] 属性がセットされたハイライトグループを全て表示する。
:hi[ghlight] {group-name}
1つのハイライトグループを表示する。
highlight-clear :hi-clear
:hi[ghlight] clear 全てのハイライトをデフォルトに戻す。ユーザーによって加
えられたグループに対するハイライトが全て消去される。
現在の 'background' の値によってデフォルトの色が決ま
る。
デフォルトのリンクがあるなら、復元される。 :hi-link
:hi[ghlight] clear {group-name}
:hi[ghlight] {group-name} NONE
1つのハイライトグループに対するハイライトを無効にする。
デフォルトの色に戻すわけではない。
:hi[ghlight] [default] {group-name} {key}={arg} ..
ハイライトグループを追加する、または既存のグループに対
する強調を変更する。指定された色の名前が認識されない場
合、'runtimepath' 上で見付かる各
colors/lists/default.vim が読み込まれる。
引数{key}={arg}についてはhighlight-argsを参照。
オプショナルな引数[default]については
:highlight-defaultを参照。
通常、ハイライトグループは起動時に一度だけ追加される。そこでハイライトのデフォ
ルト値をセットする。その後、ハイライトコマンドを使うことによってデフォルトでな
い値に変えることができる。値 "NONE" を使うとその値をオフにしたりデフォルト値に
戻したりできる。
色を変える簡単な方法は:colorschemeコマンドを使うことである。すると、次のよう
な ":highlight" コマンドが書かれたファイルが読み込まれる:
:hi Comment gui=bold
このファイルに含まれない設定は変更されないままである。指定されたフィールドだけ
が更新され、それ以前の設定とマージされる。なのでその結果は次のコマンド1つを実
行するのと同じである:
:hi Comment term=bold ctermfg=Cyan guifg=#80a0ff gui=bold
:highlight-verbose
'verbose' を0でない値にしてハイライトグループの一覧を表示すると、最後に設定さ
れた場所も表示される。例:
:verbose hi Comment
Comment xxx term=bold ctermfg=4 guifg=BlueLast set from /home/mool/vim/vim7/runtime/syntax/syncolor.vim
":hi clear" が実行されると、このコマンドを実行したスクリプトがデフォルト値とし
て言及される。より詳しくは:verbose-cmdを参照。
highlight-args E416 E417 E423
ハイライトに関して、ターミナルは3種類に分類される:
term 通常のターミナル(vt100, xterm)
cterm カラーターミナル(MS-Windows console, color-xterm。これらはtermcapエン
トリ "Co" をもつ)
gui GUI
ハイライトはこれらのタイプごとに指定できる。そうすることによって、同じ構文ファ
イルを全てのターミナルに対して使用でき、ターミナルごとに最善のハイライトを利用
できるようになっている。
1. highlightコマンドの引数(通常のターミナル用)
bold underline undercurl
underdouble underdotted
underdashed inverse italic
standout nocombine strikethrough
term={attr-list} attr-list highlight-term E418
attr-listはコンマ区切りのリスト(スペースは入れない)で、要素は以下の通
り(順序はどうでもよい):
bold
underline
undercurl 必ずしも使用できるとは限らない
underdouble 必ずしも使用できるとは限らない
underdotted 必ずしも使用できるとは限らない
underdashed 必ずしも使用できるとは限らない
strikethrough 必ずしも使用できるとは限らない
reverse
inverse reverseと同じ
italic
standout
nocombine 属性をまとめる代わりに、オーバーライドする
NONE 属性を使用しない(属性をリセットするために使う)
この引数で "bold" を指定してもよいし、太文字のフォントを指定してもよ
い。どちらも表示は同じになる。
underline-codes
"undercurl" は波下線のこと。"undercurl" が使用できないときは
"underline" が使われる。一般的には "undercurl" および "strikethrough"
はGUIといくつかの端末で使用できる。その色は highlight-guisp か
highlight-ctermul で設定できる。端末で波下線が動くようにするにはこれ
らの termcap エントリを試してみるとよい:
let &t_Cs = "\e[4:3m"
let &t_Ce = "\e[4:0m"
let &t_Ce = "\e[4:0m"
"underdouble" は二重下線で、"underdotted" はドット下線、"underdashed"
は破線の下線。これらは一部の端末でのみサポートされる。端末がこれらをサ
ポートしている場合は、次のようなコードを指定する必要がある:
let &t_Us = "\e[4:2m"
let &t_ds = "\e[4:4m"
let &t_Ds = "\e[4:5m"
これらは、波下線(undercurl)と同様に t_Ce でリセットされる。t_Us, t_dslet &t_ds = "\e[4:4m"
let &t_Ds = "\e[4:5m"
または t_Ds が設定されてない場合は、underline がフォールバックとして使
用される。
start={term-list} highlight-start E422
stop={term-list} term-list highlight-stop
これらのターミナルコードのリストを使ってターミナルについての標準的でな
い属性を得ることができる。
引数 "start" でエスケープシーケンスを指定すると、ハイライトするテキス
トの前にそれが書き込まれる。そのテキストをハイライトする際にターミナル
に送りたいものをなんでも指定できる。引数 "stop" でエスケープシーケンス
を指定すると、強調されるテキストの後にそれが書き込まれる。"start" で
行ったことを "stop" で元に戻すべきである。そうしないとスクリーンがご
ちゃごちゃになってしまうだろう。
{term-list}は2つの形を持つ:
1. エスケープシーケンス付きの文字列。
これは "t_" で始まるものと空文字列を除く任意の文字列である。"<Esc>"
や "<Space>" のような<>記法が利用できる。例:
start=<Esc>[27h;<Esc>[<Space>r;
2. ターミナルコードのリスト。
ターミナルコードは "t_xx" の形を持つ。"xx" はtermcapエントリ名であ
る。ターミナルコードはコンマで区切る。ホワイトスペースは使えない。
例:
start=t_C1,t_BL
対応するターミナルコードが存在しなければならない。
2. highlightコマンドの引数(カラーターミナル用)
cterm={attr-list} highlight-cterm
{attr-list}の説明は上を参照attr-list。
色を使う場合、引数 "cterm" は "term" と異なる結果になる。例えば、通常
のターミナルではコメントにアンダーラインを引き、カラーターミナルではコ
メントを青色で表示することができる。
Note: DOSコンソールなどいくつかのターミナルでは色づけの際にこれらの属
性を混在させることはできない。移植性を重視するには、"cterm=" か
"ctermfg=" か "ctermbg=" のどれか1つだけを使うこと。
ctermfg={color-nr} highlight-ctermfg E421
ctermbg={color-nr} highlight-ctermbg
ctermul={color-nr} highlight-ctermul
これらで端末で前面 (ctermfg)、背景 (ctermbg)、下線 (ctermul) に使う色
を指定する。
引数{color-nr}で色番号を指定する。色番号の範囲は0からtermcapエントリ
"Co" の値 - 1 までである。
この色番号で実際に表示される色はターミナルの種類とその設定に依存する。
"cterm" の設定によって色が変わる場合もある。例えば、あるシステムでは
"cterm=bold ctermfg=3" でそのまま3番の色を表示し、他のシステムでは異な
る色を表示することがある。
xtermにおいてはこれはユーザーのリソースに依存し、やや予測ができない。
デフォルトについてはxtermのドキュメントを参照のこと。カラーxterm用の色
は .Xdefaults ファイルで変更することができる。このため、ユーザーごとに
表示される色が異なるかもしれない。カラーxtermについてはxterm-colorを
参照。
tmux
tmuxを使用する場合は、tmux configとして以下を使用することを勧める:
# tmux colors
set -s default-terminal "tmux-256color"
set -as terminal-overrides ",*-256color:Tc"
詳細は:set -s default-terminal "tmux-256color"
set -as terminal-overrides ",*-256color:Tc"
https://github.com/tmux/tmux/wiki/FAQ#how-do-i-use-a-256-colour-terminal
https://github.com/tmux/tmux/wiki/FAQ#how-do-i-use-rgb-colour
コンソールウィンドウ内のMS-Windows標準色は固定されている。そのため、こ
れらの色を名前に使っている。一方、X11の色名の意味は固定されている。そ
こでハイライトの設定に可搬性を持たせるため、X11の色設定が使われている
(複雑であるが)。以下の色名を、色番号の代わりに使うことができる:
cterm-colors
NR-16 NR-8 COLOR NAME
0 0 Black
1 4 DarkBlue
2 2 DarkGreen
3 6 DarkCyan
4 1 DarkRed
5 5 DarkMagenta
6 3 Brown, DarkYellow
7 7 LightGray, LightGrey, Gray, Grey
8 0* DarkGray, DarkGrey
9 4* Blue, LightBlue
10 2* Green, LightGreen
11 6* Cyan, LightCyan
12 1* Red, LightRed
13 5* Magenta, LightMagenta
14 3* Yellow, LightYellow
15 7* White
"NR-16" の下の番号は16色ターミナル('t_Co' が16以上のもの)用である。
"NR-8" の下の番号は8色ターミナル('t_Co' が16未満のもの)用である。
'*' はctermfgにbold属性がセットされることを意味している。"linux"
など多くの8色ターミナルでは明るい色になる。ただし背景色には適用さ
れない。'*' がないものはbold属性なしになる。他の方法でbold属性をつ
けたいなら引数 "cterm=" を "ctermfg=" や "ctermbg=" の後に書くこ
と。または色名の代わりに番号を使うこと。
色名の大文字と小文字は無視されるが、Vim は v:colornames 辞書から読み
取るときに小文字の色名を使用する。
Note 16色ansiスタイルターミナル(xtermを含む)ではNR-8の列の番号が使われ
ることに注意。ここで '*' は 'add 8' という意味になる。つまりBlueが12
に、DarkGrayが8になる。
Note カラーターミナルによっては、色名を使うと間違った色で表示される場
合もあることに注意。
色をなしにするのに "NONE" も使える。
:hi-normal-cterm
Normalグループに対して "ctermfg" や "ctermbg" を設定すると、これらはハ
イライトされないテキストに対する色になる。
例:
:highlight Normal ctermfg=grey ctermbg=darkblue
Normalグループに対して "ctermbg" を設定すると、その色が認識されてかつ'background' が明示的に設定されていないという条件の下で、オプション
'background' が自動的に調整される。これによって 'background' に依存
するハイライトグループが変更される。そのため、まずNormalに対する色を設
定し、それから他の色を設定するべきである。
カラースキーム使用時に 'background' を変更するとカラースキームが再読み
込みされる。そしてNormalを含む全ての色がリセットされる。これが嫌なら最
初に変数 "g:colors_name" を削除すること。
Normalグループの "ctermfg" や "ctermbg" を変更した場合、Vim終了時にそ
の色をリセットする必要がある。これはtermcapエントリ "op" t_opを使っ
てなされる。リセットがうまくいかない場合は.vimrc中で 't_op' を設定して
みること。
E419 E420 E453
Vimが通常の文字色と背景色と下線色を知っている場合、色名として "fg" と
"bg" と "ul" を使用できる。これはNormalグループの色とMS-Windowsコンソー
ルの色を設定しないと使えない。例えば反転表示をするには:
:highlight Visual ctermfg=bg ctermbg=fg
このコマンドを実行した時点で有効な色が使われることに注意。この後でNormalグループを変更しても "fg" と "bg" は調整されない。
ctermfont={font-nr} highlight-ctermfont
端末で使用する代替フォント番号を指定する。使用可能なフォントは端末に
よって異なる。端末が代替フォント用に設定されていない場合は、単に何もし
ない。{font-nr} の範囲は 0-10 で、0 はフォントをデフォルトフォントにリ
セットし、1-9 は 9 つの代替フォントの 1 つを選択し、10 はFraktur フォ
ントを選択する。詳細については、端末による SGR パラメータ10-20 の処理
を参照。 t_CF
3. highlightコマンドの引数(GUI用)
gui={attr-list} highlight-gui
これらはGUIモードで使われる属性を設定する。
説明はattr-listを参照。
ここで "bold" を設定しても太字のフォントを使ってもよい。どちらも同じ効
果を持つ。
"Normal" グループに対する属性は無視される。
font={font-name} highlight-font
font-nameはVimを実行しているシステム上で使われるフォント名である。X11
ではこれは複雑な名前になる。例えば:
font=-misc-fixed-bold-r-normal--14-130-75-75-c-70-iso8859-1
フォント名 "NONE" を使うとデフォルトのフォントに戻る。
"Normal" グループに対してフォントを設定すると、これがデフォルトフォン
トになる(オプション 'guifont' が変更されるまでは; 最後に設定したものが
使われる)。
以下のものはMotif上でのみ動作し、他のGUI上では利用できない:
"Menu" グループに対してフォントを設定すると、メニューが変更される。
"Tooltip" グループに対してフォントを設定すると、ツールチップが変更され
る。
Menu用とTooltip用を除く全てのフォントのサイズがデフォルトフォントのサ
イズと同じでなければならない。そうでないと再描画の際に問題が発生する。
名前にスペースや特殊文字を含むフォントを使う場合、名前をシングルクォー
トでくくる。このためシングルクォートを名前に含めることはできない。
例:
:hi comment font='Monospace 10'
guifg={color-name} highlight-guifg
guibg={color-name} highlight-guibg
guisp={color-name} highlight-guisp
guifgは文字色、guibgは背景色、guispは波線および取り消し線の色を指定す
る。これらはGUIで使用される。
いくつか特別な名前がある:
NONE no color (透明) E1361
bg 通常の背景色を使う
background 通常の背景色を使う
fg 通常の文字色を使う
foreground 通常の文字色を使う
名前にスペースや特殊文字を含む色を使う場合、名前をシングルクォートでく
くる。このためシングルクォートを名前に含めることはできない。
例:
:hi comment guifg='salmon pink'
gui-colors
推奨されている色名 (これらはほとんどのシステムで利用可能である)
Red LightRed DarkRed
Green LightGreen DarkGreen SeaGreen
Blue LightBlue DarkBlue SlateBlue
Cyan LightCyan DarkCyan
Magenta LightMagenta DarkMagenta
Yellow LightYellow Brown DarkYellow
Gray LightGray DarkGray
Black White
Orange Purple Violet
Win32 GUIバージョンでは他にもシステムカラーが利用できる。
win32-colorsを参照。
RGB値によって色を指定することもできる。
フォーマットは "#rrggbb"、ここで
"rr" Red値
"gg" Green値
"bb" Blue値
これらの値は16進であり、範囲は "00" から "ff"。例:
:highlight Comment guifg=#11f0c3 guibg=#ff00ff
あなたがカラースキームの作者であり同じ16進数値を繰り返し使うのであれば
v:colornames に (小文字の) カラー名を定義することができる。例えば:
# デフォルト値を提供するがユーザーが上書きすることを許容する。
:call extend(v:colornames, {'alt_turquoise': '#11f0c3'}, 'keep')
:highlight Comment guifg=alt_turquoise guibg=magenta
:call extend(v:colornames, {'alt_turquoise': '#11f0c3'}, 'keep')
:highlight Comment guifg=alt_turquoise guibg=magenta
名前付きのカラーに依存するカラースキームを使用していて、それらのカラー
の正確な見栄えを調整したい場合は、スキームを読み込む前に
v:colornames の値をオーバーライドすることで調整できる:
let v:colornames['alt_turquoise'] = '#22f0d3'
colorscheme alt
colorscheme alt
他人に信頼されるカラーリストを開発したい場合は、カラー名にプリフィック
スを付けるとよい。慣例により、これらのカラーリストは colors/lists ディ
レクトリに配置される。その例を
'$VIMRUNTIME/colors/lists/csscolors.vim' で見ることができる。このリス
トは、以下を使用したカラースキームによって読み込まれる:
:runtime colors/lists/csscolors.vim
:highlight Comment guifg=css_turquoise
:highlight Comment guifg=css_turquoise
highlight-groups highlight-default
以下はデフォルトのハイライトグループである。これらのグループはデフォルトでオプ
ション 'highlight' によって使われる。ただしハイライトは 'background' の値に依
存することに注意。":highlight" コマンドで現在の設定を知ることができる。
可能な場合、名前は使用されている色でハイライトされる。これにより読み取り不能に
なる場合は、ビジュアル選択を使用すること。
hl-ColorColumn
ColorColumn 'colorcolumn' で設定された列の表示に使われる
hl-Conceal
Conceal Conceal されたテキストの代わりに表示される代替文字の表示に使わ
れる ('conceallevel' 参照)。
hl-Cursor hl-lCursor
Cursor カーソル下の文字。
lCursor language-mapping が使用されているときのカーソルの下の文字
('guicursor' を参照)。
hl-CursorIM
CursorIM Cursorと同じだが、IMEモードにいるとき使われる。CursorIM
hl-CursorColumn
CursorColumn 'cursorcolumn' がオンになっているときのカーソルがある画面上の
桁。
hl-CursorLine
CursorLine 'cursorline' がオンになっているときのカーソルがある画面上の行。
hl-Directory
Directory ディレクトリ名(とリストにある特別な名前)。
hl-DiffAdd
DiffAdd 差分モード: 追加された行。diff.txt
hl-DiffChange
DiffChange 差分モード: 変更された行。diff.txt
hl-DiffDelete
DiffDelete 差分モード: 削除された行。diff.txt
hl-DiffText
DiffText 差分モード: 変更された行中の変更されたテキスト。diff.txt
hl-EndOfBuffer
EndOfBuffer バッファ中で最終行以降の領域を埋めるための行 (~)。
標準では、hl-NonTextのようにハイライトされる。
hl-ErrorMsg
ErrorMsg コマンドラインに現れるエラーメッセージ。
hl-VertSplit
VertSplit 垂直分割したウィンドウの区切りとなる桁。
hl-Folded
Folded 閉じた折り畳みの行。
hl-FoldColumn
FoldColumn 'foldcolumn'
hl-SignColumn
SignColumn 目印signsが表示される桁。
hl-IncSearch
IncSearch 'incsearch' のハイライト; ":s///c" で置換されたテキストにも使
われる。
hl-LineNr
LineNr ":number" と ":#" コマンドの行番号。'number' オプションか
'relativenumber' オプションが設定されているときにはその表示に
も使われる。
hl-LineNrAbove
LineNrAbove 'relativenumber' オプションが設定されているときのカーソル行の
上の行番号。
hl-LineNrBelow
LineNrBelow 'relativenumber' オプションが設定されているときのカーソル行の
下の行番号。
hl-CursorLineNr
CursorLineNr LineNr と同じだが 'cursorline' が設定され、'cursorlineopt' に
"number" が含まれるか "both" が設定されているときに現在行に使
われる。
hl-CursorLineFold
CursorLineFold FoldColumn と同じだが 'cursorline' が設定されたときに現在行に
使われる。
hl-CursorLineSign
CursorLineSign SignColumn と同じだが 'cursorline' が設定されたときに現在行に
使われる。
hl-MatchParen
MatchParen カーソル下の文字、または直後の文字が括弧であるとき、その文字と
対応する括弧に使われる。pi_paren.txt
hl-MessageWindow
MessageWindow :echowindow で表示されるポップアップウィンドウにおけるメッ
セージ。定義されていないときは hl-WarningMsg が用いられる。
hl-ModeMsg
ModeMsg 'showmode' のメッセージ(例、"-- INSERT --")。
hl-MsgArea
MsgArea コマンドライン領域。メッセージの出力にも使用される。
'cmdheight' も参照。
hl-MoreMsg
MoreMsg more-prompt
hl-NonText
NonText ウィンドウの端の '@' や、'smoothscroll' を設定しているときの行
頭に表示される "<<<"、'showbreak' で設定された文字など、実際の
テキストには存在しない文字(例. 全角文字が行末に収まらないとき
">" が表示される)。
hl-Normal
Normal 通常のテキスト。
hl-Pmenu
Pmenu ポップアップメニュー: 通常の項目。
hl-PmenuSel
PmenuSel ポップアップメニュー: 選択されている項目。
hl-PmenuKind
PmenuKind ポップアップメニュー: "kind" の通常の項目。
hl-PmenuKindSel
PmenuKindSel ポップアップメニュー: "kind" の選択されている項目。
hl-PmenuExtra
PmenuExtra ポップアップメニュー: "extra text" の通常の項目。
hl-PmenuExtraSel
PmenuExtraSel ポップアップメニュー: "extra text" の選択されている項目。
hl-PmenuSbar
PmenuSbar ポップアップメニュー: スクロールバー。
hl-PmenuThumb
PmenuThumb ポップアップメニュー: スクロールバーのつまみ部分。
hl-PmenuMatch
PmenuMatch ポップアップメニュー: 通常の項目内のマッチしたテキスト。
hl-PmenuMatchSel
PmenuMatchSel ポップアップメニュー: 選択されている項目内のマッチしたテキス
ト。
hl-PopupNotification
PopupNotification
popup_notification() で生成されたポップアップウィンドウ。定
義されていないときは hl-WarningMsg が用いられる。
hl-Question
Question ヒットエンタープロンプトhit-enterとyes/noクエスチョン。
hl-QuickFixLine
QuickFixLine quickfixウィンドウ内の現在の quickfix 項目。
hl-Search
Search 最後に検索した語のハイライト('hlsearch')を参照。
強調されるべき同様の項目にも使用される。
hl-CurSearch
CurSearch 最後の検索パターンでの現在のマッチ('hlsearch' を参照)。
Note: 検索の後に有効だが、変更されたり、画面再描画すると失効し
てしまう。
hl-SpecialKey
SpecialKey ":map" でリストされるメタキーと特別なキー。テキスト中の
unprintableな文字を表示するのにも使われる。
一般に: 実際とは異なる文字で表示されるテキスト
hl-SpellBad
SpellBad スペルチェッカに認識されない単語。spell
これは他のハイライトと同時に組み合わせられる。
hl-SpellCap
SpellCap 大文字で始まるべき単語。 spell
これは他のハイライトと同時に組み合わせられる。
hl-SpellLocal
SpellLocal スペルチェッカによって他の地域で使われると判断される単語。
spellこれは他のハイライトと同時に組み合わせられる。
hl-SpellRare
SpellRare スペルチェッカによってまず使わないと判断される単語。spell
これは他のハイライトと同時に組み合わせられる。
hl-StatusLine
StatusLine カレントウィンドウのステータスライン。
hl-StatusLineNC
StatusLineNC 非カレントウィンドウのステータスライン。
Note: これが "StatusLine" に等しい場合、カレントウィンドウのス
テータスラインに "^^^" が使われる。
hl-StatusLineTerm
StatusLineTerm terminal ウィンドウのカレントウィンドウのステータスライン。
hl-StatusLineTermNC
StatusLineTermNC terminal ウィンドウの非カレントウィンドウのステータ
スライン。
hl-TabLine
TabLine タブページの行の、アクティブでないタブページのラベル。
hl-TabLineFill
TabLineFill タブページの行の、ラベルがない部分。
hl-TabLineSel
TabLineSel タブページの行の、アクティブなタブページのラベル。
hl-Terminal
Terminal terminal ウィンドウ (terminal-size-color を参照)。
hl-Title
Title ":set all"、":autocmd" などによる出力のタイトル。
hl-Visual
Visual ビジュアルモード選択。
hl-VisualNOS
VisualNOS vimが "Not Owning the Selection" のときのビジュアルモード選択。
これをサポートしているのはX11 GUIgui-x11とxterm-clipboard
のみ。
hl-WarningMsg
WarningMsg 警告メッセージ。
hl-WildMenu
WildMenu 'wildmenu' 補完における現在の候補。
hl-User1 hl-User1..9 hl-User9
'statusline' 構文によってステータスラインとルーラー('rulerformat' によって)中
で9個のハイライトが使えるようになっている。その名前はUser1からUser9である。
GUI使用時には、これらのグループを使ってメニューやスクロールバー、ツールチップ
の色を設定することができる。これらにデフォルト値はない。これはWin32では利用で
きない。ここではhighlightの引数のうちfont, guibg, guifgの3つだけが効果を持つ。
hl-Menu
Menu メニューのフォント、文字、背景。ツールバーにも使われる。
使用可能なhighlightの引数: font, guibg, guifg.
NOTE: Motifでは 'guifontset' が空かどうかにかかわらず、常に引
数fontで実際のフォントセットを指定する。そしてそれが現在の
:language に結び付けられる。
hl-Scrollbar
Scrollbar メインウィンドウのスクロールバーの文字と背景。
使用可能なhighlightの引数: guibg, guifg.
hl-Tooltip
Tooltip ツールチップのフォント、文字、背景。
使用可能なhighlightの引数: font, guibg, guifg.
NOTE: Motifでは 'guifontset' が空かどうかにかかわらず、常に引
数fontで実際のフォントセットを指定する。そしてそれが現在の
:language に結び付けられる。
==============================================================================
15. グループのリンク :hi-link :highlight-link E412 E413
複数の構文グループに対して同じハイライトを適用させるには、両方のグループから一
つのハイライトグループにリンクを作り、リンク先に対して色属性を与えると簡単であ
る。
リンクを作るには:
:hi[ghlight][!] [default] link {from-group} {to-group}
リンクを削除するには:
:hi[ghlight][!] [default] link {from-group} NONE
Notes: E414
- {from-group}か{to-group}のどちらかが存在しない場合、リンクは作成されない。こ
の場合エラーメッセージは表示されない。
- リンクされたグループに対して ":highlight" を使うと、即座にリンクが削除され
る。
- 既に{from-group}にハイライト設定がされている場合、'!' をつけないとリンクは作
成されない。sourceされたファイル中の ":highlight link" コマンドに関して、エ
ラーメッセージは表示されない。そのため既に設定を持つグループに対するリンクが
スキップされる。
:hi-default :highlight-default
引数[default]によってグループに対するデフォルトのハイライトを設定することがで
きる。そのグループに対して既にハイライトが指定されている場合、このコマンドは無
視される。既にリンクが存在する場合も同様。
[default] は、そのハイライト設定をあとから上書きさせるために使われる。例えば
C 構文ファイルは次の行を含んでいる:
:highlight default link cComment Comment
この設定を変更し、C コメントに対して Question のハイライトをつけたい場合、次の行を .vimrc に加える:
:highlight link cComment Question
"default" をつけないと、.vimrc より C 構文ファイルの方があとに読み込まれるため、.vimrc の設定を上書きしてしまう。
:highlight clear ではリンクが存続し、個別のファイルタイプでのハイライトがあ
りまた別のカラースキームから選択的に残したいものを維持するのに便利で、
"after/syntax/{filetype}.vim" ファイルにこのようにコマンドを置く:
highlight! default link cComment Question
==============================================================================
16. 構文の消去 :syn-clear E391
カレントバッファに対する構文設定を消去したいときはこのコマンドを使う:
:syntax clear
このコマンドは、構文ハイライトをオフにしたいときや他の構文を適用したいときに使
う。通常、これを構文ファイル内で行う必要はない。なぜなら、構文ファイルを読み込
む自動コマンドによって構文がクリアされる。
また、このコマンドは変数 "b:current_syntax" を削除する。このコマンドの実行後に
はすべての構文がなくなるからである。
カレントバッファに対する特定の構文グループを消去するには:
:syntax clear {group-name} ..
これは{group-name}に対する全てのパターンとキーワードを消去する。カレントバッファに対する特定の構文グループリストを消去するには:
:syntax clear @{grouplist-name} ..
これは{grouplist-name}の中身を空リストにセットする。:syntax-off :syn-off
全てのバッファに対して構文ハイライトを無効にしたいときは、構文ファイルを読み込
む自動コマンドを削除する必要がある:
:syntax off
このコマンドが実際に行うことは次のコマンドを実行するのと同じである:
:source $VIMRUNTIME/syntax/nosyntax.vim
詳細は "nosyntax.vim" を参照。これが正常に機能するためには$VIMRUNTIMEが正しく設定されている必要がある。$VIMRUNTIMEを参照。
:syntax-reset :syn-reset
色を変えたため、色がごちゃごちゃになってしまったときは、次のコマンドを使うとデ
フォルトに戻る:
:syntax reset
少々正しくない名前だが、どんなシンタックス項目もリセットせず、ただハイライトの
みに影響する。
これはオプション 'highlight' に対する色は変更しない。
ユーザーのvimrcファイル中で設定した構文色もVimのデフォルト値に戻ることに注意。
カラースキームを使っている場合、カラースキームによって定義された色は失われるこ
とに注意。
このコマンドが実際に行うことは次と同じ:
let g:syntax_cmd = "reset"
runtime! syntax/syncolor.vim
runtime! syntax/syncolor.vim
ここでオプション 'runtimepath' が使われていることに注意。
syncolor
構文ハイライトに別の色を使うには、色を設定する Vim script を作ればよい。その
ファイルを 'runtimepath' 中 ('runtimepath' は $VIMRUNTIME を含む) のディレクト
リに置くと、その設定がデフォルトの色設定を上書きする。こうして ":syntax reset"
コマンドを実行すると、それらの色が有効になる。
Unixでは~/.vim/after/syntax/syncolor.vimファイルを使うとよい。例:
if &background == "light"
highlight comment ctermfg=darkgreen guifg=darkgreen
else
highlight comment ctermfg=green guifg=green
endif
highlight comment ctermfg=darkgreen guifg=darkgreen
else
highlight comment ctermfg=green guifg=green
endif
E679
このsyncolor.vimが "syntax on" を実行しないこと、また、オプション 'background'
を設定したりコマンド "colorscheme" を実行しないように注意すること。もしこれら
を実行すると無限ループに陥ってしまう。
Note カラースキームを使用すると、ユーザー定義の色が使われるのか、それともカラー
スキームで定義された色が使われるのかわからなくなる場合がある。これはカラース
キームファイルに依存する。:colorschemeを参照。
syntax_cmd
syntax/syncolor.vimファイルが読み込まれると、変数 "syntax_cmd" に次の3つの値の
どれかがセットされる:
"on" :syntax on コマンド。ハイライト色が上書きされるがリンクはそ
のまま。
"enable" :syntax enable コマンド。まだハイライトが定義されていないグ
ループに対して色を定義するだけ。:highlight default を使うこ
と。
"reset" :syntax reset コマンドまたはカラースキームを読み込む。全ての
色を定義する。
"skip" 色を定義しない。'runtimepath' で前にあるsyncolor.vimファイルが
既にデフォルト設定をセットしているとき、そのデフォルト設定をス
キップするために使われる。
==============================================================================
17. 関数名などのハイライト tag-highlight
ファイル中の全てのタグ(関数名など)をハイライトするには、次のマッピングを使うと
よい。
<F11> -- tags.vimファイルを生成し、タグをハイライトする。
<F12> -- 既存のtags.vimファイルをもとにハイライトする。
:map <F11> :sp tags<CR>:%s/^\([^ :]*:\)\=\([^ ]*\).*/syntax keyword Tag \2/<CR>:wq! tags.vim<CR>/^<CR><F12>
:map <F12> :so tags.vim<CR>
:map <F12> :so tags.vim<CR>
警告: tagsファイルが大きくなるほどこの操作は遅くなり、消費するメモリ量も多くな
る。
typedef、union、structだけをハイライトすることもできる。そのためには Universal
Ctags (https://ctags.io で入手可能) あるいは Exuberant ctags
(http://ctags.sf.net で入手可能)が必要である。
以下をあなたのMakefileに加える:
# 型用のハイライトファイルを作成する。Universal/Exuberant ctagsとawkが必要
types: types.vim
types.vim: *.[ch]
ctags --c-kinds=gstu -o- *.[ch] |\
awk 'BEGIN{printf("syntax keyword Type\t")}\
{printf("%s ", $$1)}END{print ""}' > $@
そして以下を.vimrcに加える:
" 存在する場合、ハイライトファイル types.vim をロードする
autocmd BufRead,BufNewFile *.[ch] let fname = expand('<afile>:p:h') .. '/types.vim'
autocmd BufRead,BufNewFile *.[ch] if filereadable(fname)
autocmd BufRead,BufNewFile *.[ch] exe 'so ' .. fname
autocmd BufRead,BufNewFile *.[ch] endif
autocmd BufRead,BufNewFile *.[ch] let fname = expand('<afile>:p:h') .. '/types.vim'
autocmd BufRead,BufNewFile *.[ch] if filereadable(fname)
autocmd BufRead,BufNewFile *.[ch] exe 'so ' .. fname
autocmd BufRead,BufNewFile *.[ch] endif
==============================================================================
18. ウィンドウローカル構文 :ownsyntax
通常は同じバッファを表示するすべてのウィンドウは同じ構文設定を共有する。しかし
ながら、特定のウィンドウだけ別の構文設定を使用することも可能である。例えば一つ
のウィンドウで LaTeX のソースを普通に表示して、別のウィンドウで異なる表示をす
る (文字を隠したり太字や斜字体で表示したりする) ことが可能である。その場合は
'scrollbind' オプションを使うと便利である。
同じバッファを表示しているウィンドウが複数あって、現在のウィンドウの構文だけを
"foo" に設定するには次のようにする:
:ownsyntax foo
w:current_syntax"w:current_syntax" 変数が "foo" に設定される。"b:current_syntax" 変数の値は変
更されない。"b:current_syntax" は構文ファイルによって変更されるが、
"b:current_syntax" を一時的に保存・復元することで値が変わらないようになってい
る。構文ファイルによって設定された値が "w:current_syntax" に代入される。
Note: この設定によって 'spell', 'spellcapcheck', 'spellfile' および
'spelloptions' オプションは初期設定に戻る。
ウィンドウの独自構文が定義されると、同じバッファの他のウィンドウで実行された構
文コマンド (:syntax clear を含む) が影響しなくなる。逆に、そのウィンドウで実行
された構文コマンドも他のウィンドウには影響しなくなる。
独自構文を持ったウィンドウは他のバッファを読み込むかファイルを再読み込みするこ
とで通常の動作に戻る。
ウィンドウを分割したときは、新しいウィンドウは元々の構文を使う。
==============================================================================
19. カラー対応xterm xterm-color color-xterm
ほとんどのカラー対応xtermは8色しか持たない。デフォルト設定で色がつかない場合は
以下を .vimrc に加えれば正常に色がつくはずである:
:if &term =~ "xterm"
: if has("terminfo")
: set t_Co=8
: set t_Sf=<Esc>[3%p1%dm
: set t_Sb=<Esc>[4%p1%dm
: else
: set t_Co=8
: set t_Sf=<Esc>[3%dm
: set t_Sb=<Esc>[4%dm
: endif
:endif
[<Esc>はエスケープ文字そのもの。CTRL-V <Esc>とタイプして入力する]: if has("terminfo")
: set t_Co=8
: set t_Sf=<Esc>[3%p1%dm
: set t_Sb=<Esc>[4%p1%dm
: else
: set t_Co=8
: set t_Sf=<Esc>[3%dm
: set t_Sb=<Esc>[4%dm
: endif
:endif
最初の "if" を自分のターミナル名にマッチするように変更する必要があるかもしれな
い。例: "xterm" でなく "dtterm"。
Note: これらの設定は ":syntax on" の前に行うこと。そうでないと色がおかしくなっ
てしまう。
xiterm rxvt
上の設定はxitermとrxvtでも動作するように注意されている。しかしrxvtで16色を使う
場合にはterminfoを設定しなければならない:
:set t_AB=<Esc>[%?%p1%{8}%<%t25;%p1%{40}%+%e5;%p1%{32}%+%;%dm
:set t_AF=<Esc>[%?%p1%{8}%<%t22;%p1%{30}%+%e1;%p1%{22}%+%;%dm
:set t_AF=<Esc>[%?%p1%{8}%<%t22;%p1%{30}%+%e1;%p1%{22}%+%;%dm
colortest.vim
色設定をテストするためのファイルがVimディストリビューションに入っている。これ
を使うには次のコマンドを実行する:
:runtime syntax/colortest.vim
xtermのあるバージョン(とlinuxコンソールのようなターミナル)は、たとえ色数が8に
定義されていても、より明るい文字色を出力することができる。そのため 't_Co' が8
のとき、Vimは明るい文字色に対して "cterm=bold" 属性をセットする。
xfree-xterm
16色以上を使うにはxtermの最新バージョンを入手すること(XFree86 3.3以降に含まれ
ているはずである)。また、以下の場所でも最新バージョンを入手できる:
次にそれをconfigureするよい方法を示す。これは88色を使い、termcap-query機能を有
効化する。これによってVimがxtermに何色をサポートしているか問い合わせることがで
きるようになる
./configure --disable-bold-color --enable-88-color --enable-tcap-query
もし8色しか使えなかったらxtermのコンパイル設定を確認すること。(このxtermをUTF-8エンコーディングで使う場合にはUTF8-xtermも参照)。
以下を.vimrcに加えるとこのxtermで動くはずである(16色用):
:if has("terminfo")
: set t_Co=16
: set t_AB=<Esc>[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm
: set t_AF=<Esc>[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm
:else
: set t_Co=16
: set t_Sf=<Esc>[3%dm
: set t_Sb=<Esc>[4%dm
:endif
[<Esc>はエスケープ文字そのもの。CTRL-V <Esc>とタイプして入力する]: set t_Co=16
: set t_AB=<Esc>[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm
: set t_AF=<Esc>[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm
:else
: set t_Co=16
: set t_Sf=<Esc>[3%dm
: set t_Sb=<Esc>[4%dm
:endif
+terminfoなしではVimはこれらの設定を認識し、自動的にctermの8色と上の設定を
"<Esc>[9%dm" と "<Esc>[10%dm" に変換する。16色以上も自動的に変換される。
以下の設定が256色用にうまくいくと報告されている:
:set t_AB=<Esc>[48;5;%dm
:set t_AF=<Esc>[38;5;%dm
:set t_AF=<Esc>[38;5;%dm
または単にTERM環境変数を "xterm-color" または "xterm-16color" にセットし、うま
くいくか試してみるとよい。
以下のX resourcesを(~/.Xdefaultsファイルで)使いたいかもしれない:
XTerm*color0: #000000
XTerm*color1: #c00000
XTerm*color2: #008000
XTerm*color3: #808000
XTerm*color4: #0000c0
XTerm*color5: #c000c0
XTerm*color6: #008080
XTerm*color7: #c0c0c0
XTerm*color8: #808080
XTerm*color9: #ff6060
XTerm*color10: #00ff00
XTerm*color11: #ffff00
XTerm*color12: #8080ff
XTerm*color13: #ff40ff
XTerm*color14: #00ffff
XTerm*color15: #ffffff
Xterm*cursorColor: Black
[Note: cursorColorにはバグがある。カーソルの色が最後に描画されたテキストの色に
なってしまうというものである。これはxtermの新しいバージョンを使うと解決する
が、まだ全ての人がそれを使っているわけではない。]
これらを即座に更新するには.XdefaultsファイルをXオプションデータベースマネー
ジャーに再読み込みさせる(.Xdefaultsを変更したときはこれを行う必要がある):
xrdb -merge ~/.Xdefaults
xterm-blink xterm-blinking-cursor
xtermでカーソルを点滅させるにはtools/blink.cを見ること。またはThomas Dickeyの
xtermのパッチレベル107以上を使い(入手場所は上を参照)、以下のリソースを設定す
る。
XTerm*cursorBlink: on
XTerm*cursorOnTime: 400
XTerm*cursorOffTime: 250
XTerm*cursorColor: White
hpterm-color
次の設定はhptermで(大体)うまく機能する。文字色は8色だけサポートしている:
:if has("terminfo")
: set t_Co=8
: set t_Sf=<Esc>[&v%p1%dS
: set t_Sb=<Esc>[&v7S
:else
: set t_Co=8
: set t_Sf=<Esc>[&v%dS
: set t_Sb=<Esc>[&v7S
:endif
[<Esc>はエスケープ文字そのもの。CTRL-V <Esc>とタイプして入力する]: set t_Co=8
: set t_Sf=<Esc>[&v%p1%dS
: set t_Sb=<Esc>[&v7S
:else
: set t_Co=8
: set t_Sf=<Esc>[&v%dS
: set t_Sb=<Esc>[&v7S
:endif
Eterm enlightened-terminal
次の設定がEnlightenedターミナルエミュレータまたはEtermで機能すると報告されてい
る。また、明るい色を表示するのにbold属性を使うxtermライクターミナル全てで機能
すると思われる。必要なら前述のように ":if" をつけること。
:set t_Co=16
:set t_AF=^[[%?%p1%{8}%<%t3%p1%d%e%p1%{22}%+%d;1%;m
:set t_AB=^[[%?%p1%{8}%<%t4%p1%d%e%p1%{32}%+%d;1%;m
:set t_AF=^[[%?%p1%{8}%<%t3%p1%d%e%p1%{22}%+%d;1%;m
:set t_AB=^[[%?%p1%{8}%<%t4%p1%d%e%p1%{32}%+%d;1%;m
TTpro-telnet
次の設定がTTpro telnet用にうまくいく。Tera Term ProはMS-Windows用のフリーウェ
ア/オープンソースプログラムである。
set t_Co=16
set t_AB=^[[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{32}%+5;%;%dm
set t_AF=^[[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{22}%+1;%;%dm
また、TTproのSetup→Window→Full Colorが有効になっていることと、set t_AB=^[[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{32}%+5;%;%dm
set t_AF=^[[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{22}%+1;%;%dm
Setup→Font→Enable Boldが無効になっていることを確認すること。
(この情報はJohn Love-Jensen <eljay@Adobe.COM>によって提供された)
==============================================================================
20. シンタックスが遅い時には :syntime
この章はシンタックスファイルを作る人向けである。
もしあなたの作ったシンタックスにより再描画が遅くなってしまったら、ここに書いた
方法でそれを速くできるかもしれない。folding や 'relativenumber' といった機能
を有効化すると、それらが干渉して遅くなる場合もある。
Note: +profile 機能付きでコンパイルされた時のみ利用可能である。
"huge" 機能付きでVimをビルドする必要があるかもしれない。
時間のかかっているシンタックスパターンを発見するために、以下の様な手順で概要を
得られる:
:syntime on
[ CTRL-L で最低でも一度は再描画を実行する ]
:syntime report
[ CTRL-L で最低でも一度は再描画を実行する ]
:syntime report
これにより利用されたシンタックスパターンが、マッチにかかった時間の多い順にソー
トして表示される。
:syntime on シンタックスにかかる時間の測定を開始する。測定をするに
はシンタックスパターンのマッチに多少のオーバーヘッドが
発生する。
:syntime off シンタックスの計測を終了する。
:syntime clear 全部のカウンタを 0 にし、計測をやり直す。
:syntime report 現在のウィンドウで ":syntime on" してから使用されたシ
ンタックス要素を表示する。出力される内容をちゃんと読む
には幅の広いディスプレイを使ったほうが良い。
リストは総時間(TOTAL)でソートされている。
リストには以下のカラムからなる:
TOTAL パターンのマッチにかかった総時間
COUNT パターンが使われた回数
MATCH パターンが実際にマッチした回数
SLOWEST マッチ1回あたりの最長時間
AVERAGE マッチ1回あたりの平均時間
NAME シンタックス要素の名前。Note 一意な名
前ではないことに注意。
PATTERN 使用されたパターン
パターンマッチングは多くの可能性を試さなければならないときに遅くなる。パターン
にできる限り多くのリテラルテキストを含むことで、パターンが無駄にマッチする可能
性を減らすよう試してみると良い。
"\@<=" や "\@<!" 要素を使用する時は、マッチする最大サイズを指定すると現在以降
の行の全部の位置でパターンを試すことを避けられる。
例えば要素のマッチするものがリテラルテキストならば、そのテキストのサイズをバイ
ト数で指定すると良い。
"<\@<=span" "<span" 中の "span" にマッチする。これは "<" があるかどうか多
くの場所でマッチを試みる。(ゆえに遅くなりやすい)
"<\@1<=span" 同じものにマッチするが、"span" の前の1バイトだけをチェックす
る。
vim:tw=78:sw=4:ts=8:noet:ft=help:norl: