2016-12-21 1 views
1

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

Пример:

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

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

ответ

2

Только для фона (который вы, вероятно, уже знаете), 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 
    } 
} 

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