3

我有一个在梅森的项目。我如何告诉 ST2 以 Mason 身份打开该项目的 .html 文件?

更一般地说,我如何告诉 ST2 在每个项目的基础上重新分配文件类型?

4

2 回答 2

2

对于那些对 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。

于 2014-09-26T21:24:28.157 回答
1

Sublime Text 2 中没有原生的每个项目的语法设置。

目前,我正在使用Modellines插件作为解决方法,但它需要.html在项目中每个文件的顶部(或底部)添加此模式行:

<!-- sublime: x_syntax Packages/Mason/Syntaxes/Mason.tmLanguage
-->

注意回车-->不能在同一行,否则将被解释为参数。

另一首曲目,我阅读了很多关于DetectSyntax插件的评论。我很快就尝试了,没有成功,但也许你会比我更有耐心!无论如何,如果你能让它发挥作用,我对反馈很感兴趣。

于 2013-02-13T10:42:15.013 回答