从零开始匹配vim(0)——vimscript 简介
通过之前一系列的文章,相信各位小伙伴应该已经对vim产生了浓厚的兴趣,可能不少小伙伴通过慢慢的使用变的跟我一样,离开vim就不会写代码了。如果你希望继续长时间使用vim,甚至将vim作为主要的代码编辑器,那么花一定的时间来学习vim的配置是很有用的。如果你只是因为 linux 平台默认安装了 vi/vim ,平时又主要用它改改匹配文件,临时用用,那么还是赶紧退出这个文章,免得耽误时间吧。
标题上说从零基础打造vim多少有点标题党,要理解后面一系列文章的内容至少要了解vim里面的一些基本概念,我认为在阅读本系列专栏之前,你应该了解以下内容
- 知道vim,并且知道 vim 的基本操作,例如进入插入模式、移动光标,并且知道如何保存退出
- 知道vim的相关术语,缓冲区列表、缓冲区、窗口、命令模式、插入模式等等
- 知道 vim的配置文件在哪
如果你还不知道,请移步我的专栏,跟着专栏中的内容做做实验。理解一下里面提到的这些概念。
关于配置部分,我准备介绍以下几个方面的内容:
- vimscript 的基础内容,并补充一些之前没介绍过的vim的特性
- neovim lua对应的接口
- 推荐一些插件和相关配置,做到抛砖引玉
可能有小伙伴要问了,vimscript 不管写还是读都比较晦涩,而且 neovim 已经采用更容易理解也更加现代化的 lua了,有必要学习 vim script吗?
我觉得是有必要的,首先 neovim 是 vim 的另一个实现版本,要想学好 neovim 自然绕不开 vim,而学好 vim 自然也绕不开 vimscript 。其次,lua 脚本中的接口继承自 vimscript 。想要使用 lua 配置的前提是知道使用 vimscript 配置。它们就好像学习 MFC 绕不开 Win32 API 一样。所以我觉得想要学习 neovim 的配置自然绕不开 vimscript 。而且 neovim 完全兼容 vim 基本不用担心 vimscript 在 neovim 中执行不了的问题。 倒是 neovim 并没有实现 vimscript 百分之百的功能,有些时候还是得靠 vimscript 来实现。
演示环境
之前一系列的文章本来打算在 mac 上做演示的,但是我发现 mac上录屏比较麻烦,而且 mac上的 neovim 我已经配置好了,行为上可能跟裸 vim 有些差距(虽然可以不加载配置文件启动),所以我采用 WSL2 Ubuntu上的 neovim做演示。
刚好这个演示环境没有对vim进行过配置。也方便演示从0开始配置。
本教程的环境是 linux中 neovim 的 0.6.1 版本,虽然官方已经放出来 0.8 版本,但是Ubuntu官方源中好像还是 0.6。这里就继续用它演示吧
第一个 vimscript 脚本
我学习的任何一门语言好像都是从打印 hello world 开始的,我也不能免俗。我们这个教程也从打印 hello world 开始吧
vimscript 中可以使用 echo 和 echom 来打印语句,例如我们可以在命令模式中输入 echo "hello world"。我们发现在屏幕的下方出现了 hello world 字样。

接着我们再使用 echom "hello world" 发现,它仍然在下方打印了 hello world 字样。这两者有什么区别呢?
要理解它们的区别我们需要介绍一个新的命令 :message 。这条命令可以查看 message-history 中的内容,我们可以简单的将这条命令理解为查看 vim 的运行日志(虽然并不是在查看日志)。执行这条命令我们发现,message-history 中只有一条 hello world。这个时候他们的区别就出来了,一个在打印的同时会将打印信息写入 message-history,另一个就仅仅只是打印而已。

