(上一次配 vim 还是上大学之前,转眼就快本科毕业了。)
这次主要是把一部分 .vimrc
中的配置迁移到 neovim 的 lua 风格配置上,同时把一部分插件迁移到 neovim 的生态中。
基本配置
配置主要存放在 ~/.config/nvim
,目录结构大致为
1 | ├── init.lua |
其中 core
中存放全局配置,plugins
中存放插件相关配置,init.lua
中引用各个配置,因此后面每个文件配置时都需要在 init.lua
中 require
。
为了配置迁移的平滑性,先在 init.lua
中加入下面的代码,使其读取原本的 .vimrc
文件
1 | vim.cmd [[ |
在 core
文件夹中,创建 options.lua
用于配置 neovim 的选项,我的配置如下
1 | -- 基础配置 |
在 core
文件夹中,创建 keymaps.lua
用于配置键位映射,我的配置如下
1 | -- 按键映射 |
上面这些基本是从 .vimrc
中直接翻译过来
packer
我原本使用 plugged
进行插件管理,这次将新的插件使用 packer
配置,之后会把 plugged
中的插件逐步替换和迁移过来。
在 plugins
文件夹中创建 packer-setup.lua
用于 packer
的自动安装。我这里使用的安装目录是 ~/.local/share/nvim/site/pack/packer
,后面通过 packer
安装的插件也会存放在这个目录。
1 | local packer_setup = {} |
在 plugins
文件夹中创建 packer.lua
用于 packer
的插件管理。安装插件只需要在这里添加 use
语句。
1 | -- 保存本文件时自动更新插件 |
LSP 和补全
neovim 的主要特性之一就是添加了对 Language Server Protocol 的原生支持,我也把原本基于 YouCompleteMe 的补全迁移到 Nvim LSP client 上。用到的插件主要有 nvim-lspconfig
、nvim-cmp
、cmp-nvim-lsp
,还有一些其他的插件提供辅助功能,具体可以看上面的插件列表。我尝试了 LuaSnip
,但是感觉不如一直使用的 ultisnips
顺手,所以目前继续使用 ultisnips
。LSP 协议支持自定义 style 的 formatting,但 clangd 对这个特性的支持并不好(来源: https://clangd.llvm.org/features#formatting),因此我保留了原本使用的 vim-autoformat 插件用于 formatting。
主要的配置文件就是配置 LSP 的 lspconfig.lua
和配置补全的 nvim-cmp.lua
,其中 LSP 的键位基本是默认的,补全则根据以前使用的键位做了一些配置
lspconfig.lua
1 | -- Mappings. |
nvim-cmp.lua
1 | -- ultisnips setup |
nvim-tree
添加了在打开目录时调用 nvim-tree
的 autocmd
1 | -- disable netrw |
nvim-treesitter
配置了高亮、折叠和彩虹括号(需要 p00f/nvim-ts-rainbow
)
1 | require'nvim-treesitter.configs'.setup { |
其他
使用了状态栏 nvim-lualine/lualine.nvim
和配色 rebelot/kanagawa.nvim
,我使用了一个 appearance.lua
文件管理这两个插件的配置
1 | -- 配色 |