实现原理

我们可以通过CSS注入来使得浏览器加载需要的字体文件, 以JetBrains Mono为例

详细步骤

准备字体文件

JetBrains Mono官网下载字体文件,并把woff和woff2格式的字体文件放置在fonts目录,并把fonts目录移到code-server安装路径下的 lib/vscode/out/vs/code/browser/workbench 位置。

以下是目录树

/usr/lib/code-server/lib/vscode/out/vs/code/browser/workbench
├── fonts
│   ├── JetBrainsMono-Bold-Italic.woff
│   ├── JetBrainsMono-Bold-Italic.woff2
│   ├── JetBrainsMono-Bold.woff
│   ├── JetBrainsMono-Bold.woff2
│   ├── JetBrainsMono-ExtraBold-Italic.woff
│   ├── JetBrainsMono-ExtraBold-Italic.woff2
│   ├── JetBrainsMono-ExtraBold.woff
│   ├── JetBrainsMono-ExtraBold.woff2
│   ├── JetBrainsMono-Italic.woff
│   ├── JetBrainsMono-Italic.woff2
│   ├── JetBrainsMono-Medium-Italic.woff
│   ├── JetBrainsMono-Medium-Italic.woff2
│   ├── JetBrainsMono-Medium.woff
│   ├── JetBrainsMono-Medium.woff2
│   ├── JetBrainsMono-Regular.woff
│   └── JetBrainsMono-Regular.woff2

创建css文件

新建一个 fonts.css 放在code-server安装路径下的 lib/vscode/out/vs/code/browser/workbench 位置

我的是 /usr/lib/code-server/lib/vscode/out/vs/code/browser/workbench

@font-face {
  font-family: 'JetBrains Mono';
  src: url('fonts/JetBrainsMono-Regular.woff2') format('woff2'),
       url('fonts/JetBrainsMono-Regular.woff') format('woff');
  font-weight: 400;
  font-style: normal;
}

@font-face {
  font-family: 'JetBrains Mono';
  src: url('fonts/JetBrainsMono-Italic.woff2') format('woff2'),
       url('fonts/JetBrainsMono-Italic.woff') format('woff');
  font-weight: 400;
  font-style: italic;
}

/* 可根据需要添加更多字重和样式 */
/* 
@font-face {
  font-family: 'JetBrains Mono';
  src: url('fonts/JetBrainsMono-Medium.woff2') format('woff2'),
       url('fonts/JetBrainsMono-Medium.woff') format('woff');
  font-weight: 500;
  font-style: normal;
}

@font-face {
  font-family: 'JetBrains Mono';
  src: url('fonts/JetBrainsMono-Medium-Italic.woff2') format('woff2'),
       url('fonts/JetBrainsMono-Medium-Italic.woff') format('woff');
  font-weight: 500;
  font-style: italic;
}

@font-face {
  font-family: 'JetBrains Mono';
  src: url('fonts/JetBrainsMono-Bold.woff2') format('woff2'),
       url('fonts/JetBrainsMono-Bold.woff') format('woff');
  font-weight: 700;
  font-style: normal;
}

@font-face {
  font-family: 'JetBrains Mono';
  src: url('fonts/JetBrainsMono-Bold-Italic.woff2') format('woff2'),
       url('fonts/JetBrainsMono-Bold-Italic.woff') format('woff');
  font-weight: 700;
  font-style: italic;
}

@font-face {
  font-family: 'JetBrains Mono';
  src: url('fonts/JetBrainsMono-ExtraBold.woff2') format('woff2'),
       url('fonts/JetBrainsMono-ExtraBold.woff') format('woff');
  font-weight: 800;
  font-style: normal;
}

@font-face {
  font-family: 'JetBrains Mono';
  src: url('fonts/JetBrainsMono-ExtraBold-Italic.woff2') format('woff2'),
       url('fonts/JetBrainsMono-ExtraBold-Italic.woff') format('woff');
  font-weight: 800;
  font-style: italic;
} */

修改 workbench.html

编辑工作台 HTML 文件,在 <head> 部分添加 CSS 引用:

<link rel="stylesheet" href="{{WORKBENCH_WEB_BASE_URL}}/out/vs/code/browser/workbench/fonts.css">

最终目录结构

没有用到的字体可以不放

/usr/lib/code-server/lib/vscode/out/vs/code/browser/workbench
├── callback.html
├── fonts
│   ├── JetBrainsMono-Bold-Italic.woff
│   ├── JetBrainsMono-Bold-Italic.woff2
│   ├── JetBrainsMono-Bold.woff
│   ├── JetBrainsMono-Bold.woff2
│   ├── JetBrainsMono-ExtraBold-Italic.woff
│   ├── JetBrainsMono-ExtraBold-Italic.woff2
│   ├── JetBrainsMono-ExtraBold.woff
│   ├── JetBrainsMono-ExtraBold.woff2
│   ├── JetBrainsMono-Italic.woff
│   ├── JetBrainsMono-Italic.woff2
│   ├── JetBrainsMono-Medium-Italic.woff
│   ├── JetBrainsMono-Medium-Italic.woff2
│   ├── JetBrainsMono-Medium.woff
│   ├── JetBrainsMono-Medium.woff2
│   ├── JetBrainsMono-Regular.woff
│   └── JetBrainsMono-Regular.woff2
├── fonts.css
├── workbench.css
├── workbench.html
├── workbench.js
└── workbench.js.map

设置编辑器字体

修改setting.json的相关内容

{
    "editor.fontFamily": "'JetBrains Mono', Consolas, 'Courier New'",
    "editor.fontLigatures": true, //对于连字字体,一定要打开连字符功能
}

注意: 对于连字字体,一定要打开fontLigatures 否则会出现光标错位问题

image.png

此时,我的光标所在位置应该是行末

最后效果

image.png

最后修改:2025 年 07 月 30 日
如果觉得我的文章对你有用,请随意赞赏