从零开始配置 vim(11)——插件管理

网友投稿 1824 2022-09-30

从零开始配置 vim(11)——插件管理

从零开始配置 vim(11)——插件管理

之前我们介绍了基础配置部分和快捷键配置部分。如果你配置了这两个部分,vim已经算是比较好用了。但是作为代码编辑器来讲还是显的比较简陋,用这些配置来完成日常的编码任务会显得力不从心。vim比较强大的一点是它拥有丰富的插件系统。大量高手在上面为它开发各种形式的插件。今天我们将从插件管理开始,利用前人的成果丰富我们的vim功能

使用lua添加自动命令组

在正式开始介绍插件之前我们先优化一下加载配置文件的时机。之前我们介绍自动命令的时候已经给出了如何自动加载配置

augroup NVIMRCautocmd!autocmd BufWritePost init.lua source %augroup END

在使用vimscript的场合它可以正常工作。但是如何在 neovim中配置它呢? 目前有两种解决办法

使用新版 neovim api

在 ​​neovim0.7​​​ 版本以后,我们可以使用下列 ​​api​​ 来创建并使用自动命令组

​​nvim_create_augroup({name}, {*opts})​​ : 创建自动命令组,如果创建成功,返回自动命令组的id​​nvim_create_autocmd({event}, {*opts})​​:创建自动命令。

​​nvim_create_augroup​​​ 传递一个自动命令组的名称,另外它可以接受一个 ​​table​​​ 作为属性值,目前属性值可以传入一个 ​​clear​​​ 的布尔值,相当于是否执行 ​​autocmd!​​ 。

​​nvim_create_autocmd​​​,第一个参数是一个或者多个事件字符串组成的 ​​table​​​,它的含义与 ​​autocmd​​​ 中的事件相同,用的字符串也相同。第二个参数是一个表示属性的 ​​table​​。常用的有:

group: 所属自动命令组pattern: autocmd中的 pattern部分callback: 一个lua的回调函数,当事件发生时,调用该回调函数command: 该字段可以填入一个 vim命令的字符串,相当于 autocmd中的 command部分

我们要将上述代码改为 ​​lua​​ 版本,首先使用创建一个自动命令组

local nvimrc = vim.api.nvim_create_augroup("NVIMRC", {clear = true})

接着为了方便我们使用 ​​command​​ 字段来完成这个自动命令

vim.api.nvim_create_autocmd({"BufWritePost"}, { pattern = "init.lua", group = nvimrc, command = "source %"})

在上一篇文章中,我们已经初步有了划分模块的概念。随着配置的越来越多,以后在 ​​init.lua​​​ 中一定伴随着大量的 ​​require​​​。我们可以通过 ​​gf​​​ 快速跳转到对应的模块,但是前提条件是我们已经设置了 ​​path​​​ 变量。每次退出 ​​nvim​​​ 再进来,需要重新设置,有没有觉得很麻烦呢?如果我们使用自动命令组,在进入 ​​init.lua​​​ 之后自动设置 ​​path​​ 就好了。我们学会了使用自动命令组之后,来自己实现这个需求

vim.api.nvim_create_autocmd({"BufWritePost"}, { pattern = "init.lua", group = nvimrc, callback = function() vim.o.path = vim.o.path .. ",**/*" end})

​​path​​​ 中可以添加多个路径作为文件搜索的路径,多个路径之间以 ​​ ,​​​ 分割。我们之前说过可以使用 ​​**/*​​​ 表示当前目录下所有文件。这样退出重新进入 ​​nvim​​​ 之后不需要再次手动输入 ​​path​​ 了。

在lua中执行vim命令

在 0.7以前的版本中无法通过上述api来创建自动命令。但是它提供了执行vim命令的接口。

我们可以使用 ​​vim.cmd​​​ 来执行 ​​vim​​​ 命令。它接收一个字符串参数,该字符串表示将要执行的 ​​vim​​​ 命令。可以使用引号括起来,但是需要对其中的特殊字符进行转义。也可以使用 ​​[[]]​​ 来括起来,此时就不需要进行转义了。使用上述函数我们可以很轻松的实现上面的功能

vim.cmd[[ augroup NVIMRC autocmd! autocmd BufWritePost init.lua source % autocmd BufReadPost init.lua set path+=**/* augroup END]]

两种方式各有千秋,但是既然使用 lua做配置,那么我想的是能使用 lua的地方尽量用 lua。

为了照顾还在使用 0.6 版本的小伙伴,我们先进行一下版本判断。最后的代码如下所示

if vim.fn.has "nvim-0.7" then local nvimrc = vim.api.nvim_create_augroup("NVIMRC", {clear = true}) vim.api.nvim_create_autocmd({"BufWritePost"}, { pattern = "init.lua", group = nvimrc, command = "source %" }) vim.api.nvim_create_autocmd({"BufWritePost"}, { pattern = "init.lua", group = nvimrc, callback = function() vim.o.path = vim.o.path .. ",**/*" end })else vim.cmd[[ augroup NVIMRC autocmd! autocmd BufWritePost init.lua source % autocmd BufReadPost init.lua set path+=**/* augroup END ]]end

我将这段代码放到了 ​​lua/autocmd.lua​​​ 中。所以我需要在 ​​init.lua​​ 中加载这个文件

require("autocmd")

插件管理

在新版 ​​neovim​​​ (版本大于 ​​0.5​​​ ) 中,一般推荐使用 ​​packer​​ 这个插件管理工具。

根据官方的描述,我们使用如下方式来进行安装

git clone --depth 1 ~/.local/share/nvim/site/pack/packer/start/packer.nvim

根据官方的描述,我们可以在 ​​lua/plugins.lua​​ 中添加插件管理相关的代码。

return require('packer').startup(function(use) -- Packer can manage itself use 'wbthomason/packer.nvim' -- 添加另外插件end)

接着我们需要在 ​​init.lua​​ 中加载这个文件

require("plugins")

后面我们可以使用下面的一些命令来对插件进行管理

​​PackerInstall​​:先清理不需要的插件然后安装插件​​PackerClean​​: 清理不需要的插件​​PackerUpdate​​:先清理插件,然后更新已有的插件,再安装暂时没有的插件​​PackerSync​​​: 包括​​PackerClean​​​和​​PackerUpdate​​ 的功能

根据官方的描述,不管是要增删改哪些插件,都可以用 ​​PackerSync​​ 这一条命令搞定。

完成之后我们可以使用 q来退出,如果出错可以使用 r来重新-

本篇就到这里了。后面几篇文章主要通过该插件管理工具来-并配置一些插件,敬请期待!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:从零开始配置 vim(9)——初始配置
下一篇:让微信小程序开发如鱼得水(实例)(微信小程序的成功案例)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~