Vim技能修炼教程(14) - 写个ex命令吧
写个ex命令吧
我们第二节开始就写了语法高亮的插件。这一节,我们学习第二种插件的写法,就是写个我们自己的ex命令。
自定义ex命令的命令是:command,我们在~/.vim/下建立一个plugin目录,然后创建一个test.vim之类的文件:
:function Hello()
:echom "Hello,World!"
:endfunction
:command Hello call Hello()
首先,我们定义一个函数。函数名的首字母必须大写。函数中调用:echom去显示一个字符串。
然后我们通过:command来定义一个ex命令,命令的作用是去调用Hello()函数。
有了写新的ex命令的出口,我们现在终于可以使用Vimscript欢快地编程啦。
if语句
作为最基础的分支语句,if将面临学习Vimscript中的第一个坑,就是字符串的真假性的问题。
我们看下下面的例子:
:function Hello()
:if "Hello"
:echom "Hello is true"
:else
:echom "Hello is false"
:endif
:endfunction
我们可以通过:call Hello()来调用它,或者干脆封装成一个ex命令。
:command Hello call Hello()
不管如何,输出结果为:Hello is false。也就是说,Vimscript将”Hello”字符串转换成了数字0,于是,它是v:false.
字符串比较
另外在比较时需要注意的是字符串比较。在Vim中,”==”比较字符是否大小写敏感是跟用户的设置相关的。如果不想受这个影响,建议使用确定的大小写不敏感比较符”==?”和大小写敏感比较符”==#”
不光是”==”, “!=”, “>”, “<”, “>=”, “<=”, “is”, “isnot”都有对就应大小写敏感和不敏感的版本。
正则匹配也是一样,”=~”和”!~”也有”=~#”和”=~?”的版本。
函数
- 定义函数 :function, :endfunction
- 返回值 :return
- 调用函数 :call
在函数中使用参数时,请注意使用a:这个作用域描述符。
另外,与大部分vim命令一样,函数调用:call命令支持使用范围来调用。我们看个例子:
:function HelloArgs(arg)
:echom "Hello!" . a:arg
:endfunction
我们输入:
1,3call HelloArgs(getline("."))
结果为:
Hello!:function HelloArgs(arg)
Hello!:echom "Hello!" . a:arg
Hello!:endfunction
除了通过范围调用外,函数参数也可以支持不定个数。其实就是以列表方式传递参数。
循环结构
上节讲列表的时候,我们已经学习了for循环。
while循环
Vimscript还支持:while循环,例:
:function PrintStar(arg)
:let l:c = 0
:while l:c<a:arg
:echo "*"
:let l:c += 1
:endwhile
:endfunction
arg将是打印的行数,我们这么调用:
:call PrintStar(10)
break和continue
Vimscript中也支持:break退出循环和:continue继续下一次循环。
异常处理
Vimscript支持,:try … :catch … :finally :endtry的结构。
当然也支持:throw抛出一个异常。
try…finally结构,还可以用来处理资源释放。
Vim技能修炼教程(14) - 写个ex命令吧的更多相关文章
- Vim技能修炼教程(2) - 语法高亮速成
语法高亮速成 我们继续在人间修行Vim技能之旅.上一次我们学习了如何通过vundle安装插件,这次我们迅速向写插件的方向挺进. 我们先学习一个最简单的语法高亮插件的写法. 语法高亮基本上是由三部分组成 ...
- Vim技能修炼教程(7) - 可视模式
可视模式 可视模式是与正常模式.插入模式一起并列的模式.它的作用就像图形化编辑器下用鼠标来选择一个块. 在vim下,使用正常模式和ex命令,连搜带跳行的,未必就比用鼠标慢. 我们先做一个例子找找感觉, ...
- Vim技能修炼教程(4) - 基本功
基本功 前面我们学会了插件管理器和如何实现语法高亮,相信大家已经从中体会到了vim插件的强大功能.现在,是时候回来补一补基本功了. Vi有三种主要模式,正常模式,插入模式和可视化模式.正常我们推荐的方 ...
- Vim技能修炼教程(10) - 代码跳转
程序员功能 前面我们用了5讲的篇幅来讲基本编辑的基本功:第4讲是基本操作,第5讲是操作符,第6讲行编辑ex命令,第7讲可视模式,第8讲多窗口,第9讲缓冲区和标签页. 从这一讲开始,我们从通用功能向程序 ...
- Vim技能修炼教程(8) - 多窗口
多窗口 如果一个vim只能开一个窗口,那肯定是有点low.尤其是写代码的时候,打开多个文件是经常的需求. 速成教程 横着切成两个 :split 文件名 上下切换窗口 Ctrl-W加上上下键,可以实现上 ...
- Vim技能修炼教程(3) - 语法高亮进阶
语法高亮进阶 首先我们复习一下上节学到的三个命令: * syntax match用于定义正则表达式和规则的对应 * highlight default定义配色方案 * highlight link将正 ...
- Vim技能修炼教程(1) - 使用vundle管理插件
世界上有两个伟大的编辑器:一个是emacs,一个是vi.它们从诞生以来,一直在Unix/Linux世界得到最广泛的支持. 尽管过了几十年,在Windows平台上和跨平台上有层出不穷的后起之秀不断挑战它 ...
- Vim技能修炼教程(16) - 浮点数计算函数
浮点数计算函数 这一节的所有函数,只有在vim编译时支持了+float时才有效. 三角函数 sin() : sine正弦函数 cos() : cosine余弦函数 tan() : tangent正切函 ...
- Vim技能修炼教程(15) - 时间和日期相关函数
Vimscript武器库 前面我们走马观花地将Vimscript的大致语法过了一遍.下面我们开始深入看一下Vimscript都给我们准备了哪些武器.如果只用这些武器就够了,那么就太好了,只用Vimsc ...
随机推荐
- 北京电子科技学院(BESTI)实验报告2
北京电子科技学院(BESTI)实验报告2 课程: 信息安全系统设计基础 班级:1452.1453 姓名:(按贡献大小排名)郑凯杰 .周恩德 学号:(按贡献大小排名)20145314 .20145217 ...
- 20145321 《Java程序设计》第3周学习总结
20145321 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 4.1 类与对象 1.定义类:类定义时用关键词 class. 一个原始码中可以有多个类定义,但只能有一个公开 ...
- 搭建Nginx图片服务器(Linux)
知识点: 在Linux系统上安装Nginx服务器,配置图片访问路径 通过ftp上传图片到,指定路径,通过浏览器访问指定路径中的图片 参考博客:http://blog.csdn.net/maoyuanm ...
- Java单链表反转 详细过程
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/guyuealian/article/details/51119499 Java单链表反转 Java实 ...
- P4Lang Repository: Switch
Github Switch Introduction Structure: +-----+ +-----+ +-----+ +-----+ |App a| |App j| |App n| |App z ...
- Mybatis中传参包There is no getter for property named 'XXX' in 'class java.lang.String'
Mybatis中传参包There is no getter for property named 'XXX' in 'class java.lang.String' 一.发现问题 <select ...
- R 中的哪些命令或者包让你相见恨晚?--转载知乎
https://www.zhihu.com/question/24501195 节选: 看了这么多答案,觉得 Hadley Wickhamhad.co.nz 在R使用者的地位好高啊.其实我也觉得Had ...
- Python基础笔记系列九:变量、自定义函数以及局部变量和全局变量
本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 变量在前面的系列中也许就可以发现,python中的变量和C中的变量有些许不 ...
- jquery.chosen.js下拉选择框美化插件项目实例
由于之前使用的bootstrap-select插件是建立在bootstrap基础上的,实际使用到项目中的时候,与我们使用的ace-admin(基于bootstrap)存在样式冲突,导致下拉框的样式发生 ...
- 【转】R语言知识体系概览
摘要:R语言的知识体系并非语法这么简单,如果都不了R的全貌,何谈学好R语言呢.本文将展示介绍R语言的知识体系结构,并告诉读者如何才能高效地学习R语言. 最近遇到很多的程序员都想转行到数据分析,于是就开 ...