Skip to content

colorscheme

在 Vim 中 colorscheme 指 Vim 的颜色主题,用于控制代码样式、背景色、文字色等。

定义 colorscheme

colorscheme 本质上就是 vim 定义的一系列内置环境变量,我们只需要为这些制定的环境变量赋值就能够控制指定颜色。他被要求位于 $VIMRUNTIME/colors 目录下的可执行文件:

VimL
hi Normal guifg=#FFFFFF guibg=#1E1E1E
hi Comment guifg=#5F875F
hi String guifg=#D7875F

其中 Normal、Comment、String 等都是 Vim 中规定的配置颜色的元素,而 guifg 表示前景色,guibg 表示背景色。还可以使用 gui 表示其他样式,例如 bolditalic 等。

Tips

具体支持那些配置颜色元素可以使用 :help highlight-groups 来进行查看。

应用 colorscheme

使用 :colorscheme <theme_name> 来应用指定的颜色主题,vim 会自动从 $VIMRUNTIME/colors 中获取可用的颜色主题。我们只需要将它添加到 $VIMRC 后就能够自动应用该主题了。

语法高亮 syntax

语法高亮就是让代码文件中的语法元素(关键字、字符串、注释等)以不同颜色显示出来,帮助区分代码中的各类成分提高代码的可读性。要想开启语法高亮使用:

VimL
:syntax on

语法高亮中的颜色是由 colorscheme 决定的,语法高亮的核心就是如何识别语法中的各个部分。他们的定义文件位于 $VIMRUNTIME/syntax 中,其中以 <filetype>.vim 这样的命名文件构成,其中的基本组成部分类似:

VimL
" 高亮注释,匹配以 # 开头的行
syntax match myComment "#.*"

" 高亮关键字
syntax keyword myKeyword if else while for

" 高亮字符串,匹配双引号中的内容
syntax region myString start=/"/ end=/"/

" 高亮数字,匹配任意数字
syntax match myNumber "\<\d\+\>"
  • syntax match: 使用单个正则表达式匹配一行中的某些字符串
  • syntax keyword: 直接定义关键字
  • syntax region: 用于跨行定义范围

之后还需要在其中将语法规则映射到高亮组(highlight-groups),它是由 colorscheme 决定的:

VimL
highlight link myComment Comment
highlight link myKeyword Keyword
highlight link myString String
highlight link myNumber Number

Tips

Neovim 先对于 Vim 不同的一点就是内置了 Tree-sitter 来解析和高亮代码。先对于 vim 的基于正则表达式的 syntax 模块来说会更加准确和快速。

安装 colorscheme

有一个vimcolorschemes网站提供了开源社区流行的 colorscheme。可以在其中预览和选择需要的 colorscheme。之后只需要在 $VIMRC 中定义 :colorscheme <colors_name> 即可。

在 AstroNVim 中设置 Colorscheme

首先是安装配色方案,存在以下几种安装方式:

Lua
-- 通过自定义的方式配置
return {
  "catppuccin/nvim",
  name = "catppuccin",
  opts = {
    -- configuration options...
  },
}

-- 有些插件是通过全局变量的形式初始化的而不是推荐的 setup() 方式
-- 此时自定义安装需要一些特殊的配置
return {
    "sainnhe/sonokai",
    init = function() -- init function runs before the plugin is loaded
      vim.g.sonokai_style = "shusia"
    end,
}

-- 如果 astrocommunity 中存在也可以通过他来安装
return {
  "AstroNvim/astrocommunity",
  { import = "astrocommunity.colorscheme.catppuccin" },
}

安装完成后就需要配置默认颜色方案了,它位于AstroUI插件中:

Lua
return {
  "AstroNvim/astroui",
  ---@type AstroUIOpts
  opts = {
    -- 无论那种方式安装都需要在这里设置为默认
    colorscheme = "catppuccin", -- "sonokai"
  },
}