0

0

VSCode 的代码高亮功能如何进一步自定义?

幻影之瞳

幻影之瞳

发布时间:2025-09-20 23:00:01

|

1015人浏览过

|

来源于php中文网

原创

自定义VSCode代码高亮可通过主题选择、settings.json中editor.tokenColorCustomizations和editor.semanticTokenColorCustomizations配置,以及扩展插件实现;正确使用可提升可读性与开发效率,需注意避免过度定制、处理TextMate与语义高亮冲突,并可通过项目级配置确保团队一致性。

vscode 的代码高亮功能如何进一步自定义?

VSCode的代码高亮功能,远不止是换个主题那么简单。它允许你通过深入的配置,精细到每一个语法元素的颜色、字体样式,从而真正打造出符合个人阅读习惯和审美偏好的代码视觉体验。这不仅仅是为了好看,对我来说,更是为了提升代码的可读性和减少长时间阅读的视觉疲劳,毕竟我们盯着屏幕的时间太长了。

解决方案

要深入自定义VSCode的代码高亮,主要有几个途径,它们层层递进,可以组合使用。

首先,最直观的当然是主题(Themes)。VSCode内置了一些主题,但更多人会从Extensions Marketplace安装第三方主题。这通常是第一步,选择一个你觉得基础色调和整体风格都比较舒服的主题。比如我个人偏爱那些对比度适中,颜色不至于过于鲜艳或过于灰暗的主题,这样既能区分元素,又不会让眼睛感到刺激。

但如果某个主题的某个特定颜色让你不满意,或者你就是想让某个特定类型的变量、函数或者关键字以你独特的颜色呈现,那就需要动用

settings.json
里的
editor.tokenColorCustomizations
了。这是自定义的核心。

打开

settings.json
(可以通过
Ctrl/Cmd + Shift + P
然后输入"Preferences: Open User Settings (JSON)"),你会看到一个JSON对象。在其中添加
editor.tokenColorCustomizations
字段。这个字段可以针对当前主题或者所有主题进行定制。

{
    "editor.tokenColorCustomizations": {
        // 可以针对所有主题进行定制
        // "textMateRules": [
        //     {
        //         "scope": "comment", // 针对注释
        //         "settings": {
        //             "foreground": "#6A9955", // 更深的绿色
        //             "fontStyle": "italic" // 斜体
        //         }
        //     },
        //     {
        //         "scope": ["variable.other", "variable.parameter"], // 针对变量和参数
        //         "settings": {
        //             "foreground": "#9CDCFE" // 亮蓝色
        //         }
        //     }
        // ],
        // 也可以针对特定主题进行定制,比如 "Default Dark+"
        "[Default Dark+]": {
            "textMateRules": [
                {
                    "scope": "comment",
                    "settings": {
                        "foreground": "#5C8B4C", // 我个人觉得这个绿色更舒服
                        "fontStyle": "italic"
                    }
                },
                {
                    "scope": "keyword", // 关键字,比如 `const`, `let`, `function`
                    "settings": {
                        "foreground": "#C586C0", // 默认紫色,我喜欢稍微深一点
                        "fontStyle": "bold" // 让关键字更醒目
                    }
                },
                {
                    "scope": "string", // 字符串
                    "settings": {
                        "foreground": "#CE9178" // 默认橙色,但我想让它更偏红一点
                    }
                },
                {
                    "scope": "entity.name.function", // 函数名
                    "settings": {
                        "foreground": "#DCDCAA", // 默认黄色,我喜欢更亮一点的黄
                        "fontStyle": "underline" // 给函数名加下划线,一眼识别
                    }
                },
                {
                    "scope": "support.class", // 比如 React 组件名
                    "settings": {
                        "foreground": "#4EC9B0" // 青色,我发现它在我的主题里不够突出
                    }
                }
            ]
        }
    }
}

这里面最关键的是

scope
scope
定义了你要定制的语法元素的类型。VSCode使用TextMate语法作用域系统来识别代码中的不同部分。要找到某个特定代码元素的准确
scope
名称,你可以使用VSCode的“Developer: Inspect Editor Tokens and Scopes”命令(同样通过
Ctrl/Cmd + Shift + P
搜索)。当你执行这个命令后,点击代码中的任何一个词,VSCode就会弹出一个窗口,显示这个词的所有TextMate作用域。通常,最具体的那个作用域(最长的那个)就是你想要定制的。比如,一个函数调用可能是
meta.function-call.js
entity.name.function.js

除了

textMateRules
,还有
editor.semanticTokenColorCustomizations
,这是基于语言服务器协议(LSP)的语义高亮。它比TextMate更智能,能理解代码的实际含义,比如区分局部变量和全局变量。如果你发现某些语言(尤其是TypeScript、Go等强类型语言)的某些元素高亮不符合预期,可能是语义高亮在起作用。你也可以在这里进行定制,或者干脆禁用特定元素的语义高亮,让TextMate规则发挥作用。

{
    "editor.semanticTokenColorCustomizations": {
        "[Default Dark+]": {
            "enumMember": {
                "foreground": "#B5CEA8", // 枚举成员,给它一个独特的颜色
                "fontStyle": "bold"
            },
            "variable.readonly": { // 只读变量
                "foreground": "#9CDCFE",
                "fontStyle": "italic"
            }
        }
    }
}

最后,一些扩展(Extensions)也能增强高亮。比如一些特定语言的扩展会提供更准确的语法解析和高亮。还有一些像Bracket Pair Colorizer 2这样的扩展,可以给匹配的括号着色,极大提升了嵌套代码的可读性。

为什么默认的代码高亮总让我感觉差点意思?

这个问题我深有体会,每次新装VSCode,我做的第一件事就是调整主题和高亮。默认的高亮方案,对我来说,往往是“能用但不够好”。这背后其实有几个原因:

首先是个人偏好。每个人的视觉敏感度和对颜色的感知都不同。有人喜欢高对比度,觉得这样能一眼区分;有人则偏爱柔和的色调,认为长时间盯着不刺眼。默认主题为了普适性,往往采取一种中庸之道,但这种“中庸”恰好可能不适合任何一个极端。我个人就对某些默认的紫色、蓝色饱和度感到不适,总觉得它们在我的屏幕上显得有点“脏”。

其次是认知效率。代码高亮的终极目标是提高代码的可读性和理解速度。默认高亮可能在区分不同元素上做得不错,但它不一定能高效地突出“重要信息”或“我最关心的信息”。比如,我可能希望函数名比变量名更醒目,或者某个特定类型的常量有独特的颜色,这样我扫一眼就能定位到关键逻辑。默认高亮往往没有这种细致的优先级区分。

再者,语言特性也是一个因素。一个为JavaScript设计的主题,可能在Python或C#中表现不佳。不同语言有不同的关键字、数据类型和语法结构,它们对高亮的需求是不同的。默认高亮通常是基于一个广泛的语法规则集,无法完全适应所有语言的细微差别。

还有一点,我觉得是现代前端和后端开发的复杂性。现在的项目,各种框架、库、DSL层出不穷。默认高亮可能无法很好地识别并突出这些特定语境下的元素。例如,JSX中的HTML标签和JavaScript表达式,或者Vue单文件组件中的