Project Icon

github-nvim-theme

Neovim专用GitHub风格主题插件

github-nvim-theme为Neovim提供多种GitHub风格配色方案,包括暗色、亮色和色盲友好版本。该插件支持最新Neovim特性,如TreeSitter和LSP,并遵循GitHub的VSCode主题设计。它支持多种插件和状态栏,具有高度可配置性,支持模板覆盖、编译和实时重载。这个主题插件为Neovim用户带来GitHub风格的视觉体验和性能优化。

github-nvim-主题

Neovim 测试

通知

[!警告] 如果您自定义或配置颜色,或者升级配色方案后发现外观没有变化,请运行: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-themegithub-vscode-themeGithub Web UIPrimer
github_darkGithub Dark--
github_lightGithub Light--
github_dark_dimmedGithub Dark DimmedDark dimmeddark_dimmed
github_dark_defaultGithub Dark DefaultDark defaultdark
github_light_defaultGithub Light DefaultLight defaultlight
github_dark_high_contrastGithub Dark High ContrastDark high contrastdark_high_contrast
github_light_high_contrastGithub Light High ContrastLight high contrastlight_high_contrast
github_dark_colorblindGithub Dark Colorblind (Beta)Dark Protanopia & Deuteranopiadark_colorblind
github_light_colorblindGithub Light Colorblind (Beta)Light Protanopia & Deuteranopialight_colorblind
github_dark_tritanopia-Dark Tritanopiadark_tritanopia
github_light_tritanopia-Light Tritanopialight_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.luaplugins.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.luaplugins.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')

截图

Github 深色

vim.cmd('colorscheme github_dark')

github_dark

Github 深色默认

vim.cmd('colorscheme github_dark_default')

github_dark_default

Github 深色暗淡

vim.cmd('colorscheme github_dark_dimmed')

github_dark_dimmed

Github 深色高对比度

vim.cmd('colorscheme github_dark_high_contrast')

github_dark_high_contrast

Github 深色色盲模式(测试版)

vim.cmd('colorscheme github_dark_colorblind')

github_dark_colorblind

Github 深色蓝黄色盲模式(测试版)

vim.cmd('colorscheme github_dark_tritanopia')

github_dark_tritanopia

Github 浅色

vim.cmd('colorscheme github_light')

github_light

Github 浅色默认

vim.cmd('colorscheme github_light_default')

github_light_default

Github 浅色高对比度

vim.cmd('colorscheme github_light_high_contrast')

github_light_high_contrast

Github 浅色色盲模式(测试版)

vim.cmd('colorscheme github_light_colorblind')

github_light_colorblind

Github 浅色蓝黄色盲模式(测试版)

vim.cmd('colorscheme github_light_tritanopia')

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-themeUsage

模块

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 主题的内部状态,并从新保存的文件中重新加载配置。然后它会重置配色方案。

支持的插件

状态栏

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

贡献

查看 CONTRIBUTING.md

版权

本项目基于 MIT 许可证发布。 更多信息请查看 LICENSE 或访问 opensource.org

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号