Sublime Text 3 に PackageDev を使用してオリジナルのシンタックスハイライト設定を作る試み
経緯
はてな記法を使ってテキストエディタで文章を書くことが多いので、はてな記法用のシンタックスハイライトを作りたい。
- 2018-10-24 追記
- .YAML-tmLanguageファイルの書き方がガラリとかわっていたので、この記事の内容は使えない。後日再チャレンジする。
- 2020-07-08 追記
- PackageDevの新規ファイル作成・コンバート手順・.YAML-tmLanguageファイルの書き方がちょっとわかったので使えるようになった。
手順
- Package Controlで「PackageDev」を検索してインストール
- Package Controlで「PackageDev: New TextMate Syntax Definition (YAML)」を検索して実行
- 生成されたファイルを保存
- ファイル名:
任意.YAML-tmLanguage
- 保存場所(Mac):
~/Library/Application Support/Sublime Text 3/Packages/User
- 保存場所(Windows):
C:\Users\ユーザー名\AppData\Roaming\Sublime Text 3\Packages\User
- ファイル名:
- 中身を書き換えて上書き保存
- コンバートする
- Build With を実行
- Mac:
cmd+shift+B
- Windows:
ctrl+shift+B
- ツールバーから実行する場合は Tools > Build With…
- Mac:
- 「Convert To… – Property List」を選んで実行
- Build With を実行
- 先程保存した場所に拡張子が.tmLanguageになった同名のXML形式ファイルが生成される
- 再起動して完了
記述内容
name
syntax difinition のドロップダウンリストに表示される名前
scopeName
- 形式:source.lang_name または text.lang_name
- プログラミング言語ならsource、マークアップなどそれ以外の場合はtext。
- lang_nameには対応する拡張子を記述。
fileTypes
- 利用するファイルの種類。記述した種類を開いたときに自動的に適用されるようになる。
- 例:[txt](テキストファイル)
uuid
自動生成されるユニークID。編集不要。
pattern
本文にあたるところ。書き方調べ中。
複数行・複数条件での一致/適用させるのはできないっぽい。
ソース
hatena.YAML-tmLanguage(作成中)
# [PackageDev] target_format: plist, ext: tmLanguage
---
name: Hatena Notation
scopeName: text.txt
fileTypes: [txt]
uuid: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
patterns:
- name: markup.heading
match: '^\*(.*)'
comment: 見出し
- name: comment.line.double-slash
match: '^\={2,}'
comment: readmore
- name: markup.underline.link
match: '\[[^=]+\:{1,2}title\=[^\]]+\]'
comment: リンク記法
- name: markup.underline.link
match: '^https?\:\/\/.+$'
comment: リンク記法(個人で拡張したもの)
- name: markup.underline.link
match: '\[https?:\/\/[^\]]+\]'
comment: リンク記法(個人で拡張したもの)
- name: markup.bold
match: '>\|([a-z]+)?\|\n'
comment: pre(開始)
- name: markup.bold
match: '^\|\|<$'
comment: pre(閉じ)
- name: comment.line
match: '^>>$'
comment: 引用(開始)
- name: comment.line
match: '^<<$'
comment: 引用(閉じ)
# - name:
# match: '^\-(.*)'
# comment: 項目リスト
# - name:
# match: '^\+(.*)'
# comment: 項目リスト
...