LV02-vimscript-01-初见.md
本文主要是vimscript一些基础知识和操作的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
Windows | windows11 |
Ubuntu | Ubuntu16.04的64位版本 |
VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
点击查看本文参考资料
参考方向 | 参考原文 |
Learn vimscript the Hard Way | https://learnvimscriptthehardway.stevelosh.com/ |
vim在线文档 | http://vimcdoc.sourceforge.net/ |
VIM 中文帮助 | https://vimcdoc.sourceforge.net/doc/help.html |
vim教程 | https://www.w3cschool.cn/vim/ |
一、 vimscript 简介
什么是 vimScript 呢?我其实也不清楚,这门语言似乎我这辈子都不一定用得到,但是又为什么想要了解它呢?因为在刚开始使用 vim 的时候,总是在抱怨,(此处省略一句国粹),怎么会有这种编辑器,太讨人厌了吧,即便到现在我也主要用其他的 IDE 来写代码,毕竟还是方便。后来在网上看到其他人的 vim 编辑器界面,还有各种神操作,我又忍不住一句国粹😂, vim 原来还能这么玩,出于好奇心,深入了解了下,于是乎就有了这篇学习笔记。
接下来回到正题, Shell 作为命令行工具,它会有自己的 Shell 脚本, vim 也类似, vim 的脚本语言被称为 vimscript ,是典型的动态命令式语言,提供了大多数常见的语言特性:变量、表达式、控制结构、内置函数、用户定义函数、一级字符串、高级数据结构(列表和字典)、终端和文件 I/O、正则表达式模式匹配、异常和集成调试器。
其实,我们之前就已经接触过 vimscript 了,就是我们经常用到的 ~/.vimrc 配置文件,这个文件中的内容就是 vimscript 编写的。
由于门编程语言似乎很少人用到,网上的教程似乎也不像 C/C++ 、 Python 那样丰富,教程嘛,我当时看了这两本书,一本英文,是原版,一本是中文的,在一个网站看到的,自然,对于我这种英语”好的一塌糊涂“的人来说,当然是推荐看中文了😂。
vim教程 | https://www.w3cschool.cn/vim/ |
Learn vimscript the Hard Way | https://learnvimscriptthehardway.stevelosh.com/ |
vim在线文档 | http://vimcdoc.sourceforge.net/ |
二、 vimscript 预备知识
【说明】以下部分所有命令中,带 [ ] 的部分说明是可以省略的。
1. vim 输出
- echo
在 vim 命令模式下输入以下命令:
1 | :echo "Hello, world!" |
应该会在 vim 的底部看到 Hello, world! 被打印出来。
- echom
在 vim 命令模式下输入以下命令:
1 | :echom "Hello, world! again!" |
应该会在屏幕的底部看到 Hello, world! again! 被打印出来。
- 有什么区别?
在 vim 命令模式下输入以下命令:
1 | :messages |
会发现 vim 底部只输出了 Hello, world! again! 。 :echo 命令会打印输出,但是一旦脚本运行完毕,那些输出信息就会消失。使用 :echom 打印的信息 会保存下来,可以执行 :messages 命令再次查看那些信息。
2. vim 注释
有时候为了看懂自己的代码,多少还是要写点注释的,不然上午写的代码,吃过饭忘记了怎么办,总不能推倒重构把😂。
1 | " 这是 vimscript 中的一个注释 |
在 vimscript 中,可以通过 “ 添加注释,但是要注意的是这个注释方法有时候也会给我们带来麻烦(如键盘映射)。
3. 设置选项
vim 中有两种选项可以进行设置,有些会让我们的操作更加的便捷。它主要有两种选项:布尔选项(值为 on 或 off )和键值选项。
3.1 布尔选项
3.1.1 设置布尔选项
这里以行号打开或者关闭为例,行号的设置选项为 number ,在命令模式下执行:
1 | :set nu[mber] |
这个时候我们就会发现, vim 最左侧出现了黄色的行号,当然之前没有开启的话会显示,之前就有的话就什么现象也没有了。
那怎么关闭行号呢?在命令模式中执行:
1 | :set nonu[mber] |
这个时候,会发现,行号消失了。
3.1.2 查看布尔选项
上边是有现象的命令,可以轻松观察并判断出选项的值,那没有现象的命令,我怎么知道它现在的状态呢?在命令模式执行以下命令:
1 | :set nu[mber]? |
在命令后边加上一个 ? 就可以打印出想知道的选项的值了。
3.1.3 切换布尔选项
布尔选项只有两种状态,打开或者关闭,这就意味着,我们可以有另一种方式来切换布尔选项,在命令模式下执行:
1 | set nu[mber]! |
执行一次,有行号的,行号会消失,没有行号的,行号会出现。
3.2 键值选项
3.2.1 设置键值选项
有些选项并不只有打开或者关闭两种状态,它们需要一个值。例如行号显示的宽度等,在命令模式中执行:
1 | :set nu[mber] " 打开行号显示 |
会发现行号数字距离左侧边框距离变远了,然后执行完第三条命令又变近了。
3.2.2 查看键值选项
那怎么查看键值选项的值呢?在命令模式中执行:
1 | :set numberwidth? |
这样, vim 就会在底部输出所查看键值选项的值了。
3.3 设置多个选项
vimscript 支持在一个命令中设置多个选项的值,在命令模式中执行:
1 | :set number numberwidth=6 |
这将会打开行号显示,并将行号的宽度设置为 6 。
【注意】由于这个特性,这也就意味着,在命令模式下键入命令的时候如果一条命令中间有空格出现,那么皆就有可能需要用 \ 进行转义了。
4. 第一个脚本文件
vimscript 脚本文件以 .vim 作为后缀名称。
1 | vim test.vim # 在当前路径下新建一个 vimscript脚本文件 |
在文件中输入以下内容:
1 | echo "Hello, world!" |
然后按:w,保存。
那么怎么执行脚本呢?我们可以直接在 vim 的命令模式中执行以下指令即可运行该脚本文件。
1 | :source test.vim |
然后按下 Enter 即可运行该脚本,随后我们应该会在 vim 底行中看到 Hello, world! 被输出。
【注意】要注意文件路径,不在当前目录时,一定要加上路径指明文件位置。另外,脚本文件中不需要像命令模式一样加上 : 。
5. 折行书写
当我们在写脚本文件的时候,如果有一写语句超级长的话,怎么办?从头写到尾嘛,那样也太难以阅读了吧,像 C语言 , Python 啊这些,可以直接换行继续写, vimscript 可不一样,这样直接换行写可能会报错,可能会不执行,这个时候我们应该在折行的开头写上 \ 符号,这就表示这一行与上一行是同一条命令。例如:
1 | let mydict1 = {'a': 'one', 'b': 2} |
这个例子在输出的时候就进行了换行书写,这样也便于区分各部分功能(具体脚本内容后边自然会了解到)。