从零开始匹配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
脚本的关系