从零开始配置 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 ...
随机推荐
- Solon 开发进阶
Solon 开发进阶 一.插件扩展机制 二.体外扩展机制 三.常用配置说明 四.启动参数说明 五.全局异常订阅 本系列在内核知识的基础上做进一步延申.主要涉及: 插件扩展体系 体外扩展体系 常用配置 ...
- .Net Core 多语言
StartUp.cs public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseEndpoint ...
- Linux 检查应用不在现就重启
每5分钟检查一次,如果不在线就重启 #!/bin/bash count=`ps axu | grep kafka_2.11-1.0.0|grep -v grep|wc -l` echo "p ...
- .net 温故知新【17】:Asp.Net Core WebAPI 中间件
一.前言 到这篇文章为止,关于.NET "温故知新"系列的基础知识就完结了,从这一系列的系统回顾和再学习,对于.NET core.ASP.NET CORE又有了一个新的认识. 不光 ...
- 【每日一题】21.边的染色 (DFS连通图 + 思维)
补题链接:Here 思维不够,看到这种陌生的题目无从下手. 这题应该做过一次的人会觉得它其实并不难. 主要思想:把边权->点权. 这样做的好处是,无论你怎么分配点权,在环内的异或值一定为 \(0 ...
- 解决SUM函数返回为NULL
解决SUM函数返回为NULL SUM函数的作用:计算某一字段中所有行的数值和, 使用SUM函数进行对符合条件的结果行数进行求和. 问题产生: sum 求和时会对 null 进行过滤,不计算,但如果没有 ...
- 图扑 Web SCADA 智慧钢厂能源监控 HMI
前言 钢铁行业作为我国的支柱产业,也是我国能源消耗的重点行业之一,随着国家节能减排政策的推进,有效实施能源管控是企业提高能源绩效.降低能源成本和提高核心竞争力的重要途径. 通过对钢铁企业能耗现状和能源 ...
- Liunx常用操作(十)-VI编辑器-命令模式命令
vI编辑器三种模式 分别为命令模式.输入模式.末行模式.
- maven总结一: 常用命令
本文为博主原创,未经允许不得转载: maven常用命令: 1. mvn clean maven清理 2. mvn compile maven 编译 3. mvn package maven 打包 ...
- mongodb 系统命令总结
1.连接mongodb mongo ip/dbname -u username -p password #mongo -u admin -p admin 127.0.0.1:27017/pagedb ...