Neovim 从Vimscript向Lua的迁移
Neovim 从Vimscript向Lua的迁移
近几年发现Neovim的许多插件都在向Lua迁移
前段时间看到了几个插件想去试试结果发现都是需要Lua支持的(笑
索性决定从Vimscript迁移到Lua
期间遇到了很多问题
索性写了这一篇Blog记录一下
文件结构
1 |
|
也欢迎clone
我的nvim
配置使用planetarium1001/nvim
Config
Neovim使用Lua依赖init.lua
文件,该文件位于~/.config/nvim/
下面init.lua
不与以往的init.vim
语法发生了一些变化,以往使用set
设置一些内容
在lua中需要使用vim.opt
等参数设置
为了使得init.lua
更加清晰简单,我选择在专门的目录写配置文件
而不是都写在init.lua
中
所以init.lua
文件中的内容就变成了如下:
1 |
|
其中config.xxxx
在这里指的是文件位于~/nvim/lua/config/xxx
这里采用Lazy.nvim
作为插件管理
部分基础快捷键配置写在lua/config/keymaps.lua
中
启动时默认光标位于上一次编辑文件位置,用lua/config/autocmds.lua
实现
原先在Vimscript中用set配置的一些基础设置移动到了lua/config/options.lua
中
这样的文件结构让我感觉会舒服一点(?)
Lazy.lua
Lazy.nvim的设置直接参考的Lazy.nvim的Github
1 |
|
其中{ import = “plugins” }的目的是引入lua/plugins
目录下的lua文件
用于插件管理
其余就没有再调整Lazy.nvim的配置了,都采用默认的了
Keymaps
由于习惯使用大写的H J K L
快速转跳
所以第一件事就是定义了H J K L
的快捷键
1 |
|
使用H J K L
代替10h 10j 10k 10l
在Normal模式下面快速调整光标位置
再就是没找到开关Nvim-Tree
的api,只好在Keymaps单独定义了一个快捷键用于打开Nvim-Tree
1 |
|
autocmds.lua
1 |
|
在网上抄来的代码(
可以在启动Neovim
的时候自动恢复到上一次编辑文件的位置
在init.lua
中引入就可以使用了
以前在Vim
的时候就喜欢这个功能
我感觉还挺方便的(?)
options.lua
1 |
|
主要设置了
- 相对行号的显示
- Tab缩进使用4个空格
- 屏幕上下端预览预留10行
- 用
·
符号代替空格显示
其余的都大差不差,好像没什么特别需要说明的(?)
除了最后的UTF-8
的问题,因为使用了强制使用UTF-8
会导致有些文件的字符显示出现问题
索性就直接放弃了(
暂时没有发现有什么特别影响使用的地方
plugins
在lua/plugins
文件夹下面我放入了一些插件配置文件
使用Lazy.nvim
可以通过{ "import plugins" }
来让其管理plugins文件夹下面所有的插件配置文件
我觉得单独丢到一个文件夹按照插件名字作为文件名管理会比全部写在Lazy.lua
文件里面清晰便于管理一些
1 |
|
目前就使用了这一些插件
其中对于代码提示和自动补全采用的是LSP
和cmp
以前使用的coc.nvim
Neovim
最近的几个版本中已经把LSP
内置了
但是配置起来有些麻烦,折腾了好几天都无功而返
前几天突然看见一个项目lsp-zero.nvim
用这个项目确实很快速方便的配置好了一个基础的LSP
和’cmp’
有些进一步的配置,比如使用Tab
键跳转补全内容,使用Enter
键选择补全内容的设置在他的文档里面都有提到
只需要无脑的复制粘贴就行了(笑
其他的一些设置,比如一些符号标注的设置可以去nvim-lspconfig
和nvim-cmp
的文档里面找,然后丢进去
其他的插件更多的是对于Neovim
的美化
比如主题tokonight
,提示和Neovim cmd的美化noice
等等之类的
lsp-zero.nvim
无论怎么样我在对于nvim-lspconfig
和nvim-cmp
的配置踩了很多坑
花了三四天都没有装好,所以决定在这里把我的配置经历写下来
或许是这篇文章最有价值的地方(?)
如果你对于下述内容没有自己操作的把握或者想直接抄作业,我会把我的完整配置放在这部分的最后
然后标明我修改的部分,可以自行修改使用
鉴于nvim-lspconfig
和nvim-cmp
的Github配置文档比较复杂而且我没有太看懂(
所以我直接选择了用lsp-zero.nvim
首先先使用包管理安装lsp-zero.nvim
这里建议直接参照lsp-zero.nvim
的官方文档Getting-Started
在Installing
中有提到几种主流包管理的安装方式
这里我用的是Lazy.nvim
,为了后续的进一步配置,我用的是他给的Advance config
安装的代码
在这里面他有提供两种针对LSP
服务管理的不同配置代码
因为可以使用mason.nvim
更加方便且可视的管理LSP
服务
所以我使用了automatic setup of LSP servers
的代码
按照文档安装
1 |
|
由于我是在Lazy.nvim
中直接导入一个文件夹的全部文件分别管理插件的
所以需要在官方给的这部分代码前面补上一个return
此外由于我使用K
来快速移动光标,所以需要将vim.keymap.set('n', 'K', '<cmd>lua vim.lsp.buf.hover()<cr>', opts)
中的K修改为其他按键
其中的快捷键和部分配置按照个人续修进行修改就行
到这里通过运行Lazy
自动安装之后我们就拥有的最基础的LSP
和cmp
功能
但是显然这些是不够用的
首先给mason.nvim
加一些Nerdfont
用来方便查看LSP
服务的状态
1 |
|
将上述内容丢入require('mason').setup({})
函数中
这样就可以在mason
界面显示这些Nerdfont符号
然后修改cmp
配置
加入关于Tab
和Enter
键的支持
这里需要LuaSnip
提供Super Tab
的支持
安装方法直接参照他的文档也可以
或者在plugins
文件夹下面新建一个luaship.lua
文件,加上以下内容
1 |
|
当然你也可以用普通的Tab
具体的文档可以在官方文档的这里找到普通Tab
1 |
|
Super Tab
1 |
|
普通Tab和超级Tab二选一就可以了Enter
1 |
|
这些内容丢进cmp.setup()
函数的mapping = mapping.preset.insert()
里面就可以了
现在拥有了基础的按键配置就可以正常使用这些功能了
下面贴出我的配置文件
我的配置
plugins/nvim-lspconfig.lua
1 |
|
plugins/mason.lua
1 |
|
plugins/mason-lspconfig.lua
1 |
|
plugins/nvim-cmp.lua
1 |
|
luaship.lua
1 |
|
其中我替换了一个快捷键LSP
中的K
因为我和Keymaps
的配置冲突,将其换成了gk
除此之外使用了Super Tab
和Enter
来选择自动补全项