如何更改VSCode中的语法高亮显示以使其符合特定的样式指南?例如,我想要遵守Google C++ style guide,其中成员变量被写为some_member_variable_
。当我使用此约定时,VSCode不会为该名称着色与标准文本不同。但是我有一些使用mSomeMemberVariable
约定的代码,并且它的颜色与其他文本不同。有没有办法更好地配置?
TL; DR>没有简单的方法来应用Google风格的语法高亮,除非你找到一个现有的cpp Textmate语法文件(我找不到)。但是以下是您自己实现它的方法。
查看CPP语法文件(cpp.tmLanguage.json
),我们发现没有范围模式捕获Google样式的成员变量。你可以添加一个:
{ // this is the existing scope that matches mSomeMemberVariable
"match": "\\b(f|m)[A-Z]\\w*\\b",
"name": "variable.other.readwrite.member.cpp"
},
{ // you can add this scope to match some_member_variable_
"match": "\\b([a-z][a-z\\d]*_)+\\b",
"name": "variable.other.readwrite.member.google.cpp"
}
现在,您可以通过确保其范围(或任何外部范围,如variable.other.readwrite.member
)确保它的样式,在主题的.json
文件中有主题规则。
以下是更详细的说明。从here我们看到:
语法高亮有两个组件:
- 使用语法将文本分解为标记和范围列表
- 然后使用主题将这些范围映射到特定的颜色和样式
首先,我们需要弄清楚哪个“范围”为成员变量设置样式:
ctrl+shift+p
> Developer: Inspect TM Scopes
mSomeMemberVariable
)variable.other.readwrite.member.cpp
名称的.cpp
部分告诉我们,范围是在C ++语法(语法)中定义的。截至目前,用于cpp语法的文件可以在[applications_folder]/code/resources/app/extensions/cpp/syntaxes/cpp.tmLanguage.json
下找到(参见the github repo中的文件)。
在语法定义文件中搜索范围名称,我们找到以下模式:
{
"match": "\\b(f|m)[A-Z]\\w*\\b",
"name": "variable.other.readwrite.member.cpp"
}
要查看应用于上述范围的样式,我们将查看活动主题的*.json
文件。例如,如果您使用Dark +(默认深色)主题,则可以在extensions/theme-defaults/themes/dark_plus.json
找到主题json文件。在此文件中,我们找到以下文本配合主题规则:
{
"name": "Variable and parameter name",
"scope": [
"variable",
"meta.definition.variable.name",
"support.variable",
"entity.name.variable"
],
"settings": {
"foreground": "#9CDCFE"
}
}
根据这条规则,我们看到突出显示由variable
范围应用。 (请注意,除非您专门指定内部范围样式以覆盖它,否则所有外部范围样式都应用于内部范围样式)
现在,您可以选择将自己的范围添加到现有文件中。另一种方法是编辑现有范围以匹配Google风格的成员变量正则表达式模式。另一种选择是根据CPP扩展样式文件定义自己的语法,并创建自己的Google CPP VSCode扩展。例如,采用第一种方法,您可以编辑cpp.tmLanguage.json
,如下所示:
{
"match": "\\b([a-z][a-z\\d]*_)+\\b",
"name": "variable.other.readwrite.member.google.cpp"
}
附:编辑完json文件后,重启VSCode以使更改生效。