从零开始配置 vim(11)——插件管理
之前我们介绍了基础配置部分和快捷键配置部分。如果你配置了这两个部分,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来重新下载

本篇就到这里了。后面几篇文章主要通过该插件管理工具来下载并配置一些插件,敬请期待!
从零开始配置 vim(11)——插件管理的更多相关文章
- Vim Vundle 插件管理器
/********************************************************************** * Vim Vundle 插件管理器 * 说明: * 话 ...
- 【vim】插件管理及代码智能提示与补全环境的配置
1. 引言 可以使用脚本/插件来给vim添加各种神奇的功能,从更换颜色主题.到代码智能提示,甚至项目管理.无数开发者通过开源社区贡献自己开发的插件,使得vim有可能变得无比强大.这儿http://vi ...
- Centos6.7下面配置vim及其插件
Vim是在vi的基础上升级而来的,比vi更强大,提供代码补全,编译功能 [4]vim Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用 ...
- vim利用插件管理工具-管理配置文件
目前被广泛应用的2各插件管理工具Pathogen和Vunble,我先说Pathogen Pathogen Pathogen完全用vim脚本编写,不用其他的代码(Vunble就用了python),所以安 ...
- 使用Vundle管理配置Vim的插件
1.介绍: 安装需要Git,触发git clone,默认将每一个指定特定格式插件的仓库复制到~/.vim/bundle/. 搜索需要Curl支持. Windows用户请直接访问Windows setu ...
- vim的插件管理与配置
vim作为我做喜欢的编辑器,可扩展性几乎是没有尽头的,前阵子一直在配置这.vimrc文件,原来搞过配色文件,现在主要就自动补全来设置下,同时作为自己配置的记录文档.……………………………………………… ...
- 配置vim之插件
涉及linux平台下ctags, taglist插件 ctags是一个用于产生代码索引文件的插件,它产生的索引可以帮助我们更快的定位到特定位置. ctags支持很多语言,比如java, c, c++, ...
- vim插件管理器的安装和配置-windows
# vim插件管理器的安装和配置-windows ### 前言------------------------------ vim做一框功能强大的编辑器,扩展功能令人称奇,插件机制非常灵活- 本篇推荐 ...
- VIM的配置以及插件管理
VIM的配置详细说明参考:http://www.ruanyifeng.com/blog/2018/09/vimrc.html 此外VIM的插件管理比如 Vundle可以参考这个博客: https:// ...
- Vim插件管理器Vundle使用
参考地址:http://www.linuxidc.com/Linux/2012-12/75684.htm Vundle(Vim bundle) 是一个vim的插件管理器. 其Github地址为: ht ...
随机推荐
- MySQL 数据分组后取第一条数据
SQL SERVER数据分组后取第一条数据--PARTITION BY -- 不加 distinct(a.id) order by 会有问题 导致获取出来的数据不对 SELECT id,title,d ...
- Windows Service 服务中,不能访问挂载目录(网络映射盘)
SpringBoot Windows 自启动 - 通过 Windows Service 服务实现 Windows Service 服务中,不能访问挂载目录(网络映射盘) 在Windows操作系统中,系 ...
- GitLab--安装部署
配置信息 系统:centos7.8 gitlab版本:12.8.8 1 下载gitlab wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum ...
- QE01/QA11/QA02屏幕增强
1.业务需求 需要对来料检验增加"合格数量"和"不合格数量"字段,涉及三个增强开发 2.QE01\QE02\QE03\QE51N屏幕增强 增强表 增强点BADI ...
- Leaflet 百度、高德地图瓦片坐标 偏移 纠偏
实现地图瓦片纠偏的leaflet.mapCorrection.js代码: //坐标转换 L.CoordConvertor = function () { /**百度转84*/ this.bd09_To ...
- Python | 使用SVM支持向量机进行鸢尾花分类
运行环境 Python: 3.7.1 库: sklearn (Python的机器学习工具箱) 目的: 根据鸢尾花的四个特征,对三种鸢尾花进行分类 数据(共150行,这里截取前6行,完整数据以及代码的下 ...
- 题解 [HDU6746] Civilization(贪心+模拟)
来源:2020 年百度之星·程序设计大赛 - 初赛一 一道贪心 + 细节模拟题 题意很简单,这里不详细写了 观察题目,\(n\) 只有 500 ,可以 \(n \times n\) 枚举每个位置作为起 ...
- poi 4.11版本 word模板操作
写代码之前先说说遇到的问题,之前word模板是使用poi 3.9的包实现的,之后又写了exlce上传下载的功能使用的是poi 4.11的版本,他们之间融合的时候发现包冲突,总有一个功能不能使用,之后发 ...
- 无法连接uniCloud本地调试服务,请检查当前客户端是否与主机在同一局域网
- [java] JSP post 提交乱码 解决方案
//在post提交的页面顶部插入下列代码 <% request.setCharacterEncoding("UTF-8"); %>