各位小伙伴只需要简单打印不同的语句就能知道 echom 会将内容写入到日志中,而 echo 不会。这里留个各位自己去实验吧,我就不做演示了。
我们现在来完成一个小练习,使用vim脚本来写一段欢迎信息例如 hello, jack, 我们让用户每次打开都能看到这个欢迎信息 。这里的用户我们暂时让它固定,后续我们可以做到动态的修改 欢迎的用户。
我们知道每次打开vim,它都会去加载配置文件,我们只要将要执行的命令写到配置文件中就好了。还记得配置文件在哪吗?针对 neovim 来说它支持 vimscript 和 lua 配置(当然它也支持其他语言)。我们将目录切换到 ~/.config/nvim 。如果各位小伙伴之前有过配置,那么请先将配置做一个备份。同时确保 init.lua (lua配置)和 init.vim (vimscript 配置) 只能有一个
我们先尝试着用 vimscript 的方式来完成这个功能。我们建立一个新文件 ~/.config/nvim/init.vim。然后在里面写上一句 echo 'hello, jack',然后退出。我们发现每次进入 neovim 之后,总会在下方显示这么一句话了。


我们再来看看如何使用 lua 来打印这么一句话呢?lua 中对应的函数是 print 。我们可以直接在 之前备份的 init.lua 中写上 print("hello, jack") 来完成这一个工作(记得现将之前的 init.vim 备份)。需要注意的是 lua 中的 print 写将信息一并写入到 message 中,也就是说它与 echom 效果相同。如果想执行 echo 操作可以使用 api.vim.nvim_echo() 。它的用法比较复杂,这就就不介绍它了,有兴趣的小伙伴可以去官网查一下,试试用它来实现这个打印欢迎信息的例子。

