教你如何创建一款属于自己的VSCode主题

你有没有想过创建一款属于自己的VSCode主题?没有你想像的那么难,但是真正实现起来也不是那么轻松,需要你对将要去改变的主题的一些属性要有所了解和准备。

如果你要想让你的主题适用于多种编程语言,并且看起来还很漂亮的话,需要对很多的颜色进行重新定义。

下面就简单的介绍实现一款主题的过程,一些原理进行讲解。

生成主题文件

我们将使用VSCode拓展生成器生成我们的主题文件,该工具是由微软官方为插件和主题而打造。

你可以通过以下命令:

npm install -g yo generator-code

然后生成主题文件

yo code

下面进入互动式安装过程,一步一步引导你完成一个主题模板的创建。

最后生成了一个以主题命名的目录,接着用VSCode打开该目录,进行主题的编辑。

cd my-theme
code .

新生成的主题项目已经为你初始化好了所有的东西。在主题目录里面你可以找到一个以主题命名的JSON文件,这个JSON文件包含一些默认颜色的定义,可以直接去修改它。

开发主题

在主题的开发调试阶段,我们最好是进入debug模式(按F5),会打开一个新的VSCode窗口,这个窗口就已经是使用你创建的主题了。

当你编辑主题文件themes/my-theme.json,你将会看到调试的窗口会立刻响应,期间可能会遇到不立马生效的情况,很好解决,在菜单栏点击Run > Restart Debugging

调试的过程是很繁琐的,还需要有一定的审美才行,有一定的颜色搭配能力。

为主题修改UI样式

以下是我为这款主题定义的一些颜色示例

编辑区域

编辑区域就是你日常编辑代码的地方

    "editor.background": "#1B1929",
    "editor.lineHighlightBackground": "#8076C222",
    "editorCursor.foreground": "#988de4",

对于编辑区我定义了backgroundlineHighlightBackgroundeditorCursor.foreground的值,分别代表了编辑区背景颜色,鼠标所在行高亮颜色和光标颜色。

活动栏

VSCode窗口左侧即为活动栏,用来切换不同功能视图的。

   "activityBar.background": "#13111d",
   "activityBar.inactiveForeground": "#323b50",
   "activityBar.foreground": "#5c6e92",
   "activityBarBadge.background": "#8076C2",

活动栏我们为它定义了backgroundinactiveForeground、和activityBarBadge.background的值。foreground的值表示的是图标的颜色,而activityBarBadge则是图标所在角标的颜色。

侧边栏

侧边栏即为打开的项目文件列表区域,或者调试工具等等,这个取决于你当前选择的功能。

    "sideBar.background": "#1B1929",
    "sideBarTitle.foreground": "#bbbbbb",
    "sideBarSectionHeader.background": "#242c3f",

这些定义侧边栏一些基础的颜色。另外的内容部分需要单独定义,包含:

    "list.activeSelectionBackground": "#2a273f",
    "list.activeSelectionForeground": "#8076C2",
    "list.inactiveSelectionBackground": "#2a273f",
    "list.inactiveSelectionForeground": "#8076C2",
    "list.highlightForeground": "#8076C2",
    "list.hoverBackground": "#1f2636",

以上这些定义了当前打开的文件列表所在不同状态下的颜色值,这里的 active 不取决于VSCode窗口是否处于活动状态。相同的list颜色也适用于其他地方的列表。

按钮

VSCode上面按钮不多,我们也给它定义一下颜色,保证主题视觉上的一致性。

    "button.background": "#8076C2",
    "button.hoverBackground": "#8076C299",

以上定义了按钮的两种状态下的颜色,正常状态和鼠标悬浮状态


状态栏

状态栏处于VSCode窗口的底部,由于你所安装的拓展和配置不同,显示的内容也有所不同,包括git所在分支,文件的编码等等。


    "statusBar.border": "#1B1929",
    "statusBar.background": "#13111d",
    "statusBar.debuggingBackground": "#bb0000",

状态栏我选择了和活动栏一致的颜色,我希望状态栏有一个比较特别的颜色,当我们调试的时候不会错过它上面的信息。

标题栏

同样,标题栏的颜色和状态栏、活动栏保持一致。

    "titleBar.activeBackground": "#13111d",
    "titleBar.inactiveBackground": "#13111d",
    "titleBar.inactiveForeground": "#5c6e92",

语法高亮

受到我最喜欢的一款主题Night Owl的影响,我开始不怎么关注语法高亮部分的颜色。高亮在主题JSON文件中tokenColor部分有所定义,tokenColor是一个数组,分别定义了一定范围内的代码scopefontStyleforeground部分样式

{
    "name": "Comment",
    "scope": ["comment", "punctuation.definition.comment"],
    "settings": {
        "fontStyle": "italic",
        "foreground": "#637777"
    }
}

范围指定可以由VSCode内部工具Inspect Editor Tokens and Scopes来发现,你可以通过组合键Cmd+Shift+P打开它或者搜索"inspect editor"

调色板

为了达到对JavaScript和TypeScript代码一定程度的满意效果,我参考了其它的一些主题。

毕竟这部分的工作是很要耐心的,你可以通过debug模式来查看当前代码区域不同地方的颜色值然后来编辑替换它。

最后我为调色板选了11种颜色以及React项目中JavaScript和TypeScript代码的高亮。


下面是更改了部分颜色的效果

如果你想创建一个自己满意的主题,可以参考以上的步骤,但是最终的效果依照你自己的爱好而定,另外下面的资源也可以供参考:
Sarah Drasner article Creating a VS Code Theme
VS Code documentation on Theme Colors

获取更多作者文章,关注公众号太空编程

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容