RSS

Sublime Text 2のScope Nameについて知る


以前のエントリSublime Text 2で編集中のファイルの種類を取得するでも出てきましたが、Sublime Text 2ではscope_nameというものが出てきます。

たとえば Consoleで以下のようなコマンドを実行すると取得できます。
[python]
>>> view.scope_name(view.sel()[0].begin()).strip().split(\’ \’)[0]
u\’source.python\’
[/python]

または ショートカットキーの編集で、条件(context)としてkeyにselectorを指定した場合、オペランドに指定するのはscope nameになります。
[javascript highlight=\”2\”]
{ "keys": ["ctrl+alt+shift+z"], "command": "new_window",
"context": [ { "key": "selector", "operator": "equal", "operand": "source.perl" } ]
}
[/javascript]


scope_nameはどこを見ればわかるのでしょう?国際規格でしょうか?ルールがあるんでしょうか?はたまた一律 source.XXXX というスタイルなのでしょうか?
答えはどれも違います。

scope_name はそれぞれのスタイル用の tmLanguage ファイルに定義されています。
pythonならPython.tmLanguageです。

tmLanguageファイルはどこにあるのでしょう。
主にプラグインを追加するパッケージのディレクトリにおいてあります。
メニューから[Preferences] - [Browse Packages]と選択すればパッケージのディレクトリが出てきます。
Pythonディレクトリを探して中を開いてみると、そこにPython.tmLanguageがあるはずです。

そしてそのファイルの最後のほうに・・・
[xml highlight=\”2\”]
<key>scopeName</key>
<string>source.python</string>
<key>uuid</key>
<string>F23DB5B2-7D08-11D9-A709-000D93B6E43C</string>
</dict>
</plist>
[/xml]
ありましたね。この文字列を元に表示されます。ですので、言語ごとに異なります。

今見たのはファイル自体を示す名前ですが、もっと細かいスコープに関する名前もここで名づけられています。

たとえばpythonファイルの複数行文字列の中にカーソルを置いた状態でscope_nameを以下のようにsplitなどせずに表示します。
[python]
>>> view.scope_name(view.sel()[0].begin())
u\’source.python string.quoted.double.block.python \’
[/python]
右側に出ている string.quoted.double.block.python の文字列。
この文字列をさっきのPython.tmLanguageで検索してみてください。きっと見つかるはずです。

これ以上は細かくなりすぎるのでここまでにします。
あとはドキュメントなどを参照してみてください。

  1. コメントはまだありません。

  1. トラックバックはまだありません。

*