gpt4 book ai didi

sublimetext3 - Sublime Text 3中的自定义语法

转载 作者:行者123 更新时间:2023-12-04 05:36:22 24 4
gpt4 key购买 nike

我正在努力寻找如何使用新的.sublime-syntax样式定义在Sublime Text 3中创建新的语法高亮显示(以前的大多数答案都与旧的用法有关)。


从Sublime Text Build 3084开始,添加了新的语法定义格式,扩展名为.sublime-syntax。


我可以找到:


syntax rules
scope naming rules
colour scheme rules


但是我找不到最基本的信息来详细说明这些信息如何联系在一起!

我不是要创建主题,也不是要调整现有的语法定义。我只想为我打算用于自己的扩展名的文件创建语法突出显示。


在语法定义中,我必须指定一个范围(例如scope:source.c),但是该范围文件在哪里?或者更确切地说,我在哪里创建范围文件,以及如何命名它以便加载?
我怎么知道我的语法文件及其使用的范围文件已成功加载和应用?
是否有任何编译或刷新步骤,或者是否所有内容都会自动重新加载?


谢谢。

最佳答案

关于如何创建自定义语法的完整讨论完全超出了Stack Overflow答案之类的范围。我还认为您使问题变得比实际复杂(尽管创建语法通常很复杂)。

为了引导您完成创建自定义语法的步骤,下面是一个示例。

首先,创建一个具有以下内容的文件,并将其另存为sample.ec,并保持打开状态:

// This is a line comment
if (x == 2)
y = 1
else
z = 1


您会注意到,此文件的语法设置为 Plain Text(请参见右下方的状态行),这是Sublime未知文件的默认语法。

现在,从菜单中选择 Tools > Developer > New Syntax...。出现以下缓冲区。使用 File > Save保存文件;该位置将默认为您的 User软件包。您提供的名称并不重要,但是请确保扩展名是 sublime-syntax。在我的示例中,我将文件命名为 Sample.sublime-syntax

%YAML 1.2
---
# See http://www.sublimetext.com/docs/3/syntax.html
file_extensions:
- ec
scope: source.example-c
contexts:
main:
# Strings begin and end with quotes, and use backslashes as an escape
# character
- match: '"'
scope: punctuation.definition.string.begin.example-c
push: double_quoted_string

# Comments begin with a '//' and finish at the end of the line
- match: '//'
scope: punctuation.definition.comment.example-c
push: line_comment

# Keywords are if, else for and while.
# Note that blackslashes don't need to be escaped within single quoted
# strings in YAML. When using single quoted strings, only single quotes
# need to be escaped: this is done by using two single quotes next to each
# other.
- match: '\b(if|else|for|while)\b'
scope: keyword.control.example-c

# Numbers
- match: '\b(-)?[0-9.]+\b'
scope: constant.numeric.example-c

double_quoted_string:
- meta_scope: string.quoted.double.example-c
- match: '\\.'
scope: constant.character.escape.example-c
- match: '"'
scope: punctuation.definition.string.end.example-c
pop: true

line_comment:
- meta_scope: comment.line.example-c
- match: $
pop: true


现在,使用 View > Show Console打开Sublime控制台,或按相关的键绑定。您会看到控制台的最后一行是这样的:

generating syntax summary


使控制台保持打开状态,单击语法文件,然后再次执行另一个保存操作,而不进行任何更改。同一行再次出现在控制台中。



是否有任何编译或刷新步骤,或者是否所有内容都会自动重新加载?



如此处所示,每次修改语法定义时,都会重新编译文件并缓存结果。因此,没有任何编译步骤(保存除外),并且不需要刷新任何内容。

现在,让我们将注意力转向示例文件。它仍然是打开的,语法仍然说它是 Plain Text

现在关闭文件,然后再次重新打开。快捷方式是使用 File > Open Recent > Reopen Closed File或其关联的键绑定。

请注意,既然已重新打开文件,则需要进行一些更改。首先,窗口右下角的语法名称为 Sample(或上面命名为 sublime-syntax文件的任何名称)。另一方面,文件的内容现在语法突出显示。

您看到的颜色取决于您使用的配色方案,但示例如下所示:

// This is a line comment
if (x == 2)
y = 1
else
z = 1




我怎么知道我的语法文件及其使用的范围文件已成功加载和应用?



保存更改时,您可以看到语法文件是由于缺少错误消息而编译的,并且可以通过尝试使用语法来确定它已被应用。

在这里,语法是自动使用的,但是您会发现,如果在菜单中选中 View > Syntax或单击窗口右下方的当前语法名称,则语法将出现在此处。同样,命令选项板中现在有一个名为 Set Syntax: Sample(或其他名称)的条目。

这使我们进入了您的最后一个问题。如果返回到 sublime-syntax文件,则会在顶部看到以下内容:

# See http://www.sublimetext.com/docs/3/syntax.html
file_extensions:
- ec
scope: source.example-c


首先要注意的是, file_extensions包括 ec,而我们的示例文件称为 sample.ec。因此,由于其名称,此语法自动应用于它。

现在切换到 sample.ec文件,将光标置于缓冲区中的某个位置,然后使用 Tools > Developer > Show Scope Name或按相关的键。

出现的弹出窗口的内容将根据光标在文件中的位置而有所不同,但共同点是,出现的范围始终以 source.example-c开头。



在语法定义中,我必须指定一个范围(例如scope:source.c),但是该范围文件在哪里?或者更确切地说,我在哪里创建范围文件,以及如何命名它以便加载?



如此处所示,没有“作用域文件”之类的东西。 sublime-syntax文件直接将范围指定为 syntax rules的一部分,因此它是唯一需要创建以创建语法的文件。它可能看起来像文件名,但不是一个。

语法中语法匹配规则中应用的范围需要与配色方案中的范围一致,以便突出显示语法。这就是为什么应该使用 scope naming rules来使用所有语法共享的一组通用范围的原因,除非您还打算将 make a color scheme与语法一起使用,但是除非您使用推荐的范围,否则您的语法不会与其他配色方案配合使用时效果很好,而您的配色方案对其他语法则无法正常工作。

从此开始,您可以在此处修改 sublime-syntax文件,以使其以所需方式突出显示文件。这将包括在顶部更改基本范围,应用适当的扩展,然后包括与您的语言匹配的所有规则。

如上所述,除非文件格式非常简单,否则创建与文件匹配的实际规则是语法最复杂的部分。它超出了Stack Overflow答案可以传达的范围,但是上面链接的官方文档为您提供了一些信息。

除了查看现有的语法文件以查看它们的工作方式之外,您还可以在 Sublime forum上提出更直接的问题。

关于sublimetext3 - Sublime Text 3中的自定义语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49781644/

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