64

在尝试为 Sublime Text 2 编写自己的代码片段时,我遇到了以下两个问题:

  1. 查找范围键。我发现我可以一个一个地查看我的包并找到对声明的“范围”属性的引用。例如在~/Library/Application Support/Sublime Text 2/Packages/JavaScript/Comments.tmPreferences(我的 HTML 包中的一个文件)中有这两行:

    <key>scope</key>
    <string>source.js</string>
    

    因此,如果我希望我当前的代码片段适用于 javascript 文件,我将我的范围定义为:

    <scope>source.js</scope>
    

    我假设所有这些范围键都是根据我安装的包动态定义的。Sublime Text 是否会在我可以更轻松地参考的任何地方建立一个列表?浏览一堆包文件似乎过于乏味。

  2. 定义多个范围属性。我已经弄清楚了,以下行允许我的代码段在 HTML 和 JavaScript 文件中工作。

    <scope>text.html, source.js</scope>
    
4

5 回答 5

144

这是在 Sublime Text 2 片段中使用的范围列表 -

ActionScript: source.actionscript.2
AppleScript: source.applescript
ASP: source.asp
Batch FIle: source.dosbatch
C#: source.cs
C++: source.c++
Clojure: source.clojure
CoffeeScript: source.coffee
CSS: source.css
D: source.d
Diff: source.diff
Erlang: source.erlang
Go: source.go
GraphViz: source.dot
Groovy: source.groovy
Haskell: source.haskell
HTML: text.html(.basic)
JSP: text.html.jsp
Java: source.java
Java Properties: source.java-props
Java Doc: text.html.javadoc
JSON: source.json
Javascript: source.js
BibTex: source.bibtex
Latex Log: text.log.latex
Latex Memoir: text.tex.latex.memoir
Latex: text.tex.latex
LESS: source.css.less
TeX: text.tex
Lisp: source.lisp
Lua: source.lua
MakeFile: source.makefile
Markdown: text.html.markdown
Multi Markdown: text.html.markdown.multimarkdown
Matlab: source.matlab
Objective-C: source.objc
Objective-C++: source.objc++
OCaml campl4: source.camlp4.ocaml
OCaml: source.ocaml
OCamllex: source.ocamllex
Perl: source.perl
PHP: source.php
Regular Expression(python): source.regexp.python
Python: source.python
R Console: source.r-console
R: source.r
Ruby on Rails: source.ruby.rails
Ruby HAML: text.haml
SQL(Ruby): source.sql.ruby
Regular Expression: source.regexp
RestructuredText: text.restructuredtext
Ruby: source.ruby
SASS: source.sass
Scala: source.scala
Shell Script: source.shell
SQL: source.sql
Stylus: source.stylus
TCL: source.tcl
HTML(TCL): text.html.tcl
Plain text: text.plain
Textile: text.html.textile
XML: text.xml
XSL: text.xml.xsl
YAML: source.yaml

如果缺少任何内容,请将其添加到此要点https://gist.github.com/4705378中。

于 2013-02-04T07:39:11.560 回答
77

查看当前光标位置范围

  1. 将光标放在您希望了解范围的文件中。
  2. 使用此键盘快捷键:

    Windows : ctrl+ shift+ alt+ p
    Mac: ctrl + shift+p

  3. 当前范围将显示在 Windows 的状态栏左侧,或 Mac 的弹出窗口中。

使用这些作为文件中的<scope>foo.sublime-snippet

返回的范围从通用到特定列出。选择最适合将片段“限定”到它应该可用于选项卡触发器的范围。

于 2013-04-09T19:49:48.730 回答
8

Isaac Muse有一个名为Scope Hunter的包,它对此非常有帮助。

它可以向您显示文档中任何光标下的范围,我发现这在调试我自己的代码段时非常有用。有时它非常详细;我最前面的文档中的示例范围:

Scope: text.tex.latex
       meta.function.environment.list.latex
       meta.function.environment.general.latex
       meta.function.environment.math.latex
       string.other.math.block.environment.latex
       meta.group.braces.tex
       meta.space-after-command.latex

(为便于阅读包装)

如果我花了一周的时间将 SL2 拆开,我将无法发现这一点,但这个包在几秒钟内就能搞定。强烈推荐。

这种详细程度还意味着您可以根据需要以非常精细的方式定义片段。例如,meta.function.environment.list.latex广泛对应于 LaTeX 中的列表,所以我有一个片段,\item当我在列表环境中按 super+enter 时插入一个新的,但没有其他人。与盲目猜测相比,我可以更有效地定位片段。

源代码Github中,也可以通过Package Control安装。

于 2013-05-24T10:36:48.930 回答
7

实际上,您可以使用 Ctrl+Alt+Shift+P(不使用 Scope Hunter),它会在 Col/Line 信息之后的左侧底部栏上显示范围。这是相当小的印刷品,但它就在那里。

于 2013-12-25T08:52:11.583 回答
5

要回答 #1,请查看语法的.tmLanguage文件,查找键:scopeName. 这是该语法用于片段范围值的内容。

例如,nathos / sass-textmate-bundle的摘录

<key>scopeName</key>
<string>source.sass</string>

所以你会source.sass在你的片段中使用。

这是有关定义语法的更多信息

于 2013-02-08T22:23:25.273 回答