use*_*105 11 syntax-highlighting sublimetext
如何使我的类被突出显示为普通的原始类型,如int或double?
看一个例子:

当我宣布Test aloha;测试时,我希望以同样的方式突出显示int a.
jwp*_*fox 16
语法高亮由tmLanguage文件控制.在ST3中,它们保存在.cache文件中.
请按照以下步骤操作.
Package Manager安装PackageResourceViewer PackageResourceViewer: Open Resource C++ C++.tmLanguage现在您已经为您显示了语言定义文件.
看看如何定义语言部分的形式.如果我们搜索,class我们会发现以下内容之一:
<dict>
<key>match</key>
<string>\b(class|struct)\s+([_A-Za-z][_A-Za-z0-9]*\b);</string>
<key>name</key>
<string>meta.class-struct-block.c++</string>
<key>captures</key>
<dict>
. . .
. . .
</dict>
Run Code Online (Sandbox Code Playgroud)
我选择了那个,因为它涉及一些常规表达(正则表达式)匹配,这是做你想做的事情的暗示.
因为ST有一个可爱的开放框架,我们任何知道一点编程的人都可以在这些.tmLanguage文件中添加我们自己的语言组件定义.这种灵活性是我选择ST的原因之一.
那么让我们看看如何做到这一点.
首先是将C++.tmLanguage我们在编辑器中打开的文件保存到我们的User文件夹中.
如果出现问题,我们这样做是为了保持原始版本作为回滚,因为这意味着每次ST更新时我们的版本User都不会被覆盖.ST加载文件的方式意味着User文件夹中的重复项会覆盖默认位置中的值,因此我们的User版本优先于我们使用ST时运行的版本.酷嘿?
所以现在我们有自己的C++.tmLanguage文件版本让我们玩它.
找到一个看起来有点像我们想做的定义并复制它.
我要复制这个:
<dict>
<key>match</key>
<string>\b(class|wchar_t|nullptr_t)\b</string>
<key>name</key>
<string>storage.type.c++</string>
</dict>
Run Code Online (Sandbox Code Playgroud)
我要做的第一件事是决定我要命名我的新语言组件.
我可以简单地给它一个现有的语言组件的名称,它具有我想要的颜色.这样做的好处是,如果在现有配色方案中已经存在该名称,我将免费获得突出显示.随意做出这个选择.
但是为了探索更多的系统,我将创建自己的名字并将其范围扩展到我自己.所以我会打电话给它duncan.name.class.您可以使用任何不与现有名称冲突的名称.
所以我将在副本中进行更改:
<dict>
<key>match</key>
<string>\b(class|wchar_t|nullptr_t)\b</string>
<key>name</key>
<string>duncan.name.class</string>
</dict>
Run Code Online (Sandbox Code Playgroud)
现在我需要编写正则表达式来识别我的新语言组件.这很简单,因为我将假设我们都遵循相当标准的做法,即使用前导Caps命名我们的类,而不是将其用于其他语言组件,所以我的正则表达式只需要找到以UPPERCASE alpha开头的任何字符串,很容易定义为[A-Z]后跟任何字母数字字符.请注意,这会排除标点符号(如下划线_),因此如果您在类名中使用这些标点符号,则需要展开正则表达式以包含这些字符.
所以让我们改变匹配条件以使用该正则表达式:
<dict>
<key>match</key>
<string>\b([A-Z][a-zA-Z0-9]+)\b</string>
<key>name</key>
<string>duncan.name.class</string>
</dict>
Run Code Online (Sandbox Code Playgroud)
现在我有一个新的语言组件,我需要告诉我的主题如何处理它.我将研究Amy这个例子的主题.
所以回到这样的有用的PackageResourceViewer:
PackageResourceViewer: Open ResourceColor Scheme - DefaultAmy.tmTheme现在您显示了主题文件.
我想再次将我的副本保存到User文件夹中,然后复制现有示例.我要复制,String但抓住你的想法的任何东西都很好.
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#999999</string>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)
现在,我将改变重复的String为我的新的语言成分做着色.
<dict>
<key>name</key>
<string>Class Names :: Duncan</string>
<key>scope</key>
<string>duncan.name.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#999999</string>
<key>background</key>
<string>#FFFFFF</string>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)
我希望你能从我们上面所做的工作中认出我正在使用的名字?
我选择了一组稍微疯狂的语法突出显示首选项,只是为了显示您可用的一些选项.在这里敲打自己的想法.
这一切都有意义吗?
有了这些想法,您就可以修复任何语法,突出显示您在ST3中的琐事,使其完全按照您的喜好工作.也许我上面的正则表达不太好?我没有想太多,所以你可能会发现你需要在那里做更多工作才能得到你想要的东西.
如果其中一些没有意义,请告诉我,我会尽力做得更好.
| 归档时间: |
|
| 查看次数: |
11152 次 |
| 最近记录: |