- 项目的初衷
- 遇到的问题
- 停止维护的原因
- 归档即是新的开始
- 插件列表
- 插件管理器 nvim-plug
- 项目管理 rooter.nvim
- 异步代码检索 flygrep.nvim
- 历史文件管理 mru.nvim
- 代码格式化 format.nvim
- 版本控制 git.nvim
- 代码运行 code-runner.nvim
- 书签管理 bookmarks.nvim
- tags 管理 ctags.nvim
- 滚动侧栏 scrollbar.nvim
- 笔记插件 zettelkasten.nvim
- 异步job管理 job.nvim
- 模糊搜索插件 picker.nvim
- 项目文件跳转 altf.nvim
- 按键弹窗 record-key.nvim
- 录屏 record-screen.nvim
SpaceVim 从 2016 年 12 月诞生,到 2025 年 2 月 21 日正式归档,前后将近九年。 九年的时间足以让一个想法从萌芽走向成熟,也足以让一个项目逐渐找到它最合适的落点。 在我看来,归档并不意味着结束,也是新的一段开始。
项目的初衷
早期,开发这个项目的时候,是想做一个开箱即用的模块化 Vim 配置,类似于 spacemacs 那样, 把不同语言功能所需要的配置及插件都放到一个模块里面。使用者不再需要自己配置各种插件, 只需要简单地启用对应语言或者功能的模块就可以快速搭建 Vim 的开发环境。
遇到的问题
随着功能越来越多,代码越来越臃肿,速度也变得越来越慢。如果查看 git log 的话,不难发现,
很大一部分内容是做速度的优化。
甚至,我也使用 Lua 重写的相当一部分的内置插件,包括状态栏、标签栏、任务管理、项目管理、多光标、快捷键导航等等。
但是即便是使用 Lua 进行了重写,但是因为要兼容老版本的 Neovim 以及兼容 Vim,因此整体总的框架使用的是 Vim Script, 调用 Lua 插件的时候还是使用 VimL 去调用 Lua 的代码,例如:
func! SpaceVim#test(...)
lua require('task').start(require('spacevim').eval('a:000'))
endf
这样的话速度还是无法发挥到极致。
停止维护的原因
- 想使用纯 Lua 来写 Neovim 配置(nvim-config),不再兼容 Vim,因为我也很少再使用 Vim 了。
- 不想做 Neovim 老版本的兼容支持
- 单个功能插件独立维护,便于直接使用,我把原先 spacevim 中内置的很多功能,
归档即是新的开始
归档并不是结束,而是完成一个阶段性作品后的放手。正如上述原因里所描述,我希望使用 Lua 并且不再兼容老版本以及 Vim,使得代码能够更简洁。 相较于再制作一个 Lua 开发的 SpaceVim,我更乐意把 SpaceVim 中日常使用较多的功能独立成单独的插件。这样也方便他人根据实际的需求选择最小化的配置。
插件列表
目前已经切换到纯 Lua 配置的 Neovim 环境了,并且原先 SpaceVim 中常用功能已单独使用 Lua 重写。
个人 Neovim 配置仓库地址:nvim-config。
以下是我自己制作并且日常使用的 Neovim 插件,欢迎尝试。
插件管理器 nvim-plug
仓库地址:nvim-plug
这是我参考 dein 以及 vim-plug 写的一个异步的插件管理器,已经实现了常见的基于命令、文件类型、快捷键等操作的延迟加载。
项目管理 rooter.nvim
仓库地址:rooter.nvim
在使用 Vim 编辑代码文件时,比较常用的一个功能是根据当前文件的路径自动将当前目录切换到项目的根目录。 这个功能以前我使用的是 vim-rooter 这个插件。
而 rooter.nvim 正是使用 Lua 重新实现该功能的 Neovim 插件, 不同的是,该插件额外提供了一些模糊搜索插件拓展,可以模糊搜索历史打开过的项目。
此外,这个插件还支持设置 callback 函数,当切换项目时自动执行。
异步代码检索 flygrep.nvim
仓库地址:flygrep.nvim
日常阅读代码过程中还是经常需要搜索代码的,flygrep。插件会异步调用rg,并实时展示搜索结果。
历史文件管理 mru.nvim
仓库地址:mru.nvim
类似于 v:oldfiles,解决的问题是Windows系统下路径格式问题,同时支持各种筛选选项。此外也提供了一个 telescope 拓展。
代码格式化 format.nvim
仓库地址:format.nvim
很早以前,我使用的代码格式化插件是 neoformat,这是使用 VimScript 开发的插件,为了更快的速度体验,我使用 Lua 重新写了一个格式化插件,插件的基本逻辑参考了 neoformat。也支持 markdown 内代码块的格式化。
版本控制 git.nvim
仓库地址:git.nvim
可以这么说,这应该是我日常使用最多的插件,比如 :Git add,:Git commit,等等。
代码运行 code-runner.nvim
仓库地址:code-runner.nvim
vscode 里面有一个非常著名的插件,叫做CodeRunner,就是快速运行当前文件,并在下面分屏显示运行结果。code-runner.nvim 实现了想类似的功能,不仅仅可以运行当前文件,还可以快速运行 markdown 文件内当前代码块。
书签管理 bookmarks.nvim
仓库地址:bookmarks.nvim
可以标记当前行进入书签列表,支持添加备注内容,支持使用quickfix列表展示书签,也提供了一个 telescope 拓展以便于模糊搜索书签。
tags 管理 ctags.nvim
仓库地址:ctags.nvim
自动为当前项目生成ctags数据库,同时更新 &tags 选项,以便于使用ctrl-]跳转到光标tags定义位置。
滚动侧栏 scrollbar.nvim
仓库地址:scrollbar.nvim
自动在当前窗口右侧绘制一个滚动条,提示当前文档滚动页大致的位置。
笔记插件 zettelkasten.nvim
仓库地址:zettelkasten.nvim
这是一个做笔记的插件,支持标签内链,相互索引。
异步job管理 job.nvim
仓库地址:job.nvim
这是模拟 jobstart 的工具,基于libuv,可以用于异步执行命令。我的很多插件都是依赖这个job.nvim,比如插件管理器等等,需要异步执行外部命令的。
模糊搜索插件 picker.nvim
仓库地址:picker.nvim
早期在使用 Vim 时,使用过 ctrl-p、unite.vim、denite.nvim 等等插件。从 Neovim 浮窗功能出来后,逐步切换到了 telescope.nvim。 但是近期发现这个插件似乎不怎么在维护了,再加上自己也有想法写一个模糊搜索插件,于是就有了 picker.nvim。
项目文件跳转 altf.nvim
仓库地址:altf.nvim
这个插件提供了一个命令 :A,可以使用这个命令在头文件和C文件、或者源文件和测试文件等之间快速跳转。
按键弹窗 record-key.nvim
仓库地址:record-key.nvim
有时候制作录屏的时候,需要展示自己按键的顺序,这个插件以弹窗的形式,在右下方展示按键的顺序。
录屏 record-screen.nvim
仓库地址:record-screen.nvim
屏幕录制的软件其实挺多的,这个插件通过后台调用 ffmpeg,支持录制声音、话筒、摄像头等等。