从零开始配置 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 ...
随机推荐
- App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
iOS 备案查看信息 iOS平台Bundle ID 公钥 证书SHA-1指纹 IOS平台服务器域名 获取 Bundle ID: 或者 https://developer.apple.com/accou ...
- yaml/json/ini 配置读取
ConfigParser 安装 ConfigParser 是解析配置文件的第三方库,须要安装 pip install ConfigParser pip install ConfigParser Con ...
- 愉快的了解Charles
charles是PC端常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析.除了在做移动开发中调式端口外,charles也可以用于分析第三方应用的通 ...
- 柔性上肢康复机器人研究中的VR技术
上肢康复机器人用于对脑卒中患者进行上肢康复治疗,能够维持和扩大患者关节活动度.增强肌肉力和协调性,以防止肌肉萎缩.关节痉挛等各类症状的出现,最终重建肢体功能,以便回归正常生活.现有的上肢康复机器人训练 ...
- Latex公式排版问题总结
Latex写博客和论文,因为有模板,所以用起来还是很方便的. 但是在实际使用中,由于论文是双栏的,因此比较长的公式在排版时会比较困难.下面对Latex中的公式排版方法做一些记录. Latex公式排版( ...
- Codeforces Round #715 (Div. 2) (A~D 补题记录)
补题链接:Here 经典手速场 1509A. Average Height 题意:要找出最大不平衡对序列 先输出奇数,然后输出偶数 void solve() { int n; cin >> ...
- 图扑虚拟现实解决方案,实现 VR 数智机房
前言 如今,虚拟现实技术作为连接虚拟世界和现实世界的桥梁,正加速各领域应用形成新场景.新模式.新业态. 效果展示 图扑软件基于自研可视化引擎 HT for Web 搭建的 VR 数据中心机房,是将数据 ...
- <vue初体验> 基础知识 3、vue的计数器
系列导航 <vue初体验> 一. vue的引入和使用体验 <vue初体验> 二. vue的列表展示 <vue初体验> 三. vue的计数器 <vue初体验&g ...
- lighthouse性能优化分析工具使用
- 小白学标准库之 flag
Go 提供了解析命令行参数的 flag 包,本文旨在介绍 flag 的使用及内部实现等. 1. flag 包使用及实现 type PropertyOfPod struct { Namespace *s ...