通知
[!警告] 如果您自定义或配置颜色,或者升级配色方案后发现外观没有变化,请运行
:GithubThemeCompile
命令来编译配色方案。我们正在积极解决这个问题,感谢您的耐心等待。
订阅此讨论
或查看:h github-theme-changelog
以获取有关重大变更和弃用的更新。
- 2023-12-02:重新实现了
*_default
配色方案,之前在changelog-23042023中被弃用 - 2023-05-14:本主题进行了重大重构,对Neovim支持和代码库进行了更改,深受nightfox.nvim的启发。感谢EdenEast。对于较旧的Neovim版本,请使用0.0.x分支。
- 2022-08-03:终端和其他主题已移至**github-theme-contrib** Git仓库,相关代码已从本仓库中移除。
支持的配色方案和比较
github-nvim-theme | github-vscode-theme | Github Web UI | Primer |
---|---|---|---|
github_dark | Github Dark | - | - |
github_light | Github Light | - | - |
github_dark_dimmed | Github Dark Dimmed | Dark dimmed | dark_dimmed |
github_dark_default | Github Dark Default | Dark default | dark |
github_light_default | Github Light Default | Light default | light |
github_dark_high_contrast | Github Dark High Contrast | Dark high contrast | dark_high_contrast |
github_light_high_contrast | Github Light High Contrast | Light high contrast | light_high_contrast |
github_dark_colorblind | Github Dark Colorblind (Beta) | Dark Protanopia & Deuteranopia | dark_colorblind |
github_light_colorblind | Github Light Colorblind (Beta) | Light Protanopia & Deuteranopia | light_colorblind |
github_dark_tritanopia | - | Dark Tritanopia | dark_tritanopia |
github_light_tritanopia | - | Light Tritanopia | light_tritanopia |
特性
- 支持最新的Neovim>=0.5特性,如Treesitter和LSP
- 类似于GitHub的VSCode主题,遵循primer设计指南
- 包含GitHub的色盲主题
- 支持多个插件和状态栏
- 许多其他插件也应该"开箱即用"!
- 最小化的非活动Vim默认状态栏
- Vim终端颜色
- 侧边栏类窗口的较深背景
- 高度可配置,支持模板覆盖
- 最优雅的lualine主题
- 编译用户配置以加快启动时间
- 导出颜色库实用工具
- 交互式实时配置重新加载
要求
- Neovim >= 0.8.0(对于旧版本请使用0.0.x分支)
- 真彩色支持
- 下划线终端支持(可选)
[!注意] 在macOS上,默认终端(即
Terminal.app
)不支持真彩色24位RGB颜色。请使用Iterm2
或其他支持真彩色的终端。
安装
使用您喜欢的包管理器安装主题:
使用vim-plug安装:
Plug 'projekt0n/github-nvim-theme'
或使用dein:
call dein#add('projekt0n/github-nvim-theme')
或使用minpac:
call minpac#add('projekt0n/github-nvim-theme')
或使用Packer.nvim:
在您的init.lua
或plugins.lua
中添加以下内容
-- 无配置安装
use ({ 'projekt0n/github-nvim-theme' })
-- 或带配置安装
use({
'projekt0n/github-nvim-theme',
config = function()
require('github-theme').setup({
-- ...
})
vim.cmd('colorscheme github_dark')
end
})
或使用lazy.nvim:
在您的init.lua
或plugins.lua
中添加以下内容
-- 无配置安装
{ 'projekt0n/github-nvim-theme' }
-- 或使用配置
{
'projekt0n/github-nvim-theme',
lazy = false, -- 确保在启动时加载此插件,如果它是您的主要配色方案
priority = 1000, -- 确保在所有其他启动插件之前加载此插件
config = function()
require('github-theme').setup({
-- ...
})
vim.cmd('colorscheme github_dark')
end,
}
使用方法
只需使用内置命令 :colorscheme
设置配色方案
colorscheme github_dark
vim.cmd('colorscheme github_dark')
截图
- 字体: Iosevka Nerd Font Mono
- 终端: kitty
- 图标: nvim-web-devicons
- 状态栏:默认 (.vimrc)
- 配置文件: ful1e5/dotfiles/nvim
Github 深色
vim.cmd('colorscheme github_dark')
Github 深色默认
vim.cmd('colorscheme github_dark_default')
Github 深色暗淡
vim.cmd('colorscheme github_dark_dimmed')
Github 深色高对比度
vim.cmd('colorscheme github_dark_high_contrast')
Github 深色色盲模式(测试版)
vim.cmd('colorscheme github_dark_colorblind')
Github 深色蓝黄色盲模式(测试版)
vim.cmd('colorscheme github_dark_tritanopia')
Github 浅色
vim.cmd('colorscheme github_light')
Github 浅色默认
vim.cmd('colorscheme github_light_default')
Github 浅色高对比度
vim.cmd('colorscheme github_light_high_contrast')
Github 浅色色盲模式(测试版)
vim.cmd('colorscheme github_light_colorblind')
Github 浅色蓝黄色盲模式(测试版)
vim.cmd('colorscheme github_light_tritanopia')
配置
如果您不想更改默认选项和设置,则无需调用 setup
。
-- 默认选项
require('github-theme').setup({
options = {
-- 编译文件的目标位置
compile_path = vim.fn.stdpath('cache') .. '/github-theme',
compile_file_suffix = '_compiled', -- 编译文件后缀
hide_end_of_buffer = true, -- 隐藏缓冲区末尾的'~'字符以获得更整洁的外观
hide_nc_statusline = true, -- 覆盖非活动状态栏的下划线样式
transparent = false, -- 禁用设置背景(使neovim的背景透明)
terminal_colors = true, -- 设置`:terminal`中使用的终端颜色(vim.g.terminal_color_*)
dim_inactive = false, -- 非聚焦窗格设置为替代背景
module_default = true, -- 模块的默认启用值
styles = { -- 应用于不同语法组的样式
comments = 'NONE', -- 值可以是任何有效的attr-list值 `:help attr-list`
functions = 'NONE',
keywords = 'NONE',
variables = 'NONE',
conditionals = 'NONE',
constants = 'NONE',
numbers = 'NONE',
operators = 'NONE',
strings = 'NONE',
types = 'NONE',
},
inverse = { -- 不同类型的反向高亮
match_paren = false,
visual = false,
search = false,
},
darken = { -- 使浮动窗口和类侧边栏窗口变暗
floats = true,
sidebars = {
enable = true,
list = {}, -- 对特定窗口应用深色背景
},
},
modules = { -- 各种插件和附加选项列表
-- ...
},
},
palettes = {},
specs = {},
groups = {},
})
-- 必须在加载之前调用setup
vim.cmd('colorscheme github_dark')
如果你想更改上述任何默认选项,只需指定你想更改的选项。未指定的选项将使用其默认值。例如,如果你只想更改某些语法项的样式:
require('github-theme').setup({
options = {
styles = {
comments = 'italic',
keywords = 'bold',
types = 'italic,bold',
}
}
})
要查看Github Theme配置设置的详细说明,请参考内置帮助:help github-nvim-theme
或
Usage。
模块
Github Theme的模块存储各种插件和其他neovim模块的配置信息。要启用模块,
可以将模块设置为true
,或者如果模块有额外的配置信息,则将enable
设置为true
。
默认情况下,模块将被启用。要更改此行为,请将options.module_default
更改为false
。
要查看模块列表,请参阅Usage或:help
以获取更多信息。
自定义调色板和组
你可以更改github-theme的颜色palette
和高亮group
。这里是一个简短的例子:
-- 调色板是配色方案的基本颜色定义。
-- 你可以为github-theme定义的每个配色方案覆盖这些调色板。
local palettes = {
-- 在`all`下定义的所有内容将应用于每种样式。
all = {
-- 每个调色板定义这些颜色:
-- black, gray, blue, green, magenta, pink, red, white, yellow, cyan
--
-- 这些颜色有2种色调:base和bright
-- 传递字符串设置base
red = '#ff0000',
},
github_dark = {
-- 定义多个色调是通过传递一个表来完成的
red = {
base = '#8e1519',
bright = '#ee0000',
},
},
github_dark_dimmed = {
-- 调色板还定义了以下内容:
-- bg0, bg1, bg2, bg3, bg4, fg0, fg1, fg2, fg3, sel0, sel1, comment
--
-- 这些是主题使用的不同前景和背景色调。
-- 基本的bg和fg是1,0通常是深色替代。其他是
-- 逐渐变亮的版本。
bg1 = '#444c56',
-- sel是不同类型的选择颜色。
sel0 = '#adbac7', -- 弹出背景,可视选择背景
sel1 = '#22272e', -- 弹出选择背景,搜索背景
-- comment是注释颜色的定义。
comment = '#636e7b',
},
}
-- Spec's(规格)是将调色板映射到逻辑组的映射,这些逻辑组将被
-- 组使用。规格映射的一些组示例包括:
-- - 语法组(函数、类型、关键字...)
-- - 诊断组(错误、警告、信息、提示)
-- - git组(添加、删除、更改)
--
-- 你可以像覆盖调色板一样覆盖这些
local specs = {
-- 与调色板一样,`all`下定义的值将应用于每种样式。
all = {
syntax = {
-- 规格允许你使用颜色或模板定义值。如果字符串不
-- 以`#`开头,该字符串将用作调色板表的路径。仅定义
-- 一种颜色使用该颜色的base版本。
keyword = 'magenta',
-- 添加`.bright`将改变值
conditional = 'magenta.bright',
number = 'orange',
},
git = {
-- 也可以使用颜色定义
changed = '#ffa261',
},
},
github_dark = {
syntax = {
-- 与调色板一样,特定样式的值将优先于`all`的值。
operator = 'orange',
},
},
}
-- 组是高亮组定义。此表的键是将被
-- 覆盖的高亮组的名称。值是一个包含以下键的表:
-- - fg, bg, style, sp, link,
--
-- 就像`spec`一样,组支持模板。这次模板基于spec对象。
local groups = {
-- 与规格和调色板一样,`all`下定义的值将应用于每种样式。
all = {
-- 如果定义了`link`,它将覆盖任何其他定义的值
Whitespace = { link = 'Comment' },
-- 模板使用规格。规格中包含可访问的调色板字段 IncSearch = { bg = 'palette.cyan' }, }, github_dark = { -- 与规格和调色板一样,特定样式的值将优先于'all'中的值使用。 PmenuSel = { bg = '#73daca', fg = 'bg0' }, }, }
require('github-theme').setup({ palettes = palettes, specs = specs, groups = groups })
-- 必须在加载前调用setup vim.cmd('colorscheme github_dark')
要查找为vim定义的语法高亮组列表,请使用帮助`:help group-name`和`:help nvim-treesitter-highlights`(用于treesitter)。如果你还想了解GitHub Theme如何定义这些高亮组,可以查看[syntax.lua]获取vim语法信息,[treesitter.lua]获取treesitter信息。这些文件列出了所有高亮组,并附有描述注释。另一个值得注意的文件是[editor.lua],它负责vim外观的高亮组(背景、光标行、标签栏等)。
要获取更多信息,请查看[Usage](https://github.com/projekt0n/github-nvim-theme/blob/main/./Usage.md#configuration)或帮助文件`:help github-nvim-theme`以获取更详细的信息。
[editor.lua]: https://github.com/projekt0n/github-nvim-theme/blob/main/lua/github-theme/group/editor.lua
[syntax.lua]: https://github.com/projekt0n/github-nvim-theme/blob/main/lua/github-theme/group/syntax.lua
[treesitter.lua]: https://github.com/projekt0n/github-nvim-theme/blob/main/lua/github-theme/group/modules/treesitter.lua
### 自定义模板值
GitHub Theme的`palettes`和`specs`可以用你自己的值进行扩展。这对于想要区分用于多个组定义的规格值的用户很有用。通过一个例子可以更好地理解这一点。
`bg0`用作深色替代背景色。它在多个区域使用(非当前文件、状态栏、普通浮动窗口等)。如果你想让非活动颜色与浮动窗口/状态栏颜色不同,可以在`specs`表中定义自己的值。
```lua
require('github-theme').setup({
palettes = {
-- 带有黑色背景的自定义duskfox
github_dark = {
bg1 = '#000000', -- 黑色背景
bg0 = '#1d1d2b', -- 替代背景(浮动窗口、状态栏等)
bg3 = '#121820', -- 比原版暗55%
sel0 = '#131b24', -- 比原版暗55%
},
},
specs = {
all = {
inactive = 'bg0', -- 其他样式的默认值
},
github_dark_dimmed = {
inactive = '#090909', -- 略微比黑色背景亮一些
},
},
groups = {
all = {
NormalNC = { fg = 'fg1', bg = 'inactive' }, -- 非当前窗口
},
},
})
API
GitHub Theme提供了一些API和实用类,让你可以获取GitHub Theme的数据。
调色板
你可以获取每个配色方案使用的调色板:
-- 返回一个包含每个配色方案及其关联调色板的表
local palettes = require('github-theme.palette').load()
-- 返回指定配色方案的调色板
local palette = require('github-theme.palette').load('github_dark_dimmed')
print(vim.inspect(palette.red))
-- {
-- base = '#f47067',
-- bright = '#ff938a'
-- }
有关调色板的更多信息,请参阅Usage。
规格
你可以获取每个配色方案使用的规格:
-- 返回一个包含每个配色方案及其关联规格的表
local specs = require('github-theme.spec').load()
-- 返回指定配色方案的规格
local spec = require('github-theme.spec').load('github_light')
print(vim.inspect(spec.git))
-- {
-- add = '#1a7f37',
-- changed = '#9a6700',
-- conflict = '#bc4c00',
-- ignored = '#6e7781',
-- removed = '#d1242f'
-- }
有关规格的更多信息,请参阅Usage。
颜色库
GitHub Theme内部使用颜色库来操作颜色。你也可以使用这个库。
local palette = require('github-theme.palette').load('github_dark')
local Color = require('github-theme.lib.color')
local bg = Color.from_hex(palette.canvas.default)
local red = Color.from_hex('#ff0000')
-- 将bg与红色混合。混合因子从0到1,
-- 0表示全bg,1表示全红
local red_bg = bg:blend(red, 0.2)
print(red_bg:to_css())
-- '#592b31'
-- 通过将颜色的HSV值增加10来使bg变亮
local alt_bg = bg:brighten(10)
print(vim.inspect(alt_bg:to_hsv()))
-- {
-- hue = 212.30769230769,
-- saturation = 21.311475409836,
-- value = 33.921568627451
-- }
有很多有用的函数可以在不同的色彩空间中操作和处理颜色。
有关Color
的更多信息,请参阅Usage。
编译
GitHub Theme是一个高度可定制和可配置的配色方案。然而,这会带来复杂性和执行时间的代价。
GitHub Theme预先计算你的配置结果,并将Lua字节码保存在缓存中,以便下次加载时使用。 这显著提高了GitHub Theme的执行速度。对配置的更改将自动重新计算和缓存。
默认情况下,GitHub Theme将编译结果写入系统的cache
目录。在Unix系统上,这是
$XDG_CACHE_HOME/nvim/github-theme
,在Windows上,这是%localappdata%\\Temp\\nvim\\github-theme
。
GitHub Theme提供了一些函数来处理GitHub Theme编译器。
:GithubThemeCompile " 手动调用GitHub Theme编译器创建/更新编译文件
require('github-theme').compile() -- Lua API版本
交互式
Github 主题使得修改配置并查看结果变得容易。为此,Github 主题提供了以下命令:
GithubThemeInteractive
该命令会为当前缓冲区添加一个在 BufferWritePost
事件上执行的自动命令。这个自动命令会清除 Github 主题的内部状态,并从新保存的文件中重新加载配置。然后它会重置配色方案。
支持的插件
- 内置 LSP 诊断
- ale
- circles.nvim
- coc.nvim
- dap-ui
- dashboard-nvim
- diffchar.vim
- diffview.nvim
- fidget.nvim
- fsread.nvim
- fzf-lua
- gitsigns.nvim
- indent-blankline.nvim
- lsp-trouble.nvim
- lspsaga.nvim
- lualine.nvim
- mini.nvim
- neo-tree.nvim
- neogit
- nvim-bufferline.lua
- nvim-cmp
- nvim-compe
- nvim-notify
- nvim-tree.lua
- nvim-treesitter-context
- nvim-treesitter
- nvim-web-devicons
- telescope.nvim
- vim-airline
- vim-gitgutter
- which-key.nvim
状态栏
Lualine
Lualine 通过检查 vim.g.colors_name
的值(使用 :colorscheme
命令时设置)来确定要加载的主题。在调用 setup 之前设置你的配色方案。
vim.cmd('colorscheme github_dark')
require('lualine').setup({ ... })
Airline
使用 vim 命令 :AirlineThemes
设置你的 airline 配色方案。
语法高亮组
本节将帮助你确定某段语法应用了哪个高亮组。这些方法可以显示当前光标位置(光标下)正在使用的高亮组。
[!提示] 在 Neovim v0.9.0 及更高版本中,你可以使用内置命令
:Inspect
或 Lua 函数vim.show_pos()
。
Treesitter 高亮
如果 treesitter 是相关语言的高亮方法,你可以使用命令::TSHighlightCapturesUnderCursor
。这个命令来自 treesitter playground 插件。确保你已安装此插件以及 nvim-treesitter。
在 Tmux 中正确显示 undercurls
要让 undercurls 显示并带有颜色,请在你的 Tmux 配置文件中添加以下内容:
# Undercurl
set -g default-terminal '${TERM}'
set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm' # undercurl 支持
set -as terminal-overrides ',*:Setulc=\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m' # 下划线颜色 - 需要 tmux-3.0
贡献
版权
本项目基于 MIT 许可证发布。 更多信息请查看 LICENSE 或访问 opensource.org