Sublime text:如何自定义语法高亮?

问题描述 投票:0回答:3

我使用Smarty生成html模板。我目前使用 html 突出显示,这基本上很好,除了它不突出显示 smarty 标签,例如

{foreach}
我尝试安装 Smarty 软件包,但看起来不太好。

所以基本上我需要能够将大括号内任何内容的突出显示添加到标准 HTML 着色中。 这怎么办?

sublimetext2 sublimetext
3个回答
26
投票

背景

@MattDMo 是正确的,

.tmTheme
文件是控制突出显示的主要文件。它是一个 XML 文件,包含一系列正则表达式和标记,指示哪个正则表达式与哪种类型的语法元素匹配。

你可以在 GitHub 上搜索,发现很多人已经创建了包含

.tmTheme
文件的 Sublime Text 包。请注意,您可以直接使用为 TextMate 创建的包,因为 Sublime Text 使用相同的约定。 (至少就
.tmTheme
.tmPreferences
文件而言,这是正确的。)

例如,我可以直接采用原本为 TextMate 制作的 ChucK 语言的语法高亮包,并在 SublimeText2 中使用它。通过复制 TextMate 使用的文件,

.tmTheme
立即起作用。我刚刚删除了额外的垃圾文件,然后对
.tmTheme
进行了一些更改,并添加了对包管理器的支持。

在此处查看该项目:https://github.com/nathanleiby/ChucK.tmbundle

如何安装新语法

包控制

理想情况下,您想要的语法已包含在 Sublime Text Package Control 中可供下载。在Package Control中搜索直接安装。 (如果您还没有 Package Control,则必须获取它:https://github.com/wbond/package_control_channel/

手动

如果您直接下载

.tmTheme
文件或
.tmBundle
,您需要将其复制到 ST 中相应的包文件夹中。请注意,有一个
/Packages
文件夹和一个
/Packages/User
文件夹。 ST2 文档建议复制到后者,因为即使主文件夹中的其他包在更新过程中被删除/修改,它也能保证被保留。

在 OSX 上,该目录是:

~/Library/Application Support/Sublime Text 2/Packages/User/

(注意:您可能更愿意

git clone
将软件包放入此文件夹中,以便您可以轻松更新它。)

如何创建自己的

如果您想深入研究并自定义语法突出显示,可以从以下几个地方开始。

  • 温习你的正则表达式。
  • Sublime Text 语法定义文档
  • <ctrl> + <shift> + p
    。每当您查看文件时,请选择任意单词并按此组合键,然后查看页脚栏。您应该看到一系列语法描述。例如:我刚刚突出显示了正在查看的 SQL 文件中的一个单词,响应是:
    source.sql string.other.quoted.backtick.sql
  • 您可能更喜欢使用 JavaScript / JSON 来解析语法,而不是 XML。使用PackageDev。您可以通过包控制来获取它。它具有允许您在 .json (JSON) 和 .tmTheme (XML) 文件之间来回切换的命令。
  • StackOverflow 上的相关问题

注意事项

这可能是显而易见的,但语法突出显示的有用性与您在 Sublime Text 中选择的配色方案有关。 (Sublime Text 2 -> 首选项 -> 配色方案 -> ...)

我还没有机会详细探索/验证这一点,但似乎某些配色方案可以区分更多/更少类型的语法元素。

出于这个原因,我强烈推荐“Monokai”配色方案(特别是“Monokai Soda”变体)——它似乎“带出了颜色”。


2
投票

您可能需要修改

.tmTheme
来为通过将语法设置为 Smarty 定义的范围添加自定义突出显示。
Smarty.tmlanguage
目录下应该有一个
Packages/Smarty/Syntaxes
文件。它是 XML,因此对于休闲阅读来说可能有点困难,但如果您了解正则表达式并且范围被智能命名,您应该能够弄清楚如何修改您的主题。


2
投票

其实很简单

  1. Sublime Text 2 默认安装
  2. 打开文件“Packages\HTML\HTML.tmLanguage”,如果您搜索字符串
    <!--
    ,您会注意到(当前)有两个对“Smarty”的引用被注释。取消评论这些。
  3. 在您的
    Smarty.tmLanguage
    文件中搜索字符串
    scopeName
    。这实际上是一个键,关联的字符串应该类似于
    text.html.smarty
  4. 将该字符串复制到
    HTML.tmLanguage
    中代替
    source.smarty
    (您刚刚取消注释的最后一个块末尾的键
    include
    的字符串)

就是这样。享受

© www.soinside.com 2019 - 2024. All rights reserved.