开始学习vim一是觉得非常炫酷,二也是发现自己配置的vim在不同的机器下的迁移成本最低,非常方便适合多机器的开发场景,而如果选择用vim开发,就一定会选择全新的neovim(具体区别可参考:Vim还是Neovim?为什么你应该使用后者?。虽然我们大可用别人现成的配置,完成一个开箱即用的编辑器,但纯命令行的插件快捷键也会让人十分头大,那不如趁有时间,从头配置自己的编辑器。
这是我目前的配置仓库,欢迎交流。注:仍在逐步配置中
强烈推荐chirs大佬的这个视频Neovim from Scratch,虽然有些配置已经不是最新的了,但是可以学习如何自己去定制化配置,如何找到想要的配置。
安装
Neovim
一开始安装的是v0.8的版本,但Ubuntu环境下只有0.6(apt) / 0.7(pip stable) / 0.9(pip unstable),没法安装0.8,因此选择直接下载编译后的包进行安装,这样也方便后续升级管理。可以在neovim github上找到对应的安装包。
1 | wget https://github.com/neovim/neovim/releases/download/stable/nvim-linux64.tar.gz |
如果安装顺利,输入第三行命令就可以正常打开nvim了,但现在的nvim应该什么都没,和vim一样的空空荡荡,最后记得把nvim加入path。
1 | export PATH=$PATH:/usr/local/nvim-linux64/bin |
Nerd Fonts
Nerd字体是含有大量的icon图标的字体,因为它不像网页或软件有icon库,所以需要集成在字体中,这样终端也可以改造得非常炫酷,可以在网站找到合适的字体下载,windows直接双击安装即可,然后在终端配置中修改字体,我选择的是hack nerd mono。
配置文件
Neovim的配置文件在~/.config/nvim
下,采用lua编写,默认会读取init.lua。我的配置结构是下面有一个lua的文件夹编写各种配置,init.lua会执行这些配置文件,所有的插件在plugin-lazy中安装,在plugin-config文件夹下配置插件。
1 | ├── init.lua |
样式配置
类似.vimrc
的配置,可以开启一些比如行号、鼠标、缩进的配置,只是用lua重写了一遍,以下为我的配置,对应文件setting.lua
1 | local options = { |
快捷键
自定义快捷键是必不可少的一个步骤,在使用以及配置插件的过程中我们也会根据需求去调整快捷键。在vim中有一个快捷键叫做leader,先按这个键再按其他的字母可以就可以组合出更多的快捷键。我将空格键设置为leader,并配置再normal模式下空格+q就可以退出页面。
1 | vim.g.mapleader = " " |
剪贴板
想要windows和wsl的剪贴板互通可以安装win32yank
1 | wget https://github.com/equalsraf/win32yank/releases/download/v0.1.1/win32yank-x64.zip |
方案1:可以通过mapping设置与系统剪贴板的交互,这样我们可以控制什么时候和系统剪贴板交互
1 | map("n", "<leader>y", "\"+y", opt) |
方案2:覆盖vim剪贴板的配置,直接复制到系统剪贴板中,但有个问题是发现这个配置后我的启动速度特别慢(见测试启动速度)
1 | vim.cmd([[ |
插件
插件管理器
vim的插件管理器有很多个,现在最常见的有packer和lazy两个,如果跟着教程学大多都是用packer的,但lazy这两年冒得很快,现在大佬们的仓库都是lazy居多,而且lazy安装插件方式比较配置化,看着清爽一点,安装也更加可视化操作一些,支持配置插件的加载方式。
lazy的安装方式非常简单,直接在lua文件中写入以下代码,重启就行
1 | local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" |
如果要新增一个插件,只需要在setup中加上这个仓库
1 | require("lazy").setup({ |
Theme 主题
工欲善其事必先利其器,编辑器好看了才有动力配置下去,因此第一步当然是安装主题插件啦,这里推荐两个常见主题onedark和nord
1 | require("lazy").setup({ |
Telescope 模糊搜索
telescope.nvim是一个模糊搜索的插件。这个插件需要注意默认搜索能力是基于BurntSushi/ripgrep的能力,所以一定要记得在机器上安装ripgrep,否则会发现空白的搜索结果(甚至不报错。。)
Null-ls
null-ls的配置说明不是很完善,中文文档也不是很多,参考了这个视频Neovim - Null-LS Formatting, Linting & more,另外这篇英文文档也不错Nvim lsp: set up null-ls for beginners
Debug & Learning
测试启动速度
在刚开始配置没多久,就发现nvim加载异常缓慢,比vscode开启时间还长,于是排查了一些导致启动速度慢的原因,在开启nvim的时候只需要加上--startuptime
就可以记录启动日志了。
1 | nvim --startuptime startup.log |
从日志中可以看到clipboard花费了700ms的时间来启动,虽然不知道是为什么,但为了解决启动速度的问题,我把这段配置去掉了,而且也有其他方法和剪贴板进行交互。
1 | times in msec |
Lua
为了更好地配置vim,需要学习lua语法学习和规范,因此在本地也安装了lua和luarocks,也参考了LuaStyleGuide配置了规范。
- 缩进2个空格
- 字符串双引号
参考资料
- Neovim from Scratch 非常推荐这个教程,LunarVim的开发者做的视频,很清晰
- LunarVim 参考了不少这个配置
- Credit to 小伙伴五木