×

vi 命令手册

vi/vim 命令大全

vim 命令手册

Vim 关于Vim 安装Vim 用法Vim 配置vim 配置.vimrc方案vim 配置.vimrc方案1vim 配置.vimrc方案2Vim 文件合并Vim 技巧和建议Vim 插件Vim 参阅

Vimscript 编程参考

Vimscript 前言Vimscript 鸣谢Vimscript 预备知识Vimscript 打印信息Vimscript 设置选项Vimscript 基本映射Vimscript 模式映射Vimscript 精确映射Vimscript LeadersVimscript 编辑你的Vimrc文件Vimscript AbbreviationsVimscript 更多的MappingsVimscript 锻炼你的手指本地缓冲区的设置和映射Vimscript 自动命令Vimscript 本地缓冲区缩写Vimscript 自动命令组Operator-Pending 映射Operator-Pending 更多映射Vimscript 状态条Vimscript 负责任的编码Vimscript 变量Vimscript 变量作用域Vimscript 条件语句Vimscript 比较Vimscript 函数Vimscript 函数参数Vimscript 数字Vimscript 字符串Vimscript 字符串函数Vimscript Execute命令Vimscript Normal命令Vimscript 执行normal!Vimscript 基本的正则表达式Grep 运算符Operator 第1部分Grep 运算符Operator 第2部分Grep 运算符Operator 第3部分Vimscript 列表Vimscript 循环Vimscript 字典Vimscript 切换Vimscript 函数式编程Vimscript 路径Vimscript 创建一个完整的插件Vimscript 基本插件配置方式用Pathogen配置插件Vimscript 检测文件类型Vimscript 基本语法高亮Vimscript 高级语法高亮Vimscript 基本折叠Vimscript 高级折叠Vimscript 段移动原理Vimscript Potion段移动Vimscript 外部命令Vimscript 自动加载Vimscript 文档Vimscript 发布Vimscript 还剩下什么?

Vimscript 函数参数


毫无疑问,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


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)