gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:37:43 24 4
gpt4 key购买 nike

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

示例:

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

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

最佳答案

仅作为背景(您可能已经知道),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 作为语法。

关于javascript - 如何在 Sublime Text 上对相同的文件扩展名使用不同的语法? (JS/JSX),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41268282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com