VimScript脚本语言学习------常用的内置函数---(变量相关)_smstong的博客-程序员资料

技术标签: 脚本语言  Linux相关  

 由于VimScript动态数据类型特性和各种不同的作用域,为方便程序员操纵变量,vim平台内置了一组操作变量的函数。

(1)type({expr})

返回给定变量名的数据类型。其中的参数可以是变量名,也可以是字面量常数值。返回值是一个Number类型的数字,含义如下:

0 : Number

1: String

2: Funcref

3: List

4: Dictionary

5: Float

给出一个例子:

let a = 1
let b = 'hello'
let c = "hello"
let d = [1,2,3]
let e = {'name':'smstong', 'age': 12}
function! MyFunc(x)
    echo s:x
endfunction

let F = function('MyFunc')
let g = 1.0
echo type(a)
echo type(b)
echo type(c)
echo type(d)
echo type(e)
echo type(F)
echo type(g)

echo type(233)
echo type('vimscript')
echo type([])
echo type({})

输出结果:

0
1
1
3
4
2
5
0
1
3
4

(2) function({name})

返回一个指向名为name的函数的引用类型变量。函数的名字可以是内置函数,也可以是用户自定义函数。别忘了用户自定义函数和函数引用类型变量的名字首字母必须大写。

(3)islocked({expr})

功能:查看指定变量是处于锁定状态

参数 : 变量的名字字符串或者List或Dictionary元素的名字

返回值: 整数,如果变量是锁定的,则返回一个非零整数,否则返回0

(4)getbufvar({expr}, {varname})

功能:读取指定buffer内有效的指定变量的值

参数:expr 指定缓冲区名字,varname指定变量的名字

返回值:变量的值

 变量可以是用户自定义的,也可以是vim的选项option,如&number。如果变量不存在,则返回空,但不报错。

(5)setbufvar({expr}, {varname}, {val})

功能 :为变量赋值

参数:expr 缓冲区的名子,varname变量名字,val变量的值

注意:如果变量不存在,则新建这个变量

例子:

let b:a = "hello"
call setbufvar(1, 'c', 2)
echo b:c
echo getbufvar(1,'a')
echo getbufvar(1, 'notexist')
echo getbufvar(1, '&number')
echo getbufvar(1,'')
输出:

