安装好 lsp 与 blink 后,我们的Neovim已经基本可以作为一个代码编辑器来使用了,但如果与VSCode比较就会发现,lsp 提供的代码高亮有点贫瘠,pylsp 只能提供函数的高亮,第三方库函数的参数基本没有高亮提醒。这里可以补充一个知识,代码高亮功能的前提是编辑器能够解析代码,并分析其每一部分分别隶属于什么结构,解析得到的内容可以通过 :Inspect 显示。在显示内容中,我们能发现不止Treesitter提供的内容,还有 lsp 提供的分析内容,只不过 lsp 分析的内容相对更简单。VSCode拥有自己的代码解析器,而在Neovim及其衍生产物中,最好的选择是Treesitter,它会将代码解析为抽象语法树(abstract syntax tree,AST)并提供给Neovim中的其他插件。在这篇教程中,我们会使用 nvim-treesitter 作为Neovim的Treesitter提供、catppuccin 作为提供高亮的Neovim主题以及 rainbow-delimiters ——一个使用了Treesitter提供分析的彩虹括号插件。
nvim-treesitter 的安装
相比于 lsp ,安装 nvim-treesitter 非常简单,只需要以下代码即可。你也可以到相应的仓库中查看。
return{ "nvim-treesitter/nvim-treesitter", branch = "master", build=':TSUpdate', config=function () local configs = require('nvim-treesitter.configs') configs.setup({ ensure_installed = {'json', 'lua', 'luadoc', 'markdown_inline', 'matlab', 'powershell', 'python', 'vim', 'vimdoc', 'xml', 'regex'}, sync_install = false, auto_install = true, highlight = {enable = true}, indent = {enable = true}, }) end}WARNING
branch = "master"表示使用master分支,这是Treesitter的默认分支,也是稳定分支,但已经不再更新了。如果你需要使用正在更新的分支,请使用"main"分支。
ensure_installed 中填写你需要安装的语言 parser,目前支持的语言可以在 这里 找到,不是所有语言都支持Treesitter的全部功能。为了保证Neovim能够提供任意语言的代码高亮,我们启用了 auto_install,以便在打开的文件不存在于 ensure_installed 中时自动下载相应的 parser。
使用支持 nvim-treesitter 的主题
虽然 nvim-treesitter 提供了代码分析功能,但实际上的代码高亮是由主题来提供的,主题定义代码分析的不同结果应该呈现什么颜色。我比较推荐 catppuccin 这个主题,它不仅对Neovim及其插件有着充足的支持,还为社区中的大量其他工具提供了相应的主题,可以保证不同软件界面配色的一致性。
return { "catppuccin/nvim", name = "catppuccin", priority = 1000, config = function () require('catppuccin').setup({ custom_highlights = function (colors) return { Pmenu = { bg = colors.none }, PmenuExtra = { bg = colors.none }, NormalFloat = { bg = colors.none }, } end, integrations = { blink_cmp = true, mason = true, snacks = {enable = true}, treesitter = true, } }) vim.cmd.colorscheme("catppuccin-macchiato") end}catppuccin 对大量的其他的插件都有适配,你需要在 integrations 中进行相应的配置,有些插件的配置需要在对应的插件中进行,比如 bufferline。catppuccin 中含有四种不同的配色方案,我们在安装好主题后需要选择一种使用,第21行代码并不是对主题的配置,而是启用主题的代码。
rainbow-delimiter 的安装
rainbow-delimiter 的安装应该是我在文章中说明的最为简单的插件安装过程。
return { "HiPhish/rainbow-delimiters.nvim"}虽然这个插件是可以自定义的,包括文件类型的黑/白名单、优先级、策略、高亮队列等。但自定义的意义不大,这就只是个提供彩虹括号的插件,正常用就已经很好用了。
结语
有了 lsp 、treesitter 的帮助,我们的Neovim已经可以说和VSCode相差不大了,除了 dap ——也就是调试器。但如果只是使用Neovim作为脚本编辑器,现在该有的功能都有了。