Sublime Text 2中的每个项目文件类型设置

时间:2013-01-28 11:13:44

标签: sublimetext2

我有一个项目在梅森。我如何告诉ST2打开.html文件作为Mason的只是那个项目

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

2 个答案:

答案 0 :(得分:2)

对于那些对ST3解决方案感兴趣的人,我写了this blog post,我将在此处摘录。

首先,您需要将下面的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。

答案 1 :(得分:1)

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

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

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

请注意回车-->不得位于同一行,否则会被解释为参数。

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