構文定義編の続き(のつもり)です。Sublime Textとして言語設定ファイル(tmPreferences)の解説をしてあるサイトがほとんど存在しないため、TextMateのマニュアルを参考にしています。
事前準備
構文定義編と同じく、AAAPackageDev をインストールします。構文定義ファイルと同様に、言語設定ファイルも json で書き、後で XML に変換します。
JSON-tmPreferences の作成
メニューから Tools > Packages > Package Development> New Syntax Definition とアクセスして、ファイルを作成します。エディタにはこのように表示されているはずです。
{ "name": "Syntax Name",
"scopeName": "source.syntax_name",
"fileTypes": [""],
"patterns": [
],
"uuid": "d93c1c4c-13e2-4365-94c3-3572ed32afa4"
}
ここまでは構文定義ファイルの作り方と同じです。言語設定ファイルにするために、
- scopeName を scope に変更します。
- fileTypes と patterns の行を消します。
- settings の行を追加します。
{ "name": "Syntax Name",
"scope": "source.syntax_name",
"settings": {
},
"uuid": "d93c1c4c-13e2-4365-94c3-3572ed32afa4"
}
このファイルを、「任意の名前.JSON-tmPreferences」という名前で保存します。後の項で settings の中身を書いていきます。
tmPreferences への変換
- Tools > Build System で Json to tmLanguage を選択します。(メニューに表示されていない場合は、Sublime を再起動します)
-
F7
キーを押します。 - .JSON-tmPreferences ファイルと同じフォルダに*.tmPreferences* が作成されます。
設定ファイルで設定できること
- スペルチェック
- インデント定義
- シンボルリストへ表示する条件
- スコープ内だけに適用される変数
TextMate Manual > Preferences Items 設定アイテム に TextMate での記法が解説されています。ただし、「ペアになる文字」は Sublime Text 2 の場合記載不要です。
次の「スペルチェック」の項で tmPreferences の settings の書き方を説明します。その他の項目も書き方が同じなので、settings 以外の部分を割愛して説明します。
スペルチェック
"settings": {
"spellChecking": 1
},
name は何でもよいです。
構文定義ファイルで設定した scope で、設定の適用範囲を(例えばコメントの中、リテラル文字列などに)絞り込むことができます。カンマ区切りで2つ以上のスコープを指定できます。
settings に "spellChecking": 1 と書くと、指定したスコープの中の文字がスペルチェックの対象になります。
Sublime Text 2 では、スペルチェックがデフォルトで無効となっています。有効にするには、Preferences -> Settings - User で "spell_check": true
とします。
インデント定義
詳しい解説は、TextMate Manual > Appendix - Indentation Rules にあります。
私自身がうまくいっていないので、うまくいくまでここでの解説は控えます。定義しなくてもそこそこインデントしてくれているし。
シンボルリスト表示定義
"settings": {
"showInSymbolList": 1,
"symbolTransformation": "s/(.+)/\\t - $1/"
},
showInSymbolList で、 scope にヒットする内容がシンボルリスト (Goto -> Goto Symbol...) に表示されるようになります。
デフォルトではヒットした内容そのものがリストに表示されます。しかし、symbolTransformation を使うと、ヒットした内容を加工して表示できます。構文は s/条件/置換後の文字列/ です。
基本、最初に条件にヒットした文字列だけを置換します。最後に "g" をつけると、条件に合う文字列全てを置換します。
条件の中でカッコ()を使うと、置換後の文字列に $1, $2, ... と指定してカッコ内の文字を参照できます。
上の例では、スコープにあてはまる文字列全体の前に、タブとハイフンをつけています。シンボルリストを表示すると、下のスクリーンショットの2〜4行目のようになります。
スコープ内変数
"settings": {
"shellVariables": [
{
"name": "TM_COMMENT_START",
"value": "// "
},
{
"name": "TM_COMMENT_START_2",
"value": "/* "
},
{
"name": "TM_COMMENT_END_2",
"value": " */"
}
]
},
shellVariables に定義すると、プラグインのスニペット (.sublime_snippet) がそのスコープを対象に処理を行っている間は、name 変数に value が設定されます。スニペット内では例えば $TM_COMMENT_START のようにして参照できます。スニペットの作り方は補完定義編を参照してください。
TextMate で使えていた TM_COMMENT_START 変数群が Sublime Text でも使えます。TM_COMMENT_START が行コメント、TM_COMMENT_START_2 と TM_COMMENT_END_2 でブロックコメントとして使えます。