主题
要使用主题,请在配置文件 config.toml 最顶端,在第一个部分之前添加 theme = "<name>",或者在运行中使用 :theme <name> 选择它。
创建主题
创建一个以你的主题名称为文件名的文件,即 mytheme.toml,并将其放置在你的 themes 目录下(即 ~/.config/helix/themes)。该目录可能必须事先创建。
default 和 base16_default 是为内置主题保留的,不能被用户定义的主题覆盖。
默认的 theme.toml 可以在 这里 找到,用户提交的主题在 这里。
主题文件中的每一行如下:
key = { fg = "#ffffff", bg = "#000000", modifiers = ["bold", "italic"] }
其中 key 表示你要设置的样式,fg 指定前景色,bg 表示背景色,modifiers 是样式修饰符列表。可以省略 bg 和 modifier 来使用默认设置。
仅指定前景色,请执行以下操作:
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语言提供的原始类型,如int、usize
constructor
-
constant(TODO: constant.other.placeholder for %v)builtin语言提供的特殊常量,如true、false、nilboolean
characterescape
numericintegerfloat
-
string(TODO: string.quoted.{single, double}, string.raw/.unquoted)?regexp正则表达式specialpathurlsymbolErlang/Elixir atoms, Ruby symbols, Clojure keywords
-
comment注释line单行注释,如//block块注释,如/* */documentation文档注释,如 Rust 中的///
-
variable变量builtin语言保留的变量,如self、this、superparameter函数参数othermember复核数据结构的字段,如结构体、unions
-
label -
punctuationdelimiter逗号、冒号bracket圆括号、尖括号等special字符串插值的大括号
-
keywordcontrolconditional-if,elserepeat-for,while,loopimport-import,exportreturnexception
operator-or,indirective前端处理程序指令,如 C 中的#iffunction-fn,funcstorage描述存储数据的关键字type类型之类的class、function、var、letmodifier存储修饰符,如static、mut、const、ref
-
operator-||,+=,> -
functionbuiltinmethodmacrospecialC 中的 preprocessor
-
tag标签,如 HTML 的<body> -
namespace -
markupheadingmarker1,2,3,4,5,6h1-h6 的标题文本
listunnumberednumbered
bolditaliclinkurl指向链接的 urlslabel非 url 链接引用texturl 和链接描述的图片
quoterawinlineblock
-
diff版本控制更改plus增minus删delta改moved重命名或移动后的文件或修改
界面
这些作用域用于编辑器界面的主题化。
markupnormalcompletion补全弹出的文档窗口 uihover悬浮弹出窗口 ui
headingcompletion补全弹出的文档窗口 uihover悬浮弹出窗口 ui
rawinlinecompletion补全弹出的文档窗口 uihover悬浮弹出窗口 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.statusline | Statusline |
ui.statusline.inactive | 当前光标不在文档的 (unfocused) statusline |
ui.statusline.normal | normal 模式下的 statusline,需开启 editor.color-modes |
ui.statusline.insert | insert 模式下的 statusline,需开启 editor.color-modes |
ui.statusline.select | select 模式下的 statusline,需开启 editor.color-modes |
ui.statusline.separator | statusline 中的分隔符 |
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.scroll | fg 设置 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 |
warning | warning 诊断(侧边栏) |
error | error 诊断(侧边栏) |
info | info 诊断(侧边栏) |
hint | hint 诊断(侧边栏) |
diagnostic | fallback 诊断style (编辑区域) |
diagnostic.hint | hint 诊断(编辑区域) |
diagnostic.info | info 诊断(编辑区域) |
diagnostic.warning | warning 诊断(编辑区域) |
diagnostic.error | error 诊断(编辑区域) |
你可以检查你的主题是否与规范相符合
cargo xtask themelint onedark # replace onedark with <name>