【发布时间】:2016-12-21 17:11:04
【问题描述】:
使用 Sublime Text,是否可以根据当前打开的项目对相同的文件扩展名使用不同的语法?
例子:
- 项目 A:
file.js包含经典 Javascript - 项目 B:
file.js包含 JSX
如何获取项目 A 的 JavaScript 语法和项目 B 的 Babel 语法?
【问题讨论】:
标签: javascript sublimetext3 syntax-highlighting jsx
使用 Sublime Text,是否可以根据当前打开的项目对相同的文件扩展名使用不同的语法?
例子:
file.js 包含经典 Javascriptfile.js 包含 JSX如何获取项目 A 的 JavaScript 语法和项目 B 的 Babel 语法?
【问题讨论】:
标签: javascript sublimetext3 syntax-highlighting jsx
仅作为背景(您可能已经知道),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 作为语法。
【讨论】: