热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SublimeText3中的自定义语法

如何解决《SublimeText3中的自定义语法》经验,为你挑选了1个好方法。

我正在努力找出如何使用新的.sublime-syntax样式定义在Sublime Text 3中创建一个新的语法高亮(大多数先前的答案与旧方法有关).

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

我能找到:

语法规则

范围命名规则

配色方案规则

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

我不是想创建一个主题,或者调整现有的语法定义.我只想为具有我计划用于我自己目的的扩展名的文件创建语法高亮显示.

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

    我如何知道我的语法文件及其使用的范围文件是否已成功加载和应用?

    是否有任何编译或刷新步骤,或一切都自动重新加载?

谢谢.



1> OdatNurd..:

关于如何创建自定义语法的完整讨论远远超出了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

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

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_extensionsinclude ec,我们的示例文件被调用sample.ec; 因此,由于它的名称,此语法会自动应用于此语法.

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

弹出窗口的内容将根据光标所在文件的位置而有所不同,但常见的一点是,显示的范围始终以source.example-c.

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

如此处所示,没有"范围文件"这样的东西; 该sublime-syntax文件直接将范围指定为语法规则的一部分,因此它是您创建语法时唯一需要创建的文件.它可能看起来像文件名,但它不是一个.

语法中的语法匹配规则中应用的范围需要与颜色方案中的范围一致才能突出显示语法; 这就是为什么你应该使用范围命名规则来使用所有语法共享的通用范围集,除非你还计划制定一个颜色方案以配合你的语法,但除非你使用推荐的范围,否则你的语法会赢得'与其他颜色方案配合良好,您的配色方案不适用于其他语法.

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

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

除了查看现有语法文件以了解他们如何做他们所做的事情之外,您还可以在Sublime论坛上提出更多有针对性的问题.


推荐阅读
  • vue使用
    关键词: ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 标题: ... [详细]
author-avatar
书友80922185
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有