主题

要使用主题,请在配置文件 config.toml 最顶端,在第一个部分之前添加 theme = "<name>",或者在运行中使用 :theme <name> 选择它。

创建主题

创建一个以你的主题名称为文件名的文件,即 mytheme.toml,并将其放置在你的 themes 目录下(即 ~/.config/helix/themes)。该目录可能必须事先创建。

defaultbase16_default 是为内置主题保留的,不能被用户定义的主题覆盖。

默认的 theme.toml 可以在 这里 找到,用户提交的主题在 这里

主题文件中的每一行如下:

key = { fg = "#ffffff", bg = "#000000", modifiers = ["bold", "italic"] }

其中 key 表示你要设置的样式,fg 指定前景色,bg 表示背景色,modifiers 是样式修饰符列表。可以省略 bgmodifier 来使用默认设置。

仅指定前景色,请执行以下操作:

key = "#ffffff"

如果键包含点 '.',则必须用引号将其引起来,以防止它被解析为 点键

"key.key" = "#ffffff"

palette

建议定义命名颜色的调色板 (palette),并从主题中的配置值时指向它们。在你的主题文件中添加一个名为 palette 的表:

"ui.background" = "white"
"ui.text" = "black"

[palette]
white = "#ffffff"
black = "#000000"

请记住,[palette] 表在其表头之后包含所有键,因此你应该在普通主题选项之后定义调色板。

默认调色板使用终端的默认 16 种颜色,颜色名称如下所示。配置文件中的 [palette] 部分优先于它,并合并到默认的调色板中。

Color中文
black黑色
red红色
green绿色
yellow黄色
blue蓝调
magenta洋红色
cyan青色
gray灰色
light-red浅红色
light-green淡绿色
light-yellow淡黄色
light-blue淡蓝色
light-magenta浅品红色
light-cyan淡蓝色
light-gray浅灰色
white白色

Modifiers

下列值可以用作修饰符 (modifiers)。你的终端仿真器可能不支持不太常见的修饰符。

Modifier中文
bold粗体
dim暗淡
italic斜体
underlined带下划线
slow_blink慢闪动
rapid_blink快速闪动
reversed反色
hidden隐藏
crossed_out划线

继承现有主题

通过将 inherits 属性设置为现有主题来扩展其他主题。

inherits = "boo_berry"

# Override the theming for "keyword"s:
"keyword" = { fg = "gold" }

# Override colors in the palette:
[palette]
berry = "#2A2A4D"

作用域

以下是可用于设置样式的作用域列表。

语法高亮

这些键与 tree-sitter 作用域相匹配。

对于所产生的给定高亮,样式将基于最长匹配主题键来确定。例如,高亮显示的 function.builtin.static 将匹配关键字 function.builtin,而不是 function

我们使用一组类似 SublimeText 的作用域。另见 TextMate 作用域。

  • attribute 类属性、html 标记属性
  • type 类型
    • builtin 语言提供的原始类型,如 intusize
  • constructor
  • constant (TODO: constant.other.placeholder for %v)

    • builtin 语言提供的特殊常量,如 truefalsenil
      • boolean
    • character
      • escape
    • numeric
      • integer
      • float
  • string (TODO: string.quoted.{single, double}, string.raw/.unquoted)?

    • regexp 正则表达式
    • special
      • path
      • url
      • symbol Erlang/Elixir atoms, Ruby symbols, Clojure keywords
  • comment 注释

    • line 单行注释,如 //
    • block 块注释,如 /* */
      • documentation 文档注释,如 Rust 中的 ///
  • variable 变量

    • builtin 语言保留的变量,如 selfthissuper
    • parameter 函数参数
    • other
      • member 复核数据结构的字段,如结构体、unions
  • label

  • punctuation

    • delimiter 逗号、冒号
    • bracket 圆括号、尖括号等
    • special 字符串插值的大括号
  • keyword

    • control
      • conditional - if, else
      • repeat - for, while, loop
      • import - import, export
      • return
      • exception
    • operator - or, in
    • directive 前端处理程序指令,如 C 中的 #if
    • function - fn, func
    • storage 描述存储数据的关键字
      • type 类型之类的 classfunctionvarlet
      • modifier 存储修饰符,如 staticmutconstref
  • operator - ||, +=, >

  • function

    • builtin
    • method
    • macro
    • special C 中的 preprocessor
  • tag 标签,如 HTML 的 <body>

  • namespace

  • markup

    • heading
      • marker
      • 1, 2, 3, 4, 5, 6 h1-h6 的标题文本
    • list
      • unnumbered
      • numbered
    • bold
    • italic
    • link
      • url 指向链接的 urls
      • label 非 url 链接引用
      • text url 和链接描述的图片
    • quote
    • raw
      • inline
      • block
  • diff 版本控制更改

    • plus
    • minus
    • delta
      • moved 重命名或移动后的文件或修改

界面

这些作用域用于编辑器界面的主题化。

  • markup
    • normal
      • completion 补全弹出的文档窗口 ui
      • hover 悬浮弹出窗口 ui
    • heading
      • completion 补全弹出的文档窗口 ui
      • hover 悬浮弹出窗口 ui
    • raw
      • inline
        • completion 补全弹出的文档窗口 ui
        • hover 悬浮弹出窗口 ui
含义
ui.background
ui.background.separator输入行下方的选取器分隔符
ui.cursor
ui.cursor.insert
ui.cursor.select
ui.cursor.match匹配的括号等
ui.cursor.primary主选区的光标
ui.gutter侧边栏
ui.gutter.selected光标所在行的侧边栏
ui.linenr行号
ui.linenr.selected光标所在行的行号
ui.statuslineStatusline
ui.statusline.inactive当前光标不在文档的 (unfocused) statusline
ui.statusline.normalnormal 模式下的 statusline,需开启 editor.color-modes
ui.statusline.insertinsert 模式下的 statusline,需开启 editor.color-modes
ui.statusline.selectselect 模式下的 statusline,需开启 editor.color-modes
ui.statusline.separatorstatusline 中的分隔符
ui.popup文档弹出窗口(按 <space>k
ui.popup.info多按键选项的提示框
ui.window单独分隔的边界线
ui.help命令的描述框
ui.text命令提示框、弹出文本等
ui.text.focus
ui.text.info按键:ui.popup.info 框内的命令文本
ui.virtual.ruler标尺列,见 editor-section
ui.virtual.whitespace可见的空白字符
ui.virtual.indent-guide垂直缩进宽度参考线
ui.menu代码和命令补全菜单
ui.menu.selected自动补全中的所选项
ui.menu.scrollfg 设置 thumb color;bg 设置滚动条的 track color
ui.selection编辑区域的选区
ui.selection.primary
ui.cursorline.primary主光标所在行,需开启 cursorline
ui.cursorline.secondary任何其他光标所在行,需开启 cursorline
ui.cursorcolumn.primary主光标所在列,需开启 cursorcolumn
ui.cursorcolumn.secondary任何其他光标所在列,需开启 cursorcolumn
warningwarning 诊断(侧边栏)
errorerror 诊断(侧边栏)
infoinfo 诊断(侧边栏)
hinthint 诊断(侧边栏)
diagnosticfallback 诊断style (编辑区域)
diagnostic.hinthint 诊断(编辑区域)
diagnostic.infoinfo 诊断(编辑区域)
diagnostic.warningwarning 诊断(编辑区域)
diagnostic.errorerror 诊断(编辑区域)

你可以检查你的主题是否与规范相符合

cargo xtask themelint onedark  # replace onedark with <name>