Skip to content

图标主题

VS Code的UI在文件名称左边显示图标,插件配置的图标系列可以让用户自由选择他们喜爱的图标。

添加新的图标主题

你能使用图标文件(最好是SVG)和字体图标创建自己的图标主题。作为示例,你可以参考一下2个内置主题:MinimalSeti

首先,创建一个VS Code插件,然后把iconTheme配置点配置点package.json的一部分,用于配置插件启动命令、用户可更改的插件配置,可以理解为插件的主要配置文件。(contribution point)添加进去

json
"contributes": {
    "iconThemes": [
        {
            "id": "turtles",
            "label": "Turtles",
            "path": "./fileicons/turtles-icon-theme.json"
        }
    ]
}
  • id作为这个图标主题的标识,目前只做内部使用,未来可能会用在设置里面,所以最好设置一个可读性强的唯一值。
  • label会显示在主题选择下拉框中。
  • path指示了图标集所在的位置。如果你的图标系列名称遵循*icon-theme.json命名规范,那么VS Code就能提供完整的支持。

图标文件集(Icon set file)

图标文件集是一个JSON文件,包含了所有的关联图标和图标定义。

一个关联图标图标定义映射到一个文件上(类型如:文件,文件夹,json文件...)。图标定义指示了图标的所在位置:可以是一个图片文件,或者glyph字体。

图标定义

iconDefinitions部分包含了所有定义。每个定义有一个id,用于指向定义。一个定义能供多个文件关联引用。

json
"iconDefinitions": {
    "_folder_dark": {
        "iconPath": "./images/Folder_16x_inverse.svg"
    }
}

这里,图标定义包含了一个标识符_folder_dark。除此之外还支持以下属性:

  • iconPath:当使用svg/png文件时:指向图片的路径。
  • fontCharacter:当使用glyph字体时:字体中使用的字符。
  • fontColor:当使用glyph字体时:设置glyph的颜色。
  • fontSize:当使用字体时:设置字体大小。默认情况下会使用字体本身定义的字体大小。这个值应为父级字号的相对值(如 150%)。
  • fontId:当使用字体时: 字体的ID。如果没有指定,则会采用font specification部分的第一个字体。

关联文件

图标能关联到文件夹,文件夹名称,文件,文件名称,文件插件,和语言Id

这些关联都能被提炼为诸如'light'和'highContrast'色彩主题。

每个文件关联指向一个图标定义

json
{
  "file": "_file_dark",
  "folder": "_folder_dark",
  "folderExpanded": "_folder_open_dark",
  "folderNames": {
    ".vscode": "_vscode_folder"
  },
  "fileExtensions": {
    "ini": "_ini_file"
  },
  "fileNames": {
    "win.ini": "_win_ini_file"
  },
  "languageIds": {
    "ini": "_ini_file"
  },
  "light": {
    "folderExpanded": "_folder_open_light",
    "folder": "_folder_light",
    "file": "_file_light",
    "fileExtensions": {
      "ini": "_ini_file_light"
    }
  },
  "highContrast": {}
}
  • file是一个默认文件图标,为那些没有匹配到任何插件、文件名、语言类型的文件所准备的。目前所有文件图标属性都会被继承(只适用于:glyphs字体、字体大小(fontSize))。
  • folder收起的文件夹图标,如果folderExpanded没有设置,那么展开的文件夹也会使用这个图标。使用folderNames关联特殊名称的文件夹。文件夹图标是可选的,如果不设置,那文件夹就不会显示任何图标。
  • folderExpanded展开的文件夹图标。这个图标是可选的,如果不设置就会使用folder定义好的图标。
  • folderNames特殊名称文件夹图标。这个键是用于文件夹名称的,不支持包含路径的名称,不支持匹配模式和通配符。大小写不敏感。
  • folderNamesExpanded展开的特殊名称文件夹图标。
  • rootFolder 收起的工作区根文件夹图标,如果rootFolderExpanded没有设置,那么展开的工作区根文件夹也会使用这个图标。如果不设置,则会使用folder定义的文件夹图标。
  • rootFolderExpanded 展开的工作区根文件夹图标。如果没有设置,则会使用rootFolder定义的文件夹图标。
  • languageIds语言类型图标。这个键将匹配在*语言配置点配置点package.json的一部分,用于配置插件启动命令、用户可更改的插件配置,可以理解为插件的主要配置文件。(contribution point)*配置的语言id。注意语言配置的'第一行'是不考虑在内的。
  • fileExtensions文件插件图标。根据文件插件的名称匹配。插件名称是文件名点号后面(不包含点号)。拥有多重点号的文件名称,如lib.d.ts会匹配多个模式——d.tsts。大小写敏感。
  • fileNames文件图标。这个键需要文件的全称进行匹配,不支持包含路径的名称,不支持模式和通配符。大小写敏感。fileNames是最高优先匹配。

