• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Vimscript 函数参数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

毫无疑问,Vimscript函数可以接受参数。执行下面的命令:

:function DisplayName(name)
:  echom "Hello!  My name is:"
:  echom a:name
:endfunction

执行下面的函数:

:call DisplayName("Your Name")

Vim将显示两行:Hello! My name is: 和 Your Name

注意我们传递给echom命令的参数前面的a:。这表示一个变量的作用域,在前几章(译注:第20章)我们曾讲过。

让我们试一下不带作用域前缀会怎么样。执行下面的命令:

:function UnscopedDisplayName(name)
:  echom "Hello!  My name is:"
:  echom name
:endfunction
:call UnscopedDisplayName("Your Name")

这次Vim抱怨说它找不到变量name

在写需要参数的Vimscript函数的时候,你_总需要_给参数加上前缀a:,来告诉Vim去参数作用域查找。

可变参数

Vimscript函数可以设计为接受不定数目的参数,就像Javascript和Python中的一样。执行下面命令:

:function Varg(...)
:  echom a:0
:  echom a:1
:  echo a:000
:endfunction

:call Varg("a", "b")

这个函数向我们展示了许多东西,让我们来逐一审视。

函数定义中的...说明这个函数可以接受任意数目的参数。就像Python函数中的*args

函数中的第一行为输出消息a:0,结果显示2。当你在Vim中定义了一个接受可变参数的函数,a:0将被设置为你额外给的参数数量(译注:注意是额外的参数数量)。 刚才我们传递了两个参数给Varg,所以Vim显示2。(译注:2 - 0 ==# 2)

第二行为输出a:1,结果显示a。你可以使用a:1,a:2等等来引用你的函数接受的每一个额外参数。 如果我们用的是a:2,Vim就会显示"b"

第三行有些费解。当一个函数可以接受可变参数,a:000将被设置为一个包括所有传递过来的额外参数的列表(list)。 我们还没有讲过列表,所以不要太纠结于此。你不能对列表使用echom,因而在这里用echo代替。

你也可以将可变参数和普通参数一起用。执行下面的命令:

:function Varg2(foo, ...)
:  echom a:foo
:  echom a:0
:  echom a:1
:  echo a:000
:endfunction

:call Varg2("a", "b", "c")

我们可以看到Vim将"a"作为具名参数(named argument)a:foo的值,将余下的塞进可变参数列表中。

赋值

试试执行下面的命令:

:function Assign(foo)
:  let a:foo = "Nope"
:  echom a:foo
:endfunction

:call Assign("test")

Vim将抛出一个错误,因为你不能对参数变量重新赋值。现在执行下面的命令:

:function AssignGood(foo)
:  let foo_tmp = a:foo
:  let foo_tmp = "Yep"
:  echom foo_tmp
:endfunction

:call AssignGood("test")

这次就可以了,Vim显示Yep

练习

阅读:help function-argument的前两段。

阅读:help local-variables


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Vimscript 数字发布时间:2022-02-03
下一篇:
Vimscript 函数发布时间:2022-02-03
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap