Zwlin's Blog

My nvim config in 2023

Last updated: 2023/10/16     Published at: 2023/10/16

Start

在去年我曾经写过一篇 2022 年的 nvim 配置方案的博文,那篇文章实际上是本博客访问量最高的,随着时间来到了 2023 年的下半年,nvim 社区也有了新的变化,而随着 packer 插件管理器正式宣布放弃维护,我也不得不投身到了 lazy 的怀抱,然后说一句,真香!

简单统计了下我使用的插件数量,不知不觉间也来到了 60+,在插件选择,配置上也有了更多自己的想法,增删并定制了特性, 根据我平时编码时的习惯,常用的开发语言做了针对性的优化和设置,在这里分享出来供各位参考。

话不多说,本文的内容如果对你有启发的话,那就最好不过了!仓库地址在文末!

From packer to lazy

其实从 packer 迁移至 lazy 的过程十分简单,一开始可以不用着急使用 lazy 的 lazy 特性。lazy 本身也支持不同的插件组织方式,可以像 packer 一样,将所有的插件放在一个文件中,也可以将插件组织在不同的文件中,形成文件树。当然,组织成文件树有着非常多的优势,我的 nvim config 也正采用了这一方案,对插件进行了简单分类,可以非常方便的对插件进行变更。

Config structure

目录结构很简单,入口文件为最外层的 init.lua,所有主要的配置文件都放在 lua 目录下

 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 键。

HHKB_L0

L2 的配置

L2 层的配置非常简单,简单来说,任何单一按键就是 Option + 该按键的组合键,几个原来作为 Prefix 的键略有不同。

HHKB_L2

这样做的效果就是,我有三个键都是等效的 Option 键,而在 nvim 中,所有的组合式的快捷键,我都会选择使用 <M->, 也就是 macOS 上的 Option 键。 这样既解决了 <M> 的跨平台问题,也解决了原本的 <M> 键左下角的位置不好按的问题,在搭配左手按键的时候会可以使用最右上角的 ~ 作为等效的 <M> 使用。