这篇文章的内容到此就结束了,最后给大家做一个总结:
- neovim如果想要加载 vimscript配置,可以将配置文件放到
~/.config/nvim/init.vim中,如果想要加载lua配置,可以将文件放到~/.config/nvim/init.lua中。 echo、echom都会打印字符串,不同的是echom将打印的内容往一个叫做message-history的地方写。lua中的print具备echom的功能- 可以使用
message命令查看message-history的内容 - 从
vimscript的使用上看,它里面写的是vim的一些命令,我们将命令写在文件中让vim去执行。vim命令与vimscript的关系有点像shell命令和shell脚本的关系
从零开始匹配vim(0)——vimscript 简介的更多相关文章
- 从零开始搭建Vue2.0项目(一)之快速开始
从零开始搭建Vue2.0项目(一)之项目快速开始 前言 该样板适用于大型,严肃的项目,并假定您对Webpack和有所了解vue-loader.确保还阅读vue-loader的文档,了解常见的工作流程配 ...
- Python 3.0(一) 简介
Python 3.0(一) 简介 [目录] 1.简介 2.python特点 3.安装 简介: Python是可以称得上即简单又功能强大的少有的语言中的一种.你将会惊喜地发现,专注于问题的解决方案而不是 ...
- Hadoop-2.0 目录简介
Hadoop-2.0 目录简介 一.目录结构 将下载的压缩包解压: 解压后文件夹如下: 二.各文件夹目录结构 1.bin:Hadoop2.0的最基本管理脚本和使用脚本所在目录.这些脚本是sbin目录下 ...
- TP 5.0 架构 简介
TP 5.0 架构 简介 thinkphp 5.0 为API开发而设计的的高性能框架,是与以往thinkphp5.0以下版本大不相同的新型框架,病对以颠覆和重构版本,采用全新的架构思想,引入了更多的P ...
- 管家婆软件工贸版(标准财务+进销存+生产管理)V18.0功能简介
管家婆软件工贸版(标准财务+进销存+生产管理)V18.0功能简介 管家婆 工贸版(标准财务+进销存+生产管理) 1.整体介绍 管家婆工贸版系列软件是针对国内中小型生产加工企业,将ERP管理思想与几十万 ...
- Linux c++ vim环境搭建系列(0)——简介
vim 学习 简介: 源码编译使用vim及其插件. 内容包含: vim的编译安装, llvm clang的编译安装, 插件youcompleteme的编译安装使用, 以及vim其他插件的使用. 搭建环 ...
- RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解
一.RabbitMQ简介 是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使用Erlang(高并发语言)语言来编写的,并且RabbitMQ是基于AMQ ...
- vim for windows 简介
普通人的编辑利器--VIM (for windows) 本文转载自 FROM Vincent_czz2005年5月,我开始用VIM.此后渐入佳境,原来因版权自律而放弃盗版UltraEdit的遗憾一扫而 ...
- Vim及VimScript资料总结《转载》
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Vim教程 入门 Vim 实用技术 Learning the vi and Vim Editors A Byte of ...
- OAuth2.0 原理简介
写在前面: 在正式介绍OAuth2.0之前我们先来看一个场景:小李是一个文艺小青年, 经常喜欢出去旅游并且把自己旅行中的美景照片分享到各大社交网站上,比如朋友圈,新浪微博.小李马上要向女朋友求婚了,他 ...
随机推荐
- Ajax请求 content_type ajax发送Fromdata对象
目录 Ajax请求入门 ajax实现简单计算器 content_type urlencode fromdata application/json 自定义request.JSON ajax发送Fromd ...
- GOS会计凭证上传附件
1.GOS介绍 GOS是一个连接文档和SAP内各种对象的工具,在SAP的一些凭证中,可以通过GOS进行附件的上传.查看和删除等功能,例如采购订单.会计凭证等. 如果没有这个按钮,可以将当前登录用户的类 ...
- vue.js 本地调用远程接口进行开发,如何进行跨域及cookie传递
在前后端分离vue作为前端框架,在使用服务器接口时面临的第一个问题就是跨域.本文涉及内容仅保证在vue-cli3.0脚手架创建的项目中.及本地调试中有效(使用之前版本脚手架创建的项目请自行转换),本文 ...
- JSP | JSP 动作详解
原作者为 RioTian@cnblogs, 本作品采用 CC 4.0 BY 进行许可,转载请注明出处. 本篇学习自:C语言中文网,部分内容转载仅供学习使用. \[QAQ \] JSP 动作利用 XML ...
- 上海丨阿里云 Serverless 技术实战营邀你来玩!
活动简介 本次沙龙深度探讨 "Serverless 在中国企业的落地和开发者实操" 主题,我们特别邀请了来自阿里云 一线技术专家,分享当前 Serverless 趋势和落地实践过程 ...
- Redis无法使用ip访问
问题: 启动redis服务,可以使用127.0.0.1配置并使用访问redis,但是换成IP地址就无法访问 127.0.0.1 可以 [root]# ./redis-cli -c -h 127 ...
- 定期发送邮件功能-outlook与腾讯邮箱
一.背景:定期发送邮件功能挺好用的,可以帮忙我们在特殊的时间点发送邮件,以及实现无人推送的功能 二.outlook的实现1.首先编辑好邮件保存至草稿 2.选项-延迟传递,设置不早于传递的时间,点击发送 ...
- 使用 nacos 搭建注册中心及配置中心
本文为博主原创,转载请注明出处: 在分布式微服务框架中,现在都流行使用 nacos 作为分布式框架的注册中心与配置中心.当我们搭建一套spring boot 框架的时候,默认会将配置文件 放在 res ...
- WPF|黑暗模式的钱包支付仪表盘界面设计
阅读目录 效果展示 准备 简单说明 + 源码 结尾(视频及源码仓库) 1. 效果展示 欣赏效果: 2. 准备 创建一个WPF工程,比如站长使用 .NET 7 创建名为 WalletPayment 的W ...
- 09-Verilog-并发线程
Verilog-线程 并发线程 verilog和C语言有一个最大的不同就是并发性 并发--同时进行的过程 module tb_test; int a; initial begin a = 1; a = ...