我有一个在梅森的项目。我如何告诉 ST2 以 Mason 身份打开该项目的 .html 文件?
更一般地说,我如何告诉 ST2 在每个项目的基础上重新分配文件类型?
对于那些对 ST3 解决方案感兴趣的人,我写了这篇博文,我将在此处摘录。
首先,您需要将下面的 python 代码保存到您Packages/User
目录中的文件中。此目录所在的位置取决于您的系统。在 MacOS 上,它位于~/Library/Application Support/Sublime Text 3/Packages/User
. 为文件命名,例如project_specific_file_syntax.py
.
import os.path
import re
import sublime_plugin
class ProjectSpecificFileSyntax(sublime_plugin.EventListener):
def on_load(self, view):
filename = view.file_name()
if not filename:
return
syntax = self._get_project_specific_syntax(view, filename)
if syntax:
self._set_syntax(view, syntax)
def _get_project_specific_syntax(self, view, filename):
project_data = view.window().project_data()
if not project_data:
return None
syntax_settings = project_data.get('syntax_override', {})
for regex, syntax in syntax_settings.items():
if re.search(regex, filename):
return syntax
return None
def _set_syntax(self, view, syntax):
syntax_path = os.path.join('Packages', *syntax)
view.set_syntax_file('{0}.tmLanguage'.format(syntax_path))
现在,您只需要在文件中添加一个syntax_override
部分.sublime-project
,就像这样。
{
...
"syntax_override": {
"\\.html$": [ "HTML Underscore Syntax", "HTML (Underscore)" ]
}
}
该syntax_override
部分可以包含任意数量的键/值对。键应该是与文件名匹配的正则表达式。该值应该是一个包含两个字符串的数组。第一个字符串是包含语法文件的包的名称,第二个是语法的名称。在 Sublime Text 的目录结构中查找以 . 结尾的文件.tmLanguage
。这些文件的名称(减去.tmLanguage
扩展名)是您将用于第二个字符串的名称。
我只用 Sublime Text 3 对此进行了测试,但我确信它可以很容易地适应 Sublime Text 2。
Sublime Text 2 中没有原生的每个项目的语法设置。
目前,我正在使用Modellines插件作为解决方法,但它需要.html
在项目中每个文件的顶部(或底部)添加此模式行:
<!-- sublime: x_syntax Packages/Mason/Syntaxes/Mason.tmLanguage
-->
注意回车,-->
不能在同一行,否则将被解释为参数。
另一首曲目,我阅读了很多关于DetectSyntax插件的评论。我很快就尝试了,没有成功,但也许你会比我更有耐心!无论如何,如果你能让它发挥作用,我对反馈很感兴趣。