My nvim config in 2023
Last updated: 2023/10/16 Published at: 2023/10/16
Start
在去年我曾经写过一篇 2022 年的 nvim 配置方案的博文,那篇文章实际上是本博客访问量最高的,随着时间来到了 2023 年的下半年,nvim 社区也有了新的变化,而随着 packer 插件管理器正式宣布放弃维护,我也不得不投身到了 lazy 的怀抱,然后说一句,真香!
简单统计了下我使用的插件数量,不知不觉间也来到了 60+,在插件选择,配置上也有了更多自己的想法,增删并定制了特性, 根据我平时编码时的习惯,常用的开发语言做了针对性的优化和设置,在这里分享出来供各位参考。
- 组织良好的配置目录
- 针对 HHKB 键盘的优化
- 手动 LS(language server) 管理
- 采用 nord 作为统一的颜色风格
- 便于扩展
话不多说,本文的内容如果对你有启发的话,那就最好不过了!仓库地址在文末!
From packer to lazy
其实从 packer 迁移至 lazy 的过程十分简单,一开始可以不用着急使用 lazy 的 lazy 特性。lazy 本身也支持不同的插件组织方式,可以像 packer 一样,将所有的插件放在一个文件中,也可以将插件组织在不同的文件中,形成文件树。当然,组织成文件树有着非常多的优势,我的 nvim config 也正采用了这一方案,对插件进行了简单分类,可以非常方便的对插件进行变更。
Config structure
目录结构很简单,入口文件为最外层的 init.lua
,所有主要的配置文件都放在 lua 目录下
plugin.lua
是 lazy.nvim 插件管理器的配置入口文件plugins
存放 lazy 所管理的所有插件以及有关的配置,并对插件进行了分类,放在了不同的子目录中autocmds.lua
中有一些自动执行的脚本basic.lua
中包含一些 nvim 的基本配置,与插件无关keymaps.lua
中包含一些快捷键的配置,这些快捷键和插件无关neovide.lua
中存放和 neovide 这个 nvim 的 GUI 有关的配置rikka.lua
是我 nvim 中统一的辅助类库,我的一些辅助函数,都会放在这个文件中
1config
2├── after
3│ └── ftplugin
4├── ftdetect
5├── lua
6│ ├── plugins
7│ │ ├── common
8│ │ ├── git
9│ │ ├── lsp
10│ │ │ ├── server
11│ │ ├── theme
12│ │ ├── treesitter
13│ │ ├── ui
14│ │ └── init.lua
15│ ├── autocmds.lua
16│ ├── basic.lua
17│ ├── keymaps.lua
18│ ├── neovide.lua
19│ ├── plugin.lua
20│ └── rikka.lua
21├── init.lua
22├── lazy-lock.json
23└── README.md
Plugins
这里不打算对 plugins
目录下的每个插件进行详细的介绍,每个插件的作用和功能都可以在插件本身的仓库中找到,同时也可以使用
help 命令查看相应的帮助文档。和具体某一插件相关的配置 (非默认配置/快捷键等),都在同一个文件中。
我在选择插件时并不拘泥于是否是纯 lua 编写,很多经典的 vim 插件都可以在 nvim
中工作良好,并且久经考验,不能因噎废食。
在 LSP 相关的配置中,我没有使用 mason,而选择了使用在 nvim-lspconfig 自行的对 language server 进行安装和管理,这虽然会带来些许的麻烦,但是有着更为清晰明了的配置格式和代码结构。也让我的 nvim 配置中不存在复杂的地方。
在代码补全方面,依然使用 nvim-cmp , 按键习惯参考了 Jetbrains 家产品的快捷键风格(仅代码补全部分),使用起来还是非常舒服的。
Rikka
rikka.lua
封装了我在 nvim 配置中的一些重复逻辑和通用的变量,可以在任何地方使用。将其命名为 rikka
,
只是我个人的小小爱好,配置中由我定义的所有的 keymap/autocmd 等,全部通过 rikka.setKeymap
来完成,进而可以在未来对这些 keymap/autocmd 进行更多的统一的优化和调整。
HHKB optimize
在之前的博文中,介绍了我的 HHKB 和 keybindings,整体的使用逻辑没有变化,但是在更换了 HHKB 的主控为 ydkb 之后,键盘的配置也有了更多的可能性,下面直接放出我的 HHKB 键位图。
L0 的配置
<ESC>
键在长按时映射到了 L2 层,此时按下的键就是 L2 层对应的键,最右上角的 ~
在长按时被映射到 Option 键。
L2 的配置
L2 层的配置非常简单,简单来说,任何单一按键就是 Option + 该按键的组合键,几个原来作为 Prefix 的键略有不同。
这样做的效果就是,我有三个键都是等效的 Option 键,而在 nvim 中,所有的组合式的快捷键,我都会选择使用 <M->
, 也就是 macOS 上的 Option 键。
这样既解决了 <M>
的跨平台问题,也解决了原本的 <M>
键左下角的位置不好按的问题,在搭配左手按键的时候会可以使用最右上角的 ~
作为等效的 <M>
使用。