11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Sublime Text 2 言語パッケージ作成:言語設定

Last updated at Posted at 2013-03-16

構文定義編の続き(のつもり)です。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"
}

ここまでは構文定義ファイルの作り方と同じです。言語設定ファイルにするために、

  1. scopeNamescope に変更します。
  2. fileTypespatterns の行を消します。
  3. settings の行を追加します。
{ "name": "Syntax Name",
  "scope": "source.syntax_name",
  "settings": {
  },
  "uuid": "d93c1c4c-13e2-4365-94c3-3572ed32afa4"
}

このファイルを、「任意の名前.JSON-tmPreferences」という名前で保存します。後の項で settings の中身を書いていきます。

tmPreferences への変換

  1. Tools > Build System で Json to tmLanguage を選択します。(メニューに表示されていない場合は、Sublime を再起動します)
  2. F7 キーを押します。
  3. .JSON-tmPreferences ファイルと同じフォルダに*.tmPreferences* が作成されます。

設定ファイルで設定できること

  • スペルチェック
  • インデント定義
  • シンボルリストへ表示する条件
  • スコープ内だけに適用される変数

TextMate Manual > Preferences Items 設定アイテム に TextMate での記法が解説されています。ただし、「ペアになる文字」は Sublime Text 2 の場合記載不要です。

次の「スペルチェック」の項で tmPreferences の settings の書き方を説明します。その他の項目も書き方が同じなので、settings 以外の部分を割愛して説明します。

スペルチェック

*.JSON-tmPreferences
    "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 でブロックコメントとして使えます。

11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?