2
hello
0
{'current_syntax': 'vim', 'undo_ftplugin': 'setl fo< com< tw< commentstring<| unlet! b:match_ignorecas
e b:match_words b:match_skip', 'c': 2, 'a': 'hello', 'did_ftplugin': 1, 'did_indent': 1}
(6)getwinvar({winnr}, {varname})

功能:读取当前tab页中的指定窗口范围的变量

参数 :winnr窗口号(从0开始),varname变量名

(7)setwinvar({winnr}, {varname}, {value})

功能 :设置当前tab页的指定窗口范围的变量值

(8)gettabvar({tabnr}, {varname})和settabvar({tabnr}, {varname})

读取和设置tab页范围的变量

(9)gettabwinvar({tabnr},{winnr},{varname}) 和settabwinvar({tabnr}, {winnr}, {varname}, {value})

读取和设置指定tab页中的指定window范围的变量。


以上这些都是对不同 作用域范围内的变量进行读写。


(10)garbagecollect([at_exit])

作用 :清理释放循环引用导致的内存泄漏

说明: 这个函数很少需要程序员调用,因为vim会在内存超限的时候自动调用它。VimScript是一门带垃圾回收功能的语言,任何不再使用的对象都会被回收,但是循环引用的对象需要特殊处理。



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/smstong/article/details/20839991

智能推荐

Push failed fatal: unable to access ‘https://github.The requested URL returned error: 403_sunrj_go的博客-程序员资料

**Push failed fatal: unable to access 'https://github.The requested URL returned error: 403**Github 禁用了TLS v1.0 and v1.1,必须更新Windows的git凭证管理器,才行。https://github.com/Microsoft/Git-Credential-Manager-for-Windows/releases/tag/v1.14.0点击下载安装 GCMW-1.14.0.exe

Ubuntu重装NVIDIA显卡驱动_伍颜的博客-程序员资料_ubuntu 显卡驱动重装

我的电脑比较奇怪,只要关机,显卡驱动就失效,必须重新安装,特写一篇博客,记录重装过程。1 、禁用 nouveau安装好依赖包后需要禁用 nouveau,只有在禁用掉 nouveau 后才能顺利安装 NVIDIA 显卡驱动,禁用方法就是在 /etc/modprobe.d/blacklist-nouveau.conf 文件中添加一条禁用命令,首先需要打开该文件,通过以下命令打开:sudo...

解决vmware桥接网络无法上网的问题_ywops的博客-程序员资料

今天想要配置一台vmware虚拟机使用桥接模式上外网,怎么配置都无法成功。总是出现以下错误:error:connection activation failed: ip configuration could not be reserved最后发现,原来是vmware软件设置的问题。vmware不会自动识别实际使用的那一块网卡,必须手动指定才行。...

java硬币兑换_java动态规划取硬币问题_韩冰Bill的博客-程序员资料

最近一直在研究动态规划的问题。今天遇到了取硬币问题。其实动态规划还是,我从底部向顶部,依次求出每个状态的最小值,然后就可以标记上。这道题目就是,假如有1,5,7,10这四种币值的硬币,我取14元,取的硬币数最少要多少张。其实动态规划就是要求出状态转移方程,就好比我的上一个博客的求最短路径的问题。而这道取硬币问题呢。如果我的硬币大于有的币值,那么就能状态转移转移为temp[i-weizhi[j] +...

React18 新特性前瞻_Monkey_Kcode的博客-程序员资料

Automatic batching 自动批处理Suspense & SuspenseListuseDeferredValuestartTransition & useTransitionstartTransition 与 useDeferredValue 的区别

NS3基本知识_tttabcgy的博客-程序员资料

转载自http://blog.sina.com.cn/s/blog_61e2420a0101jy5j.html3 NS3快速入门本章节通过阅读分析一个例子程序(first.cc)的源代码,并通过运行该例子程序,快速理解ns3中的几个概念。3.1 NS3中的几个关键概念3.1.1 节点Node在网络术语中,任何一台连接到网络的计算设备被称为主机,亦称为终端。NS3是一个网络模拟器

随便推点

Gmail对比Outlook哪个更好_China_Ajax的博客-程序员资料_hotmail

随着 Slack、WhatsApp&nbsp;和&nbsp;Skype&nbsp;等实时通信应用程序的普及,您可能会惊讶地发现电子邮件仍然是工作中的主要通信工具 - 并且在全球拥有 39 亿用户,这种情况不太可能随时改变很快。主导该领域的是&nbsp;Gmail&nbsp;和&nbsp;Outlook——这两个世界上最受欢迎的电子邮件提供商。尽管两者之间有很多相似之处,但 Microsoft&nbsp;Outlook&nbsp;更像是一个电子邮件客户端,而&nbsp;Gmail&nbsp;本质上是网络邮

@Value获取不到值_zzy_阳阳的博客-程序员资料

@Value有两种获取application.properties值得方法: 一、PlaceHolder方式:格式${...}@Componentpublic class GetValue { @Value("${book.name}") private String name; public String getName() { return name

恢复报错ora-01180_kuaile_yuanzi的博客-程序员资料_ora-01180

https://blog.csdn.net/weixin_34029949/article/details/85997154最近在验证、测试备份有效性时,遇到了“ORA-01180: can not create datafile 1”这个错误,顺便结合metalink的官方文档“RMAN restore fails with ORA-01180: can not create datafile...

知名互联网公司校招中常见的算法题_dengya2093的博客-程序员资料

本次Chat,主要从知名互联网公司在面试中喜欢提问的算法入手,给大家详细阐述讲解面试中的高频率算法题。涉及到的算法题主要包括:排序和查找、链表、二叉树、队列、堆栈、字符串以及数组等方面。如果你想在来年的校园招聘中拿下一线互联网的Offer,那么本次Chat将助你玩转算法面试~面试,是大家从学校走向社会的第一步。大型互联网公司的校园招聘,从形式上说,面试一般分为2-3轮技术面试+1轮H...

java中用jedis报错_使用Jedis在高并发报错 (java.net.SocketException: Connection reset by peer: socket write error)..._袁均林的博客-程序员资料

使用Jedis在高并发报错 (java.net.SocketException: Connection reset by peer: socket write error)1.报错信息java.lang.reflect.InvocationTargetException: nullat sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Sou...

【DSP】TMS320F28035 IQmath配置_Kindavid的博客-程序员资料

添加.lib和.h文件到工程修改cmd文件:将IQmath.cmd里的段写进原cmd文件里,提示内存不够的话,需要将内存进行响应调整。

推荐文章

热门文章

相关标签