-- ============================================================================= -- colorscheme.lua — tokyonight(UI 主题, 全透明) + VSCode Dark+ 代码配色覆盖 -- ============================================================================= return { { "folke/tokyonight.nvim", lazy = false, priority = 1000, opts = { style = "night", transparent = true, styles = { sidebars = "transparent", floats = "transparent", -- 浮动窗也透明(用户原本就是这个状态) }, on_highlights = function(hl, c) -- bufferline 标签栏背景透明 hl.BufferLineFill = { bg = "NONE" } hl.BufferLineBackGround = { bg = "NONE", fg = c.fg_gutter } hl.BufferLineBackGroundVisible = { bg = "NONE", fg = c.fg } hl.BufferLineBackGroundSelected = { bg = c.bg_highlight, fg = c.fg, bold = true } hl.BufferLineSeparator = { fg = c.fg_gutter } hl.BufferLineSeparatorSelected = { fg = c.blue } end, }, config = function(_, opts) require("tokyonight").setup(opts) vim.cmd.colorscheme("tokyonight") -- VSCode Dark+ 代码配色覆盖(只覆盖代码高亮组,UI/border/inlay hint 全走 tokyonight 默认) local vs = { variable = "#9CDCFE", -- 浅蓝 builtin_var = "#569CD6", -- 蓝 parameter = "#9CDCFE", field = "#9CDCFE", property = "#9CDCFE", func = "#DCDCAA", -- 浅黄 builtin_fn = "#DCDCAA", method = "#DCDCAA", type = "#4EC9B0", -- teal builtin_type = "#4EC9B0", struct = "#4EC9B0", class = "#4EC9B0", enum = "#4EC9B0", constructor = "#4EC9B0", module = "#4EC9B0", constant = "#4FC1FF", builtin_const = "#569CD6", macro = "#B5CEA8", keyword = "#569CD6", keyword_ctrl = "#C586C0", -- pink(控制流) operator = "#D4D4D4", -- 灰白 punctuation = "#D4D4D4", string = "#CE9178", -- 橙 string_escape = "#D7BA7D", number = "#B5CEA8", -- 浅绿 boolean = "#569CD6", comment = "#565f89", -- 灰绿 } local override = function() local set = function(name, spec) vim.api.nvim_set_hl(0, name, spec) end -- treesitter set("@variable", { fg = vs.variable }) set("@variable.builtin", { fg = vs.builtin_var }) set("@variable.parameter", { fg = vs.parameter, italic = true }) set("@variable.member", { fg = vs.field }) set("@field", { fg = vs.field }) set("@property", { fg = vs.property }) set("@function", { fg = vs.func }) set("@function.call", { fg = vs.func }) set("@function.builtin", { fg = vs.builtin_fn }) set("@method", { fg = vs.method }) set("@method.call", { fg = vs.method }) set("@constructor", { fg = vs.constructor }) set("@type", { fg = vs.type }) set("@type.builtin", { fg = vs.builtin_type }) set("@type.definition", { fg = vs.type }) set("@struct", { fg = vs.struct }) set("@class", { fg = vs.class }) set("@enum", { fg = vs.enum }) set("@module", { fg = vs.module }) set("@constant", { fg = vs.constant }) set("@constant.builtin", { fg = vs.builtin_const }) set("@macro", { fg = vs.macro }) set("@keyword", { fg = vs.keyword }) set("@keyword.function", { fg = vs.keyword_ctrl }) set("@keyword.operator", { fg = vs.keyword }) set("@keyword.return", { fg = vs.keyword_ctrl }) set("@operator", { fg = vs.operator }) set("@punctuation", { fg = vs.punctuation }) set("@punctuation.bracket", { fg = vs.punctuation }) set("@punctuation.delimiter", { fg = vs.punctuation }) set("@punctuation.special", { fg = vs.string_escape }) set("@string", { fg = vs.string }) set("@string.escape", { fg = vs.string_escape }) set("@string.special", { fg = vs.string_escape }) set("@number", { fg = vs.number }) set("@boolean", { fg = vs.boolean }) set("@float", { fg = vs.number }) set("@comment", { fg = vs.comment, italic = true }) set("@tag", { fg = vs.keyword }) set("@tag.attribute", { fg = vs.variable }) set("@tag.delimiter", { fg = vs.punctuation }) set("@attribute", { fg = vs.keyword }) set("@label", { fg = vs.variable }) -- LSP semantic tokens (clangd / lua_ls 发送) set("@lsp.type.variable", { fg = vs.variable }) set("@lsp.type.parameter", { fg = vs.parameter, italic = true }) set("@lsp.type.property", { fg = vs.property }) set("@lsp.type.function", { fg = vs.func }) set("@lsp.type.method", { fg = vs.method }) set("@lsp.type.class", { fg = vs.class }) set("@lsp.type.struct", { fg = vs.struct }) set("@lsp.type.enum", { fg = vs.enum }) set("@lsp.type.enumMember", { fg = vs.constant }) set("@lsp.type.constant", { fg = vs.constant }) set("@lsp.type.field", { fg = vs.field }) set("@lsp.type.typeParameter", { fg = vs.type }) set("@lsp.mod.readonly", { fg = vs.constant }) set("@lsp.typemod.variable.readonly", { fg = vs.constant }) set("@lsp.typemod.variable.global", { fg = vs.constant }) -- inlay hint 透明背景 + 用户原来的紫灰色 #565f89 set("LspInlayHint", { bg = "NONE", fg = "#565f89", italic = true }) end -- 切到 tokyonight 后立即覆盖,ColorScheme 事件再覆盖一次(防 lazy reload) vim.api.nvim_create_autocmd("ColorScheme", { pattern = "tokyonight", callback = override, }) override() end, }, }