Как использовать другой синтаксис для одного и того же расширения файла в Sublime Text? (JS/JSX)

Можно ли в Sublime Text использовать другой синтаксис для одного и того же расширения файла в зависимости от открытого в данный момент проекта?

Пример:

  • Проект A: file.js содержит классический Javascript
  • Проект B: file.js содержит JSX

Как я могу получить синтаксис JavaScript для проекта A и синтаксис Babel для проекта B?


person saawsann    schedule 21.12.2016    source источник


Ответы (1)


Просто для фона (который вы, вероятно, уже знаете), Sublime Text применяет синтаксис через расширение файла и переопределение, которое требует от вас использования View > Syntax > Open all with current extension as... из меню. Это создает специфичное для синтаксиса переопределение, которое появляется в определенном имени файла и, таким образом, не может быть переопределено напрямую для каждого проекта.

Тем не менее, синтаксис можно поменять самостоятельно (например, через палитру команд), что открывает возможность того, что плагин сможет сделать это за вас. Может существовать плагин, который делает это в PackageControl, но для справки, вот пример, основанный на том, что я использую для схожей цели.

Далее предполагается, что вы используете плагин Babel для подсветки синтаксиса, поскольку вы упоминаете Babel. Это необходимо изменить, если это не тот пакет, который вы используете. Это также можно изменить, чтобы аналогичным образом выполнить обмен для другого типа файла, если это необходимо.

Чтобы использовать это, выберите Tools > Developer > New Plugin в меню и замените все содержимое файла образца приведенным ниже кодом, а затем сохраните его как файл python в каталоге, который предлагает Sublime (который должен быть в Packages\User). Я назвал свой js_syntax_swap.py, но имя не имеет значения, если расширение .py:

import sublime, sublime_plugin

# Standard Sublime JavaScript syntax file is:
#     'Packages/JavaScript/JavaScript.sublime-syntax'
#
# The Babel package syntax is:
#     'Packages/Babel/JavaScript (Babel).sublime-syntax'
class JavaScriptSyntaxSwap (sublime_plugin.EventListener):
    def modify_syntax (self, view):
        if view.window () == None:
            return

        swapSyntax = view.settings ().get ('using_babel_js', False)
        curSyntax  = view.settings ().get ('syntax')
        variables  = view.window ().extract_variables ()
        extension  = variables['file_extension']

        if swapSyntax is True and extension == 'js' and "Babel" not in curSyntax:
            view.set_syntax_file ('Packages/Babel/JavaScript (Babel).sublime-syntax')

    def on_load (self, view):
        self.modify_syntax (view)

    def on_post_save (self, view):
        self.modify_syntax (view)

При этом, если вы выберете Project > Edit Project в меню, вы можете включить параметр using_babel_js, чтобы включить плагин для файлов JavaScript в этом проекте. Примером может быть:

{
    "folders":
    [
        {
            "path": "."
        }
    ],
    "settings":
    {
        "using_babel_js": true
    }
}

Это проверяет каждый раз, когда вы загружаете или сохраняете файл, чтобы увидеть, должен ли он поменять синтаксис по умолчанию на синтаксис Babel JSX, что он делает только для файлов с расширением .js, которые еще не используют Babel в качестве синтаксиса. .

person OdatNurd    schedule 21.12.2016