VimScript学习笔记(8):函数

Vim的函数

Vim中使用function ... endfunction定义函数。

需要注意的是,Vim中的函数如果没有标明作用域(前缀s:),那么函数必须以大写字母开头。事实上,Vimer约定所有的函数都用大写字母开头,无论有没有作用域。

使用function!可以避免重复载入时候的冲突。

下面是定义一个简单的函数。

调用方法是:call Meow()

也可以使用返回值。

可以将返回值打印出来。

返回值

如果函数没有提供返回值,会返回数字0(即假)。

下面的这个判断宽度是不是太大的函数,在调用的时候就可以直接使用。

函数参数

Vim的函数当然也可以接受参数。下面的函数声明和调用展示了Vim的函数参数用法。

注意,变量的a:前缀是标志作用域。如果删去,Vim就找不到这个变量了。

在VimScript中,如果要函数接受变量,那么任何时候使用这个变量都要带上a:前缀,来告诉Vim他们在函数参数作用域中(argument scope)。

可变长度的参数

和Python,JavaScript一样,VimScript可以接受不确定数量的参数。见以下代码。

其中:

  • ... 表示这个函数可以接受任意数量的参数,和Python的*args一样
  • a:0表示这个函数的可变长度的参数的个数,我们传给Varg两个参数,那么a:0就是2
  • a:1 a:2 等等就是调用第n个参数
  • a:000 是所有可变长度参数组成的列表(数组),这里会打印出["a", "b"]

可变长度的参数可以和普通的参数一起用,和Python一样。

参数不能重新赋值

下面的代码,会抛出一个错误,因为Vim不允许对函数传进来的参数重新赋值。

为此,我们一般不直接使用传进来的参数,函数的开始一般会将进来的参数复制给新的变量,在函数中使用新的变量。

 

Leave a comment

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