星期三, 六月 14, 2017

VIM学习笔记 脚本-自定义命令 (Script-User Defined Command)

使用脚本语言,可以更灵活地定制编辑器以完成复杂的任务。

自定义命令

Vim编辑器允许定义自己的命令,我们可以像执行内置命令一样来执行我们自己定义的命令。

使用以下:command命令自定义命令:

:command Delete_first :1delete

注意自定义命令的名称,必须以大写字母开头,而且不能包含下划线;如果我们执行:Delete_first自定义命令,那么Vim就会执行:1delete命令,从而删除第一行。

可以使用!来强制重新定义同名的自定义命令:

:command! -nargs=+ Say :echo <args>

用户定义的命令可以指定一系列的参数,参数的个数由-nargs选项在命令行中指定。例如定义Delete_one命令没有参数:

:command Delete_one -nargs=0 1delete

默认情况下-nargs=0,所以可以省略。其他-nargs选项值如下:

-nargs=0没有参数
-nargs=11个参数
-nargs=*任何个数的参数
-nargs=?零个或是一个参数
-nargs=+一个或是更多个参数

在命令定义中,参数是由关键字<args>指定的:

:command -nargs=+ Say :echo "<args>"

输入以下自定义命令:

:Say Hello World

命令的执行结果显示:

Hello World

使用-range选项,可以指定一个范围作为自定义命令的参数。-range选项值如下:

-range允许范围,默认为当前行
-range=%允许范围,默认为当前文件(while file)
-range=count允许范围,单一的数字

当指定范围之后,就可以用关键字<line1>和<line2>得到这个范围的第一行和最后一行。

例如以下定义了SaveIt命令,用于将指定范围的文件写入文件save_file:

:command -range=% SaveIt :<line1>,<line2>write! save_file

关键字<f-args>含有与关键字<args>相同的信息,所不同的是它用于调用函数。例如以下自定义命令:

:command -nargs=* DoIt :call AFunction(<f-args>)

执行自定义命令:

:DoIt a b c

将会传递参数给调用的函数:

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

其他选项和关键字包括:

-count=number指定数量保存在关键字<count>中
-bang指定!修饰符存放在关键字<bang>中
-register指定寄存器,默认为未命名寄存器,寄存器的定义保存在关键字<register>中
-bar其他命令可以用|跟随在此命令之后
-buffer命令仅对当前缓冲区有效

使用以下命令,首先分别创建一个用户自定义命令,然后再将两个命令组合起来。

列示自定义命令

使用以下命令,可以列出用户定义的命令:

:command

command

删除自定义命令

使用以下:delcommand命令,可以删除用户定义的命令:

:delcommand Delete_one

使用以下命令,清除所有的用户定义的命令:

:comclear

Ver: 1.0<上一篇 | 目录 下一篇>

星期一, 六月 12, 2017

VIM学习笔记 脚本-自定义函数 (Script-User Defined Function)

使用脚本语言,可以更灵活地定制编辑器以完成复杂的任务。

定义函数

Vim编辑器允许用户自定义函数,语法如下:

Name,函数名称必须以大写字母开始,并且只可以包含字母、数字和下划线。

arg1-argN,调用函数时需要为命名参数(Named Parameters)赋值。如果不需要任何参数,那么可以将括号()部分置空。最多可以定义20个参数。

keyword,range关键字定义一个范围函数(:function Count_words() range)会针对范围内的每一行重复执行操作;abort关键字指示函数(:function Do_It() abort)会在第一个错误时退出。

下面我们来定义一个函数,用来返回两个数中较小的一个:

函数内部的变量(例如smaller)均为局部变量,除非使用了g:作为前缀。例如在函数外我们定义了变量var,那么在函数内部可以使用g:var来调用。前缀a:的变量均为函数参数。

return 语句用于返回结果并结束函数。return语句之后的所有代码都不会被执行。

如果尝试定义一个已经存在的函数,那么将会收到报错信息。可以使用!来强制重定义同名函数。

:function! Max(num1, num2, num3)

Vim允许在函数中使用“...”来标识个数不定的可变参数(Variadic Parameters)。例如以下代码定义函数至少有2个参数,最多有20个参数:

argnum 计数器,用于记录num1和num2之后的参数个数;

a:num1 变量,用于访问指定的参数;

a:0 变量,用于记录参数总个数;

a:{argnum} 变量,用于访问每一个参数的值,例如a:1或a:2;

以下范围函数实例,将在指定范围行内执行替换操作:

当函数被以下命令调用时,变量a:firstlinea:lastline就会被赋值为这个范围内的第一行和最后一行,然后更新范围内的每一行。你可以使用:help cmdline-ranges命令,查看关于范围操作的更多信息。

:1,$call DeAmperfyAll()

调用函数

可以在表达式中调用函数:

:let tiny = Min(10,20)

还可以使用:call命令来调用函数:

:[range]call {function}([parameters])

列示函数

使用以下命令,可以列出所有用户定义的函数:

:function

使用以下命令,可以查看指定函数的代码:

:function {name}

使用以下命令,可以查看Vim内置函数的使用说明:

:help functions

删除函数

使用以下命令,可以删除指定的函数:

:delfunction {name}

Ver: 1.0<上一篇 | 目录 下一篇>

星期二, 六月 06, 2017

VIM学习笔记 脚本-语句 (Script-Statements)

使用脚本语言,可以更灵活地定制编辑器以完成复杂的任务。

:echo命令

:echo可以显示命令中的参数。

:echo "Hello world"

Hello world

:echo还可以显示变量的值。

:let flag=1
:echo flag

1

使用|可以分隔同一行中的两个命令。

:echo "aa" | echo "bb"

aa
bb

:echon也只显示命令中的参数,但不会输出新行。

:echon "aa" | echon "bb"

aabb

可以通过:echohl命令,使用指定高亮颜色组输出信息。

:echohl ErrorMsg
:echo "A mistake has been make"

A mistake has been make

为了不影响后续:echo命令的显示效果,建议使用以下命令重设高亮显示为None:

:echohl None

使用以下命令,可以查看高亮显示组的颜色定义:

:highlight

在:echo命令中,可以使用以下转义符:

  • \n Newline
  • \r Carriage return
  • \t Tab
  • \123 八进制数字
  • \x123 十六进制数字
  • \u01fc34 Unicode
  • \f Form feed
  • \e Esc
  • \b Backspace
  • \\ 反斜线

判断

if语句的一般形式如下:

只有条件(condition)为真时,if语句块内的语句才会被执行。

if语句还可以包含else子句:

满足条件(condition)时,if语句块内的语句将会被执行;而不满足条件(condition)时,则else语句块内的语句将会被执行。

if-else结构还可以进行多重判断

循环

while命令开始一个循环,并由endwhile命令结束。在条件为真是,循环中的代码将被重复执行。

continue命令回到程序的顶部开始执行下一次循环;而break命令则立刻退出循环。

:execute命令

:execute将执行参数中指定的命令:

:let command = " echo 'Hello world!'"
:execute command

Hello world

Ver: 1.0<上一篇 | 目录 下一篇>