VimScript学习笔记(6):变量

既然VimScript可以作为一门编程语言,那么别人都有的变量、条件判断、循环,它也应该有。本文介绍这些内容。

变量

使用let为变量赋值。

从上面的代码也可以看出,VimScript是一个动态类型的编程语言。

如果使用set,那么就会作为一个选项(Option)赋值。取得Option的值需要在前面加一个&符号。

布尔类型有些特殊,是通过在前面no或者不加来区分。

由此也可以看出,Vim将0作为假,1零)作为真。

使用let&符号也可以为选项赋值。

区别在于,set只能赋一个单一的值,而let可以将它们作为变量来计算

如果要使用let设置Buffer-Local(只在当前窗口有效)的选项,要加l:前缀。同时打开两个文件,分别执行下面的代码。发现一个显示了行号,另一个没显示。

除了将选项作为变量,你还可以将寄存器作为变量。

输入下面的命令,然后移到切换到Normal Mode,键入"ap。你会发现Vim粘贴了寄存器a保存的内容。

寄存器的变量也可以被读出来:

其实,其他有很多地方都是用到了寄存器。例如使用yy复制一行,可以通过:echo @"查看,"就是一个匿名的寄存器。使用/someword搜索功能,可以使用:echo @/查看搜索的单词。

Vim中的变量有“名字空间”的概念,下面这个方式,会只设置当前窗口的hello变量。

通过:help internal-variables命令,可以查看Vim支持的所有的名字空间。

Numbers

VimScript支持两种数字类型,Numbers和Floats。

Number是32位的有符号整数。Float是单浮点数字类型。

Number类型支持不同的进制表示方法。0x0X开头的是16进制,0开头的是八进制。尝试以下代码。

因为019不是一个合法的八进制数,所以Vim会静默地将它当做10进制。这样并不安全,应该尽量不使用八进制。

Float类型支持科学表示方法。

如果涉及到NumberFloat的运算,Vim会将Number转换成Float,然后返回一个Float(类型提升)。

如果两个Number做除法,Vim会丢掉余数。(这几点和高级语言,如Python,的表现是一致的)

String

需要注意的是,+Number的运算符,而.才是用来连接字符串的。如果对字符串使用+,Vim会把字符串转换成数字。关于转换规则,我们在VimScript学习笔记(7):条件判断和比较这里讨论过了。

参考下面的运算。

要记住,String不能和Float一起处理,只能和Number进行处理。

特殊字符,使用\转义。

单引号包裹的,是纯字符串。不会进行转义。特殊的,连续两个单引号,被转义为一个单引号。

对一个编辑器的脚本语言来说,最重要的就是处理字符串了。在Vim中,内置了一些处理字符串的方法。例如,获取字符串的长度,分割,连接,处理大小写等等。具体的用法,参考下面的代码。

 

 

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注