(*) 部分属性键(folderNamesfolderNamesExpandedfileExtensionsfileNames)可以使用单个父路径片段作为前缀。只有当资源的直接父文件夹与父路径片段匹配时,才会使用该图标。这可以让特定文件夹(例如 system)中的资源呈现不同的外观:

json
  "fileNames": {
    "system/win.ini": "_win_ini_file"
  },

system/win.ini 表示该关联匹配 system 文件夹中直接名为 win.ini 的文件。

json
  "fileExtensions": {
    "system/ini": "_ini_file"
  },

system/ini 表示该关联匹配 system 文件夹中直接名为 *.ini 的文件。

文件扩展名匹配优先于语言匹配,但弱于文件名匹配。带有父路径片段的匹配优于同类型中不带该片段的匹配。

匹配优先级:父级文件名匹配 > 文件名匹配 > 父级文件后缀匹配 > 文件后缀匹配 > 语言匹配...

lighthighContrast部分的属性表和上面相同,只是会在对应的主题下覆盖原有图标配置。

字体定义

在'font'部分添加任意你喜欢的字形和字体。定义好之后,你就可以在图标定义中使用它们了。如果没有指定字体id,那么默认使用第一个定义的字体。

将字体文件移动到你的插件中,设置好对应的路径。推荐使用WOFF字体。

  • 设置格式为'woff'
  • 字重键值的定义参考这里
  • 样式键值对的定义参考在这里
  • 使用图标引用该字体时的字号。因此字体字号总是以百分比表示。
json
"fonts": [
    {
        "id": "turtles-font",
        "src": [
            {
                "path": "./turtles.woff",
                "format": "woff"
            }
        ],
        "weight": "normal",
        "style": "normal",
        "size": "150%"
    }
],
"iconDefinitions": {
    "_file": {
        "fontCharacter": "\\E002",
        "fontColor": "#5f8b3b",
        "fontId": "turtles-font"
    }
}

图标主题中的文件夹图标

文件图标主题会告诉文件浏览器不要显示默认文件夹图标(倒三角或者横杠),这个模式可在配置中加入"hidesExplorerArrows":true覆盖默认VS Code的设置。

语言的默认图标

语言贡献者可以为语言定义一个图标。

jsonc
{
  "contributes": {
    "languages": [
      {
        "id": "latex",
        // ...
        "icon": {
          "light": "./icons/latex-light.png",
          "dark": "./icons/latex-dark.png"
        }
      }
    ]
  }
}

当文件图标主题仅为语言提供通用文件图标时,就会使用该图标。

语言的默认图标仅在以下情况下显示:

  • 文件图标主题具有特定的文件图标。例如 Minimal 没有特定的文件图标,因此不会使用语言的默认图标。
  • 文件图标主题没有为给定语言、文件扩展名或文件名提供图标。
  • 文件图标主题没有定义 "showLanguageModeIcons":false

语言的默认图标在以下情况下总是显示:

  • 文件图标主题定义了 "showLanguageModeIcons":true