如何在没有管理员权限的情况下在 VS Code(Windows) 中使用自定义字体来安装字体?

How to use custom font in VS Code(Windows) without admin privilege to install the font?

我在我的工作 PC 上没有管理员权限 (Windows 7),所以我无法将自定义字体 (Fira Code) 安装到我的系统中。有没有办法不用在 VS Code 中安装就可以使用这种字体?

为这个问题找到一个丑陋的解决方法:使用 webfont。

  1. 打开帮助 -> 在菜单中切换开发者工具
  2. 粘贴下面的js代码并在DevTools的控制台中执行以设置'Fira Code'字体。
var styleNode = document.createElement('style'); 
styleNode.type = "text/css"; 
var styleText = document.createTextNode(`
    @font-face{
        font-family: 'Fira Code';
        src: url('https://raw.githubusercontent.com/tonsky/FiraCode/master/distr/eot/FiraCode-Regular.eot') format('embedded-opentype'),
             url('https://raw.githubusercontent.com/tonsky/FiraCode/master/distr/woff2/FiraCode-Regular.woff2') format('woff2'),
             url('https://raw.githubusercontent.com/tonsky/FiraCode/master/distr/woff/FiraCode-Regular.woff') format('woff'),
             url('https://raw.githubusercontent.com/tonsky/FiraCode/master/distr/ttf/FiraCode-Regular.ttf') format('truetype');
        font-weight: normal;
        font-style: normal;
    }`); 
styleNode.appendChild(styleText); 
document.getElementsByTagName('head')[0].appendChild(styleNode);
  1. 确保 'Fira Code' 是字体系列设置中的第一个参数。
  2. 启用字体连字设置,否则“>=”不会转为“≥”
  3. (可选)在 DevTools 的 Sources 选项卡中,使用代码创建一个新片段,然后右键单击新创建的文件以 运行。重启应用后可永久保留

我找到了一种无需在每次启动 VS Code 时都运行 代码片段的方法。

  1. 转到File > Open Folder
  2. 导航到您的 VS Code 安装,然后转到:

    resources > app > out > vs > code > electron-browser > workbench 打开那个文件夹。

  3. 使用 VS Code 编辑 workbench.js 并将 Tai 的代码片段添加到它的末尾。

  4. 保存
  5. 执行 Ctrl+R 重新加载 window,你应该完成了!

再次确保您在 VS Code 的字体系列设置中将 Fira Code 作为第一个选项,并确保启用了字体连字​​。

Tai Zhang 的 can be automated with the Monkey Patch 分机。

安装Monkey Patch后,将Tai的代码粘贴到一个新文件中,例如%USERPROFILE%\vscode-monkeypatch-modules\custom-fonts.js.

现在将文件添加到您的 settings.json,例如:-

"monkeyPatch.folderMap": {
    "my-custom-modules" : "~/vscode-monkeypatch-modules",
},
"monkeyPatch.browserModules": [
    "my-custom-modules/custom-fonts"
]

您实际上不需要破解 VS Code - 您可以将 per-session 字体添加到 windows,而无需管理员权限,每种字体都有免费的 RegisterFont app, or write your own tiny app to call AddFontResource

我创建了一个 C# 应用程序,将 .exe 放在我的 user-fonts 目录中,然后 paste shortcut 将其放入我的用户启动文件夹(您可以通过在其中键入 shell:startup 找到Run... 对话框):-

using System;
using System.IO;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("gdi32.dll")]
    static extern int AddFontResource(string lpFilename);

    [DllImport("gdi32.dll")]
    static extern bool RemoveFontResource(string lpFilename);

    [DllImport("user32.dll")]
    static extern int SendMessage(int hWnd, uint message, int wParam, int lParam);

    static void Main()
    {
        var exePath = Environment.GetCommandLineArgs()[0];
        var fontFolder = Path.GetDirectoryName(exePath);
        var fontCache = Path.Combine(Path.GetTempPath(), "UserSessionFontCache");
        Directory.CreateDirectory(fontCache);

        foreach (var fontPath in Directory.EnumerateFiles(fontFolder, "*.ttf", SearchOption.AllDirectories))
        {
            var targetPath = Path.Combine(fontCache, Path.GetFileName(fontPath));
            try
            {
                if (File.Exists(targetPath)) RemoveFontResource(targetPath);
                File.Copy(fontPath, targetPath, true);
            }
            catch { /* font in use */ }
            if (File.Exists(targetPath)) AddFontResource(targetPath);
        }

        SendMessage(0xFFFF /* HWND_BROADCAST */, 0x001D /* WM_FONTCHANGE */, 0, 0);
    }
}