CotEditor 7.0での重要な変更
2026年にリリースされたCotEditor 7.0.0では、シンタックス定義の仕様が改訂されました。従来は.yml拡張子のYAML形式でしたが、新しいフォーマットでは独自の.cotsyntax拡張子を持つパッケージファイルになりました。
CotEditorに内蔵されている70種類のシンタックスは、すべてこの新しいフォーマットに移行しています。また、従来から使っていたカスタムシンタックスも自動的に新しいフォーマットへ移行されるため、基本的には何も気にせずそのままCotEditor 7を使い始められます。
一方で、CotEditor 7には、シンタックス定義のフォーマット変更だけでなく、解析機能の改良も数多く含まれています。そのため、カスタムシンタックスでCotEditor 7の機能を十分に活かすには、定義の調整が必要になる場合があります。このページでは、カスタムシンタックスを作成しているユーザ向けに、CotEditor 7でのシンタックス定義の主な変更点を解説します。
新フォーマットへの移行
ユーザが作成したカスタムシンタックスは、CotEditor 7の初回起動時に新しいフォーマットへ自動的に移行されます。一方、CotEditorに内蔵されているシンタックスに加えていたカスタマイズはリセットされ、CotEditor 7には引き継がれません。必要に応じて、あらためて設定してください。
あとから旧YAML形式のシンタックス定義を変換したい場合は、「フォーマット」設定の「読み込み」で取り込めます。読み込んだ定義は自動的に新しいフォーマットへ変換されます(この互換機能は将来削除される予定です)。
ヒント: 従来のカスタムシンタックスは、「~/Library/Containers/com.coteditor.CotEditor/Data/Library/Application Support/CotEditor/Syntaxes (Legacy, before 7.0)」フォルダに残されます。CotEditor 7以降ではこれらのファイルは使用されないため、不要であれば削除して構いません。
正規表現方式とtree-sitter方式
CotEditor 7では、内蔵シンタックスのうち次の22種類で、シンタックス解析に汎用パーサであるtree-sitterを使用するようになりました:
- tree-sitter対応シンタックス
- C、C#、C++、CSS、Go、HTML、Java、JavaScript、Kotlin、LaTeX、Lua、Makefile、Markdown(アウトライン抽出のみ)、PHP、Python、Ruby、Rust、Scala、Shell Script、SQL、Swift、TypeScript
それ以外の内蔵シンタックスと、ユーザが作成するカスタムシンタックスでは、従来どおり正規表現ベースのパターンマッチング方式を使用します。
tree-sitterによるハイライトとアウトライン抽出のルールはアプリ側で管理されているため、ユーザがカスタマイズしたり、別のシンタックスにtree-sitter対応を追加したりすることはできません。一方、正規表現ベースのシンタックスでは、ハイライトルールやアウトライン抽出パターンをカスタマイズできます。シンタックスエディタで、内蔵シンタックスを調整したり、新しいシンタックスを一から作成したりできます。
区切り文字の定義
CotEditorでは、コメントや文字列の区切り文字("…"など)を通常のパターンマッチングとは別の仕組みでパースすることで、文字列の内部にコメント開始記号が含まれるような入れ子構造でも正しくハイライトできるようにしていました。CotEditor 7ではこの仕組みを強化し、区切り文字専用の定義を設けることで、より安定したパースを実現します。
また、この区切り文字定義は、シンタックスハイライトだけでなく、コメントアウトコマンドや自動インデントなど、テキスト編集中のエディタの振る舞いにも使われます。
シンタックスエディタに新設された「区切り文字」のペインで、これらの定義が編集できます。
コメント記号
従来のCotEditorでは、各シンタックスでインラインコメントとブロックコメントをそれぞれ1種類までしか登録できませんでした。CotEditor 7では、複数のコメント記号を追加できるようになりました。
また、インラインコメントには「行頭のみ」、ブロックコメントには「ネスト」という新しいオプションも追加されています。シンタックスの文法に合わせてこれらのオプションを適切に設定することで、より破綻の少ないハイライトを実現できます。
インデント
CotEditorには、改行した行のインデントに合わせて次の行のインデントを調整する「入力中に自動でインデント」というオプションがあります。従来は、シンタックスに関わらず「:」や「{」の直後で改行すると、自動的に次の行のインデントレベルを1段深くしていました。CotEditor 7では、インデントの「ブロック区切り」を設定することで、インデントのレベルを変更するトークンをシンタックスごとに指定できるようになりました。
暗黙の区切り文字考慮の廃止
従来のCotEditorでは、シンタックスハイライトの定義から区切り文字に相当する定義を自動で選別しハイライトに利用していました。新しい方式では、この暗黙の区切り文字抽出は行われません。また、従来はすべてのシンタックスで一律に「\」(バックスラッシュ)をエスケープ文字として扱っていましたが、この暗黙のエスケープも廃止されました。今後は、文字列区切りや文字区切りごとに明示的に指定したエスケープ文字だけが使用されます。
したがって、文字列や文字、コメント記号などの入れ子構造を考慮したハイライトを行いたい場合は、この「区切り文字」の定義を活用してください。なお、従来のシンタックス解析で「区切り文字のような定義」と判断されていた定義は、CotEditor 7への移行時に、自動的に新しい区切り文字定義へ移されます。
アウトライン抽出
アウトライン抽出ルールに「種類」というオプションが追加されました。抽出したアウトライン項目に種類に応じたアイコンが付くようになったほか、一部の種類ではアウトラインを折りたためるようになります。
アウトラインの階層化
CotEditor 7では、tree-sitter方式のシンタックスでアウトラインが階層化され、アウトラインメニューで項目を折りたためるようになりました。一方、ユーザがカスタマイズできる正規表現方式では、この機能はアウトライン項目の種類がレベル付きの「見出し」のときに限って有効です。レベル付きの見出しとして定義したアウトライン項目には、パーサが自動的にインデントを追加するため、抽出ルールの「表示パターン」にインデントを含める必要はありません。
アウトライン項目のスタイル指定の廃止
従来のCotEditorでは、アウトライン項目ごとに太字や下線などの表示スタイルを設定できましたが、CotEditor 7ではこの機能は廃止されました。「種類」が「コンテナ」または「マーク」の項目だけが、自動的に太字で表示されます。
正規表現ベースのハイライトの定義
パターンマッチングルールに新たに「複数行」というオプションが追加されました。有効にすると、改行を含む複数行にまたがる一致をハイライトできます。デフォルトはオフです。