当前位置:网站首页>从零开始配置 vim(11)——插件管理
从零开始配置 vim(11)——插件管理
2022-08-11 10:47:00 【aluluka】
之前我们介绍了基础配置部分和快捷键配置部分。如果你配置了这两个部分,vim已经算是比较好用了。但是作为代码编辑器来讲还是显的比较简陋,用这些配置来完成日常的编码任务会显得力不从心。vim比较强大的一点是它拥有丰富的插件系统。大量高手在上面为它开发各种形式的插件。今天我们将从插件管理开始,利用前人的成果丰富我们的vim功能
使用lua添加自动命令组
在正式开始介绍插件之前我们先优化一下加载配置文件的时机。之前我们介绍自动命令的时候已经给出了如何自动加载配置
augroup NVIMRC
autocmd!
autocmd BufWritePost init.lua source %
augroup END
在使用vimscript的场合它可以正常工作。但是如何在 neovim中配置它呢?
目前有两种解决办法
使用新版 neovim api
在 neovim0.7
版本以后,我们可以使用下列 api
来创建并使用自动命令组
nvim_create_augroup({name}, {*opts})
: 创建自动命令组,如果创建成功,返回自动命令组的idnvim_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 https://github.com/wbthomason/packer.nvim\
~/.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来重新下载
本篇就到这里了。后面几篇文章主要通过该插件管理工具来下载并配置一些插件,敬请期待!
边栏推荐
猜你喜欢
使用.NET简单实现一个Redis的高性能克隆版(七-完结)
Neuropathic pain classification picture Daquan, neuropathic pain classification
虚拟机使用 WinSCP & Putty
Database indexes and their underlying data structures
【应用SLAM技术建立二维栅格化地图】
B端产品需求分析与优先级判断
PerfView专题 (第一篇):如何寻找热点函数
宝塔一键部署WordPress(含宝塔添加站点、阿里云安全组配置、阿里云子域名解析)
【Mask2Former】 解决代码中一些问题
和为s的连续正数序列
随机推荐
阿里云ssl证书申请,宝塔ssl证书部署
SDS观察站
【中央任务调度系统—通信开发】
【luogu CF1427F】Boring Card Game(贪心)(性质)
2. 类与对象——封装
数据库的索引和其底层数据结构
使用函数计算打包下载OSS文件【遇坑锦集】
【luogu CF1286E】Fedya the Potter Strikes Back(字符串)(KMP)(势能分析)(线段树)
一站式PCBA组装加工有哪些环节?
Dreamweaver网页作业——紫罗兰永恒花园动漫价绍网页 7页,含有table表格,js表单验证还有首页视频。以及列表页。浮
6.1 总线的概念和结构形态
SAP Product Enhancement Technology Review
二、第二章变量
LeetCode 剑指 Offer 35. 复杂链表的复制
The ceiling-level microservice boss summed up this 451-page note to tell you that microservices should be learned this way
Convolutional Neural Network Gradient Vanishing, The Concept of Gradient in Neural Networks
Gold Transfer(树上倍增)
Neuropathic pain classification picture Daquan, neuropathic pain classification
MongoDB 非关系型数据库
mySQL transaction and its characteristic analysis