容为我们运行实验的文件名.我们将光标放在这个文件名上,使用下面的命令来设置修饰符:
:echo expand("<cword>:p")
我们可将这里的:p换成我们可以试验的任何修饰符.
下面的内容我们将会更详细的说明一个:echo和expand功能
:echo的功能只是重复他的参数.例如:
:echo "Hello world"
Hello world
我们还可以用他来显示变量的值:
:let flag=1
:echo flag
1
:echon命令也只是重复他的参数,但是不会输出新行.例如:
:echo "aa" | echo "bb"
aa
bb
:echon "aa" | echon "bb"
aabb
(注:这里的|用来分隔同一行的两个命令)
我们可以使用:echohl命令来改变:echo的输出的指定高亮颜色组.例如:
:echohl ErroMsg
:echo "A mistake has been make"
:echohl None
一个好的程序习惯表明我们应该总是在我们的输出信息之后重设高亮显示为None.这样就不会影响其他的:echo命令了.
如果我们要查看所定义的高亮显示组,我们可以用下面的命令:
:highlight
Vim编辑器中有许多的控制语句可以使我们改变宏的功能.通过这些功能,我们可以更好的使用Vim编辑器的脚本语言.
:if语句
:if语句的一般形式如下:
:if {condition}
: "Statment
: "Statment
:endif
如果条件(condition)为非0,if语句块内的语句将会被执行.在其中的四个空格的缩进是可选的,但是却是推荐使用,这样可以使得程序易读.
:if语句还可以有else的子句:
:if {condition}
: "Statment
: "Statment
:else
: "Statment
: "Statment
:endif
最后关键字:elseif是:if和:else的组合.使用这个可以减少使用额外的:endif的需要:
:if &term == "xterm"
: "Do xterm suff
:elseif &term == "vt100"
: "Do vt100 suff
:else
: "Do non xterm and vt100 stuff
:endif
循环
:while命令开始一个循环.这个循环是由命令:endwhile命令结束的:
:while counter<30
: let counter=counter+1
: "Do something
:endwhile
:continue命令回到程序的顶部开始执行下一次循环,而:break命令则退出循环:
:while conter <: 30
: if skip_flag
: continue
: endif
: if exit_flag
: break
: endif
: "Do something
:endwhile
:execute命令:
:execute命令像正常的命令模式一样执行一参数:
:let command = " echo 'Hello world!'"
:execute command
Vim编辑器还允许我们定义自己的函数.函数定义的一般形式如下:
:function {name}({var1},{var2},...)
(注:函数的名称要以大写字母开始)
结束定义用下面的命令:
:endfunction
下面我们来定义一个小函数,用这个函数来返回两个数中较小的一个.我们这样开始定义:
:function Min(num1,num2)
这个命令是告诉Vim我们定义的函数名为Min,他有两个参数.我们要做的第一件事就是我们要比较两个数中哪一个要小一些:
: if a:num1 < a:num2
这里的前缀a:是告诉Vim这个变量是一个函数参数.我们将最小的参数赋值给smaller变量:
: if a:num1 < a:num2
: let smaller = a:num1
: else
let smaller = a:num2
: endif
这里的smaller是局部变量.在这个函数中使用的所有变量均为局部变量,除非我们使用了g:作为前缀.例如在函数定义外我们定义了变量var.在函数内部我们要使用时要用g:var来调用.所以说一个变量依据其内容有三个不同的名字.
现在我们可以用:return语句来返回最小的那个数.最后我们结束函数定义:
: return smaller
:endfunction
完整的函数定义如下:
:function Min(num1,num2)
: if a:num1 < a:num2
: let smaller = a:num1
: else
: let smaller = a:num2
: endif
: return smaller
:endfunction
这样我们就可以用表达式来使用我们的函数了,如:
:let tiny = Min(10,20)
我们还可以用:call命令用函数名来显示调用函数功能:
:[range]call {function}([parameters])
如果指定了[range]则每一行都要调用函数,除非这个函数是一特殊的range风格函数.
如果我们要试着定义一个已经存在的函数,我们就会得到一个错误信息.我们可以用!来强制Vim替换以前所定义的同名的函数.
如果我们将range关键字放在函数定义的后面,这个函数就会被认为是一个范围(range)函数.例如:
:function Count_words() range
当在一个范围的行内运行这个程序时,变量a:firstline,a:lastline就会设置成为这个范围内的第一行和最后一行.
如果在函数的定义后面有abort,那么这个函数就会在第一个错误时退出,如:
:function Do_It() abort
最后Vim允许我们在函数中使用个数不定的参数.例如下面的命令定义了一个函数,这个函数必须有一个参数,但是可以用至多20个参数:
:function Show(start,...)
变量a:1包含第一个可选的参数,a:2为第二个,依次类推.变量a:0包含多余的参数.例如:
:function Show(start,...)
: let index = 1
: echo "Show is"a:start
:
: while (index <=a:0)
: echo "Arg" index "is" a:index
: let index = index + 1
: endwhile
:endfunction
我们可以用下面的命令列了所有用户定义的函数:
:function
要查看单一的函数,我们可以执行下面的命令:
:function {name}
例如我们要查看函数Show:
:function Show
要删除一个函数,我们可以用下面的命令:
:delfunction name
Vim编辑器允许我们定义自己的命令.我们可以像执行其他的命令模式的命令一样来执行我们自己定义的命令.要定义一个命令我们要使用:command命令,例如:
:command Delete_first :1delete
这样当我们执行命令:Delete_first Vim就会执行:1delete,从而删除第一行.
如果我们要列出用户定义的命令,我们可以用下面的命令:
:command
要删除用户定义的命令,我们可以用下面的命令:
:delcommand
例如:
:delcommand Delete_one
我们还可以用下面的命令来清除所有的用户定义的命令:
:comclear
用户定义的命令可以指定一系列的参数.参数的个数要由-nargs选项在命令行中指定.例如,Delete_one命令没有参数,我们可以像下面的样子来定义:
:command Delete_one -nargs=0 1delete
然而因为在默认的情况下-nargs=0,所以我们不需要指定他.
其他的-nargs选项值如下:
-nargs=0