之前我们介绍了基础配置部分和快捷键配置部分。如果你配置了这两个部分,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}) : 创建自动命令组,如果创建成功,返回自动命令组的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 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: 包括 PackerCleanPackerUpdate 的功能

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

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

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

从零开始配置 vim(11)——插件管理的更多相关文章

  1. Vim Vundle 插件管理器

    /********************************************************************** * Vim Vundle 插件管理器 * 说明: * 话 ...

  2. 【vim】插件管理及代码智能提示与补全环境的配置

    1. 引言 可以使用脚本/插件来给vim添加各种神奇的功能,从更换颜色主题.到代码智能提示,甚至项目管理.无数开发者通过开源社区贡献自己开发的插件,使得vim有可能变得无比强大.这儿http://vi ...

  3. Centos6.7下面配置vim及其插件

    Vim是在vi的基础上升级而来的,比vi更强大,提供代码补全,编译功能 [4]vim Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用 ...

  4. vim利用插件管理工具-管理配置文件

    目前被广泛应用的2各插件管理工具Pathogen和Vunble,我先说Pathogen Pathogen Pathogen完全用vim脚本编写,不用其他的代码(Vunble就用了python),所以安 ...

  5. 使用Vundle管理配置Vim的插件

    1.介绍: 安装需要Git,触发git clone,默认将每一个指定特定格式插件的仓库复制到~/.vim/bundle/. 搜索需要Curl支持. Windows用户请直接访问Windows setu ...

  6. vim的插件管理与配置

    vim作为我做喜欢的编辑器,可扩展性几乎是没有尽头的,前阵子一直在配置这.vimrc文件,原来搞过配色文件,现在主要就自动补全来设置下,同时作为自己配置的记录文档.……………………………………………… ...

  7. 配置vim之插件

    涉及linux平台下ctags, taglist插件 ctags是一个用于产生代码索引文件的插件,它产生的索引可以帮助我们更快的定位到特定位置. ctags支持很多语言,比如java, c, c++, ...

  8. vim插件管理器的安装和配置-windows

    # vim插件管理器的安装和配置-windows ### 前言------------------------------ vim做一框功能强大的编辑器,扩展功能令人称奇,插件机制非常灵活- 本篇推荐 ...

  9. VIM的配置以及插件管理

    VIM的配置详细说明参考:http://www.ruanyifeng.com/blog/2018/09/vimrc.html 此外VIM的插件管理比如 Vundle可以参考这个博客: https:// ...

  10. Vim插件管理器Vundle使用

    参考地址:http://www.linuxidc.com/Linux/2012-12/75684.htm Vundle(Vim bundle) 是一个vim的插件管理器. 其Github地址为: ht ...

随机推荐

  1. C# async await 异步执行方法

    WPF 异步执行 Action<> Func<> https://www.cnblogs.com/vipsoft/p/4535037.html 代码如下 using Syste ...

  2. Python 合并多张图片至一张图片

    PDF 有多页,一次性转成JPG 图片,JAVA 报内存溢出, 现改为,每一页存成一张图片,然后再将多张图片合成一张图片. 安装库 pip3 install Image -i https://pypi ...

  3. MySQL 添加用户,分配权限

    1. 添加用户 CREATE USER `vipsoft`@`%` IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; 2. 权限配置 GRANT 权限1,权限 ...

  4. 24校招,Moka测试开发工程师一面

    前言 大家好,今天回顾一下楼主当时参加moka测试开发工程师的面试 对其中一些重要问题,我也给出了相应的答案 过程 自我介绍 挑一个项目,详细介绍你在其中担任的职责 如何安排工作的,有什么成果? 回归 ...

  5. VWAP 订单的最佳执行方法:随机控制法

    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 引言:相关研究 在当今的投资领域,算法交易正迅速成为客户获取和清算股票头寸的首选方法. 通常,被委托者会 ...

  6. 图解 Promise 实现原理(一)—— 基础实现

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/UNzYgpnKzmW6bAapYxnXRQ作者:孔垂亮 很多同学在学习 Promise 时,知 ...

  7. 解决navicat连接mysql数据库查询很慢的问题

    1.背景: navicat连接数据库进行sql查询,每隔一段时间发现查询会变得很慢 2.原因: Mysql服务器端会定时清理长时间不活跃空闲的数据库连接,进行优化 3.解决方案: Navicat -右 ...

  8. 传说中 PUE 预测精度高达 0.005 的工作

    杨震, 赵静洲, 林依挺 等. 数据中心 PUE 能效优化的机器学习方法. 系统工程理论与实践, 2022, 42(3): 811-832 省流: 这是 2020 年的论文,用神经网络进行了认真的 P ...

  9. 【MLA】一种内存泄漏分析方法

    项目地址:skullboyer/MLA (github.com) 介绍 MLA 即 Memory Leak Analyzer,是一个排查内存泄漏的分析器 实现机制是在malloc时记录分配位置信息,在 ...

  10. [转帖]L4LB for Kubernetes: Theory and Practice with Cilium+BGP+ECMP

    http://arthurchiao.art/blog/k8s-l4lb/ Published at 2020-04-10 | Last Update 2020-08-22 1. Problem De ...