如何在Sublime Text上使用不同语法的相同文件扩展名? (JS / JSX)

时间:2016-12-21 17:11:04

标签: javascript sublimetext3 syntax-highlighting jsx

使用Sublime Text,是否可以根据当前打开的项目对同一文件扩展名使用不同的语法?

示例:

  • 项目A:file.js包含经典Javascript
  • 项目B:file.js包含JSX

如何获取Project B的项目A和Babel语法的JavaScript语法?

1 个答案:

答案 0 :(得分:2)

只是为了背景(您可能已经知道),Sublime Text通过文件的扩展名应用语法,并且覆盖它需要您从菜单中使用View > Syntax > Open all with current extension as...。这会创建一个特定于语法的覆盖,它出现在特定的文件名中,因此不能在每个项目的基础上直接覆盖。

也就是说,可以自己交换语法(例如通过命令调色板),这样就可以让插件能够为你做到这一点。可能有一个现有插件在PackageControl中执行此操作,但出于参考目的,此处是基于我出于类似目的使用的示例。

以下假设您使用Babel插件来突出显示语法,因为您提到了Babel。如果这不是您正在使用的包,则需要进行修改。如果需要,也可以将其修改为类似地对不同类型的文件进行交换。

要使用此功能,请从菜单中选择Tools > Developer > New Plugin,并使用以下代码替换示例文件的全部内容,然后将其保存为Sublime建议的目录中的python文件(应该在{ {1}})。我将我的名字命名为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设置以启用该项目中JavaScript文件的插件。一个例子可能是:

using_babel_js

每次加载或保存文件时都要检查它是否应该将语法从默认语言交换为Babel JSX语法,它只对扩展名为{ "folders": [ { "path": "." } ], "settings": { "using_babel_js": true } } 的文件进行交换。尚未使用Babel作为语法。