vi编辑器的学习使用(二十七)
Vim编辑器有着丰富的脚本语言.当我们要为特殊的任务而定制我们的编辑器时,这些命令语言就会给我们极大的灵活性.
Vim编辑器允许我们定义,设置和使用自己的变量.为变量设定一个值,我们可以使用:let命令.这个命令的一般形式如下:
:let {variable}={expression}
Vim编辑器采用大多数程序设计语言的变量命名方式,也就是在Vim中的变量是以字符或是下划线开头,由一系列的字符,数字或是下划线组成的.
例如要定义变量line_size,我们可以用下面的命令:
:let line_size=30
要查看变量的内容,我们可以使用:echo命令.如:
:echo "line_size is"line_size
当我们执行了这样的命令以后,Vim就会在最后一行显示如下的内容:
line_size is 30
变量也可以包含数字和字符串,如:
:let my_name="mylxiaoyi"
Vim编辑器使用特殊的前缀来指明不同有变量类型.这些前缀如下:
大写字母,数字,下划线 可以存放在viminfo文件中的变量.如果viminfo选项中含有!标记,变量可以由:makesession命令保存.
小写字母,数字,下划线 不会存在任何保存文件中的变量.
$environment 环境变量
@register 文本寄存器
&option 选项名字
b:name 当前缓冲区的变量.每一个缓冲区有这个变量值不同
w:name 当前窗口的变量
g:name 全局变量(用于函数内部表明全局变量)
a:name 函数参数
v:name Vim内部变量
如下面的一些例子:
环境变量$PAGE包含用页查看命令:
:let $PAGE="/usr/local/bin/less"
显示上一次查找的类型:
:echo "Last search was"@/
下面的两个命令有着同样的作用:
:let &autoindent=1
:set autoindent
为当前缓冲区定义语法:
:let b:current_syntax=c
内部变量(v:name)用于存放信息.如下面的内部变量列表:
v:count 为上一次正常模式命令所指定的数量(count)
v:count1 与v:count相类似,所不同的只是如果没有指定数量则默认值为1
v:errmsg 上一次的错误信息
v:warningmsg 上一次的警告信息
v:statusmsg 上一次的状态信息
v:shell_error 上一次Shell命令的结果.如果为0,则命令正常执行,若为非0,则失败
v:this_session 上一次装入或是保存的文件的命名
v:version Vim编辑器的版本号
Vim编辑器还要使用如下的一些常量:
123 简单整数
0123 十进制整数
0xAC 十六进制整数
如下的字符串常量
"string" 简单字符串
'string' 精确字符
这两种字符串的不同在于前者可以用反斜线进行转义字符的扩展,而后者则不成,在后者的字符串反斜线只是原样输出.例如下面的命令:
:echo ">/100<"
:echo '>/100<'
其输出结果分别为:
>@<
>/100<
在Vim编辑器中我们还可以用表达式进行整数的操作.这些操作包括如下的算术运算:
int+int 加
int-int 减
int*int 乘
int/int 除
int%int 取余
-int 取负
另外逻辑运算符可以作用于字符串和整数.如果比较成功则返回1,否则则返回0.如下面的比较:
var == var 检查是否相等
var != var 不等
var < var 小于
var > var 大于
var <= var 小于等于
var >= var 大于等于
另外比较运算符可以进行字符串和表达式的比较.例如下面进行指定的字符串("word")和表过式"/w*"比较,如果表达式匹配则返回1.
"word"=~"/w*"
例如下面的两个常规表达式的比较:
string =~ regexp 相匹配的常规表达式
string !~ regexp 两个表达式不匹配
另外字符串还有下面的特殊比较:
string ==? string 字符串相等,忽略大小写
string ==# string 字符串相等,大小写必须匹配
string !=? string 字符串不相等,忽略大小写
string !=# string 字符串不相等,大小写必须匹配
string <? string 小于,忽略大小写
string <# string 小于,大小写必须匹配
string <=? string 小于等于,忽略大小写
string <=# string 小于等于,大小写必须匹配
string >? string 大于,忽略大小写
string ># string 大于,大小写必须匹配
string >=? string 大于等于,忽略大小写
string >=# string 大于等于,大小写必须匹配
从这里我们可以看到每一个运算符有三种形式.基本形式(==)对应ignorecase选项.?(==?)忽略大小写的不同而#(==#)从不忽略这样的区别.
如果我们要删除一个变量,我们可以用下面的命令:
:unlet[!] {name}
在通常的情况下如果我们删除一个不存大的变量,Vim编辑器就会显示错误.而如果我们使用!,则不会显示错误信息.
当我们要输入文件名时,我们可以使用下面的一些特殊的单词或是符号:
% 当前文件名
# 交换文件名
<cword> 光标下的单词
<cWORD> 光标下的WORD
<cfile> 光标下的文件名
<afile> 当执行相关的自动命令(autocommand)正读入或是写入的文件名.
<abuf> 在一个自动命令中的当前缓冲区标号
<amatch>与<abuf>相类似.但是当在FileType或是Syntax事件中使用时并不是文件名,而文件类型或是语法名.
<sfile> 当前正用于:sourced的文件名.
我们可以用下面所列出的内容来修改这些单词或是符号.例如:p可以将文件名变为全名.例如光标下的文件名为test.c,<cfile>就将是test.c,而同是<cfile:p>就将成为/home/oualline/examples/test.c
我们可以用下面的内容进行修改:
:p
将文件名变成全路径文件名.但是我们要注意的是当我们用多个修饰符时,我们要个放在第一个.
:~
将全路径名/home/oualline/examples/test.c变为用~标记的文件名为,如~oualline/examples/test.c
:. 如果可能将成为当前目录相关的目录
:h 文件名的头部.例如../path/test.c就会为../path
:t 文件名的尾部.例如../path/test.c就会为test.c
:r 无扩展名的文件名.例如../path/test就会成为test
:e 扩展名
:s?from?to? 将第一次出现的form字符串改变为to字符串
:gs?from?to? 将所有的字符串form改变为to字符串
我们可以来看一下这些修饰符是如何作用在文件名上的.首先我们要先创建一个文件,其内容为我们运行实验的文件名.我们将光标放在这个文件名上,使用下面的命令来设置修饰符:
: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 没以参数
-nargs=1 1个参数
-nargs=* 任何个数的参数
-nargs=? 零个或是一个参数
-nargs=+ 一个或是更多个参数
在命令的定义中,参数是由关键字<args>指定的.例如:
:command -nargs=+ Say :echo "<args>"
然后我们输入:
:Say Hello World
命令的执行结果为:
Hello World
一些命令是指定一个范围作为其参数.告诉Vim我们在定义这样的一个命令我们需要指定-range选项.选项的值如下:
-range 允许的范围,默认为当前行.
-range=% 允许的范围,默认为当前文件(while file)
-range=count 允许的范围,但是他只是一个单一的数字,默认下为count.
当我们指定了一个范围以后,我们就可以用关键字<line1>和<line2>得到这个范围的第一行和最后一行.
例如下面的命令定义了一个SaveIt命令,这个命令可以将指定范围的文件写入文件save_file:
:command -range=% SaveIt:<line1>,<line2> write! save_file
其他的一些选项和关键字如下:
-count=number
这个命令指定一个数量,默认为number.数量的结果保存在关键字<count>中.
-bang 我们可以使用!修饰符.如果指定了,!将会被存放在关键字<bang>中.
-register
我们可以指定一个寄存器,默认为未命名寄存器.寄存器的定义放在关键字<reg>中.
关键字<f-args>含有与关键字<args>相同的信息.所不同的只是函数的调用方式不同.例如:
:command -nargs=* DoIt :call AFunction(<f-args>)
:DoIt a b c
执行下面的命令:
:call AFunction("a","b","c")
最后我们还有<lt>关键字,他包含字符<.
基本的功能函数:
Vim编辑器有许基本的功能函数.这一部分将会列出所有的功能函数:
append({line_number},{string})
作用:在line_number行后新增一行加入string
参数:
line_number
某行的行号,将会在其后插入文本.0将会使得在文件的开始处插入文本.
string 在指定行后将插入的文本.
返回值:整数标记.或为0则没有错误,1则是由于line_number超出范围所产生的错误argc()
作用:计算参数列表中的参数个数.
返回值:整数.参数个数.
argv({number})
作用:返回参数列表中的参数.
参数:
number: 参数索引.0则为参数列表中的第一个参数.
返回值:字符串.返回请求的参数.
browse(save,title,initial_directory,default)
作用:显示一个文件查看器,允许用户选择文件.这个只是在GUI版本中工作.
参数:
save:一个整数用来表明这个文件是否被读入或是保存.如果save为非0,则查看器选择一个文件写入.如果为0,则这个文件用于读取.
title:对话框的标题.
initial_directory:开始查看时的目录.
default:默认的文件名.
返回值:字符串.选择的文件名.如果用户选择了关闭或是有错误发生,则会返回一个空字符串.
例如下面的命令:
:call browse(0,"Hello","/home/mayuelong/Documents","Shell.txt")
bufexists(buffer_name)
作用:检查一个缓冲区是否存在.
参数:
buffer_name:要检查的缓冲区的名称.
返回值:整数标记.若存在则返回真(1),否则为假(0)
bufloaded(buffer_name)
作用:查看一个缓冲区是否被装入
参数:
buffer_name:查看是否装入的缓冲区的名称.
返回值:整数标记.若存在则返回真(1),否则为假(0)
bufname(buffer_specification)
作用:查看指定的缓冲区
参数:
buffer_specification:指明缓冲区的标号或是字符串.如果指定缓冲区标号,那么buffer_specification返回缓冲区标号.如果指定了字符串,他就会被作为一个常规的表达式并且会列出查找得到并且匹配的缓冲区.这里有三个特殊的缓冲区:%当前缓冲区,#交换缓冲区,$列表中的最后一个缓冲区.
返回值:字符串.包含缓冲区全名的字符串或是有错误发生或是没有匹配时则会返回空串.
bufnr(buffer_expression)
作用:得到缓冲区的标号.
参数:
buffer_expression:与函数bufname中的相类似.
返回值:整数.缓冲区的标号.若有错,则返回-1.
bufwinnr(buffer_expression)
作用:得到一个缓冲区的窗口号
参数:
buffer_expression:与bufname功能函数的参数相同
返回值:整数.与缓冲区相匹配的第一窗口的标号.或是有错误或是没有匹配的窗口时返回-1
byte2line(byte_index)
作用:将字节索引转换为行号
参数:byte_index 在当前缓冲区的字符索引
返回值:整数.包含由byte_index所指定的字符的行号或是byte_index超出范围时返回-1
char2nr(character)
作用:将字符转换成相应的数字
参数:
character:转换单一的字符.如果指定了一个长的字符串,只使用第一个字符.
返回值:整数.与字符相对应的数字标号.例如:char2nr("A")的值为65(即其相对应的ASCII码)
col(location)
作用:返回指定位置的列号
参数:
location:标记的描述(如"x)或是"."得到当前光标所在处的列号
返回值:整数.返回标记或是光标的所在的列号.当有错误发生时则返回0
confirm({message},{choice_list},[default],[type])
作用:显示一个对话框可以使得用户一系列的选择并返回用户的选择.
参数:
{message}在对话框中显示的提示信息.
{choice_list}包含选择列表的字符串.每一个新行("/n")来分隔每一个选择.用&来表明加速字符.
[default]表明默认选择的索引.第一个按钮为#1.如果没有指定这个参数,则第一个按钮为默认的.
[type]要显示的对话框的类型.可用的选择如下"Error","Question","Info","Warning","Generic".默认情况下"Generic"
返回值:整数.选择的数字(从1开始).如果用户按<ESC>或是CTRL-C来退出则返回0
如下面的一些例子:
echo confirm("Choose one","&One/n&Two/n&Three",2,"Error")
echo confirm("Choose one","&One/n&Two/n&Three",1,"Question")
echo confirm("Choose one","&One/n&Two/n&Three",0,"Warning")
echo confirm("Choose one","&One/n&Two/n&Three",0,"Info")
echo confirm("Choose one","&One/n&Two/n&Three",0,"Generic")
delete({file_name})
作用:删除文件
参数:
{file_name}要删除的文件名
返回值:整数.0表明文件已被删除,非0则表示错误.
did_filetype()
作用:检测FileType事件是否发生.这个命令在用自动命令时显得更为有用.
返回值:整数.如果自动命令正在执行并且至少有一个事件已发生则返回非0,否则返回0
escape({string},{character_list})
作用:将{string}字符串的字符转换成转义字符.{character_list}则为要进行转义的字符列表.
返回值:字符串
例如下面的命令:
:echo escape("This is a 'test'"," '")
其执行结果为:
This/ is/ a/ /'test/'
exsits({string})
作用:检测由{string}所指定的内容是否存在.
参数:
{string}要检测的内容.这个可以用来指定一个选项('&autoindent'),环境变量('$VIMRUNTIME'),基本的函数名('*escape')或者是一个简单的变量('var_name')(注:在这里我们要指定定这个引号标记,因为我们是在字符串中传递这些值)
返回值:整数.如果存在则返回1,否则返回0
expand({string},[flag])
作用:返回与{string}匹配的文件列表.这个字符串可以包含通配符或是其他的描述.在这里我们要注意的是'suffixes'选项和'wildignore'选项可以影响扩展如何实现.如果一个特殊的单词例如'<cfile>'被扩展,并不会显示更深一些的扩展.如果光标位于字符串'~/.vimrc'上,'expand('<cfile>')的结果为'~/.vimrc'.如果我们要得到全名,我们需要扩展两次.所以'expand(expand('<cfile>'))将会返回'/home/oualline/.vimrc'.选项'wildignore'和'suffixes'将会起作用,除非指定了一个非0的[flag]
返回值:字符列表.由新行分隔的与{string}相匹配的文件名列表.如果没有匹配的,则会返回回空字符串.
filereadable({file_name})
作用:检测一个文件是否可读
参数:要检测的文件名
返回值:整数.如果这个文件存在并可读则会返回非0值.0则表明这个文件不存在或是这个文件不可读.
fnamemodify({file_name},{modifiers})
作用:对{file_name}执行{modifiers}并返回结果.
参数:
{file_name}文件名
{modifiers}修改标记,如":r:h"
返回值:字符串.被修改的文件名
getcwd()
作用:得到当前的工作目录
返回值:字符串.当前的工作目录
getftime({file_name})
作用:得到一个文件的修改时间
参数:
{file_name} 要检测的文件名
近回值:整数.文件的修改时间,若发生错误则返回-1
getline({line_number})
作用:从当前的编辑缓冲区中取出一行
参数:
{line_number} 要得到的行号或是"."表明光标所在的行
返回值:字符串.一行文本.如果{line_number}超出范围则会返回空字符串
getwinposx()getwinposy()
作用:返回GUI窗口的x或是y坐标
返回值:整数.以像素表示的GUI窗口的x或是y坐标.如果这些信息不可得则返回-1.
glob({file_name})
作用:在文件名中扩展通配符并返回文件列表.
参数:
{file_name}
表明要匹配文件名类型的字符串.我们还可以使用由反引号(`)构成的外部命令.如下面的例子:glob("`find . -name '*.c' -print'")
返回值:字符串.由<NL>分隔的匹配的文件列表.如果没有匹配的则会返回空串
has({feature})
作用:检测某一个特征已被安装
参数:
{feature} 包含特征名的字符串
返回值:整数标记.如果这个特征已被编译则要返回1,否则返回0
histadd({history},{command})
作用:在一个历史列表加入某一个内容
参数:
{history} 要用到的历史名.如下:
"cmd" ":" 命令历史
"search" "/" 查找历史
"expr" "=" 表达式历史
"input" "@" 输入历史
返回值:成功则为1,错误为0
histdel({history},[pattern])
作用:从历史中移除命令
参数:
{history} 要用到的历史列表
[pattern]
定义要移除的内容的表达式.如果没有指定类型,将会从历史中移除所有的内容.
histget({history},[index])
作用:从历史记录中得到某一内容
参数:
{history} 要用到的历史列表
[index]
要得到的内容索引.最新的输入为-1,次新的为-2,依次类推.最后一个输入的为1,次后输入的为2,依次类推.如果没有指定索引,将后返回最后一个输入的命令.
返回值:字符串.历史记录中指定的命令,如果有错误发生时则会返回空串
histnr({history})
作用:返回指定历史列表中的当前输入的标号
参数:
{history} 要检测的历史
返回值:整数.在这个历史列表中的最后一个内容.如果有错误则返回-1
hlexists({name})
作用:检测一个语法加亮组是否存在
参数:
{name} 要检测的组名
返回值:整数标记.若存在则为非0,否则为0
hlID({name})
作用:指定语法加亮组的名,返回ID号
参数:
{name} 语法加亮组的名
返回值:整数.ID号
hostname()
作用:得到电脑的主机名
返回值:字符串.电脑的主机名
input({prompt})
作用:问一个问题并会得到答案
参数:
{prompt} 要显示的提示
返回值:字符串.与用户输入相一致的内容
isdirectory({file_name})
作用:检测{file_name}是否为一个目录
参数:要检测的内容名
返回值:整数标记.如果是为目录则为1,如果不是目录或不存在则返回0
libcall({dll_name},{function},{argument})
作用:在DLL文件中调用函数(只在Windows系统中使用)
参数:
{dll_name} 共享库的文件名,在其中定义了{function}
{function} 函数名
{argument}
单一参数.如果这个参数为一个整数,他就会作为整数传递.如果是字符串,就会以"char*"传递.
返回值:字符串.返回函数.
line({position})
作用:指定一个标记或是其他的位置指示,返回行号
参数:
{position} 位置标记.可以是一个标记,'x,当前光标所在处".",或是文件尾"$"
返回值:整数.行号.如果没有标记或是其他的错误,则会返回0
line2byte({line_number})
作用:将行号转换成字符索引
参数:
{line_number}
要转换的行号.这个可以是一个标记('x),当前光标处('.')或者是缓冲区的最后一行('$')
返回值:整数.由1开始的行中第一个字符的索引.如果有错误发生则会返回-1
localtime()
作用:以UNIX格式返回当前时间
返回值:整数.
maparg({name},[mode])
作用:返回映射到哪一个键
参数:
{name} {lhs}映射名
[mode] 字符映射的模式.默认为""
返回值:字符串.映射结果字符串.如果没有映射返回空串
mapcheck({name},[mode])
作用:检测一个映射是否存在
参数:
{name} {lhs}映射名
[mode] 字符映射的模式,默认为""
返回值:字符串.返回匹配{name}的任何映射.这个函数与maparg函数有一些不同.前者会在映射中查找相冲突的名字.例如如果我们有一个映射"ax",他就会转换为"axx"
例如下面的一些例子:
:map ax test
:echo maparg("ax")
test
:echo maparg("axx")
:echo mapcheck("ax")
test
:echo mapcheck("axx")
test
match({string},{pattern})
作用:检测{string}是否与{pattern}相匹配.如果要设置了'ignorecase'就会使得编辑忽略大小的情况.
参数:
{string} 要检测的字符串
{pattern} 要检测的类型
返回值:整数.{string}中{pattern}出现的第一个字符索引.第一个字符为0.如果没有相匹配的就会返回-1.
matchend({string},{pattern})
作用:与match函数相类似,所不同的是他会返回{pattern}后的字符索引.
matchstr({string},{pattern})
作用:与match函数相类似,只是他会返回匹配的字符串
参数:
{string} 要检测的字符串
{pattern} 要检测的类型
返回值:字符串.{string}中匹配的部分.如果没有匹配就会返回空串
nr2char({number})
作用:将数转换成字符
参数:字符的ASCII码值.
返回值:长度为1的字符串.与数字相对应的字符
rename({from},{to})
作用:重命名一个文件.
参数:
{from} 存在的文件名
{to} 要重命名为的文件名
返回值:整数标记.如果成功则为0,否则为非0
setline({line_number},{line})
作用:用{line}的字符串内容替换{line_number}行的内容.
参数:
{line_number} 要改变的行号
{line} 替换行的文本
返回值:整数标记.如果没有错误则为0,否则为非0
strftime({format},[time])
作用:通过{format}返回时间格式.在字符串可以放置的转换字符决定于我们系统的strftime函数.
参数:字符串.包含时间格式化的时间字符串
strlen({string})
作用:计算字符串的长度
参数:
{string} 我们要计算长度的字符串
返回值:整数.字符串的长度
strpart({string,{start},{length})
作用:返回由{start}开始的长度为{length}的子串
例如:
:echo strpart("This is a test",0,4)
This
:echo strpart("This is a test",5,2)
is
如果{start}和{length}所指定的为不存在的字符,就会忽略这种情况.例如下面的命令从第一个字符的左边开始.
:echo strpart("This is a test",-2,4)
Th
参数:
{string}我们要从中查找的字符串
{start}我们要选取的字符串的开始地址
{length}我们要选取的字符串的长度
返回值:字符串.我们要选取的子串
strtrans({string})
作用:将字符串不可打印的字符转换成可以打印的字符
参数:
{string} 包含不要打印字符的字符串
返回值:字符串.不可打印字符的结果子.例如CTRL-A就会转换为^A.
substitute({string},{pattern},{replace},{flag})
作用:在字符串,将第一个与{pattern}匹配的字符替换成{replace}.这个命令与Vim的编辑命令相同
参数:
{string} 要替换的字符串
{pattern} 用来指定替换部分的字符串
{replace} 要替换成为的文本
{flag}
如果没有指定只是替换第一个出现的,如果为g,就会可以替换全部的情况.
返回值:字符串.替换后的字符串
synID({line},{column},{transparent_flag})
作用:返回由{line}和{column}所指定的语法ID.
参数:
{line},{column} 内容所在的位置
{transparent_flag}If non-0, transparent items are reduced to the items they reveal
返回值:语法ID.
synIDattr({sytnax_id},{attribute},[mode])
作用:得到语法颜色元素的标记
参数:
{sytnax_id} 语法描述的标号.
{attribute} 标记名.可有和的标记名如下:
"name" 语法内容名
"fg" 前景色
"bg" 后景色
"fg#" 以#RRGGBB格式的前景色
"bg#" 以#RRGGBB格式的后景色
"bold" 如果内容为粗体则为1
"italic"如果内容为斜体则为1
"reverse"如果内容反转则为1
"inverse"与上面内容相同
"underline"如果内容为下划线则为1
[mode]
要得到哪种终端标记.这个可以是"gui","cterm","term".默认的终端是我们当前用的.
返回值:字符串.标记值.
synIDtrans({syntax_id})
作用:返回转换的语法ID
参数:
{syntax_id} 语法元素的ID
返回值:整数,转换的语法ID.
system({command})
作用:执行外部命令并输出.选项'shell'和'shelldir'可以用于这个函数
参数:
{command} 要执行的命令.
返回值:字符串.输出命令的执行结果.
tempname()
作用:产生一个临时文件名
返回值:字符串.用为临时文件的文件名.
visualmode()
作用:得到最后的可视化模式
返回值:字符串.作为命令字符串得到最后一个可视化模式.这个可以是v,V,或是CTRL-V
virtcol({location})
作用:得到给定位置的列号.
参数:位置可以是."(光标处),'a(标记a),或者是$"(文件最后处)
返回值:整数.
winbufnr({number})
作用:得到窗口内缓冲区的标号.
参数:
{number} 窗口标号.0为当前窗口.
返回值:整数.缓冲区标号.若有错则为-1.
winheight({number})
作用:得到窗口高度.
参数:
{number} 窗口标号.0为当前窗口.
返回值:整数.以行数表示的窗口高度.若有错,则为-1
winnr()
作用:得到当前窗口号.
返回值:整数.当前窗口标号.最上的窗口为#1
Vim编辑器允许我们定义,设置和使用自己的变量.为变量设定一个值,我们可以使用:let命令.这个命令的一般形式如下:
:let {variable}={expression}
Vim编辑器采用大多数程序设计语言的变量命名方式,也就是在Vim中的变量是以字符或是下划线开头,由一系列的字符,数字或是下划线组成的.
例如要定义变量line_size,我们可以用下面的命令:
:let line_size=30
要查看变量的内容,我们可以使用:echo命令.如:
:echo "line_size is"line_size
当我们执行了这样的命令以后,Vim就会在最后一行显示如下的内容:
line_size is 30
变量也可以包含数字和字符串,如:
:let my_name="mylxiaoyi"
Vim编辑器使用特殊的前缀来指明不同有变量类型.这些前缀如下:
大写字母,数字,下划线 可以存放在viminfo文件中的变量.如果viminfo选项中含有!标记,变量可以由:makesession命令保存.
小写字母,数字,下划线 不会存在任何保存文件中的变量.
$environment 环境变量
@register 文本寄存器
&option 选项名字
b:name 当前缓冲区的变量.每一个缓冲区有这个变量值不同
w:name 当前窗口的变量
g:name 全局变量(用于函数内部表明全局变量)
a:name 函数参数
v:name Vim内部变量
如下面的一些例子:
环境变量$PAGE包含用页查看命令:
:let $PAGE="/usr/local/bin/less"
显示上一次查找的类型:
:echo "Last search was"@/
下面的两个命令有着同样的作用:
:let &autoindent=1
:set autoindent
为当前缓冲区定义语法:
:let b:current_syntax=c
内部变量(v:name)用于存放信息.如下面的内部变量列表:
v:count 为上一次正常模式命令所指定的数量(count)
v:count1 与v:count相类似,所不同的只是如果没有指定数量则默认值为1
v:errmsg 上一次的错误信息
v:warningmsg 上一次的警告信息
v:statusmsg 上一次的状态信息
v:shell_error 上一次Shell命令的结果.如果为0,则命令正常执行,若为非0,则失败
v:this_session 上一次装入或是保存的文件的命名
v:version Vim编辑器的版本号
Vim编辑器还要使用如下的一些常量:
123 简单整数
0123 十进制整数
0xAC 十六进制整数
如下的字符串常量
"string" 简单字符串
'string' 精确字符
这两种字符串的不同在于前者可以用反斜线进行转义字符的扩展,而后者则不成,在后者的字符串反斜线只是原样输出.例如下面的命令:
:echo ">/100<"
:echo '>/100<'
其输出结果分别为:
>@<
>/100<
在Vim编辑器中我们还可以用表达式进行整数的操作.这些操作包括如下的算术运算:
int+int 加
int-int 减
int*int 乘
int/int 除
int%int 取余
-int 取负
另外逻辑运算符可以作用于字符串和整数.如果比较成功则返回1,否则则返回0.如下面的比较:
var == var 检查是否相等
var != var 不等
var < var 小于
var > var 大于
var <= var 小于等于
var >= var 大于等于
另外比较运算符可以进行字符串和表达式的比较.例如下面进行指定的字符串("word")和表过式"/w*"比较,如果表达式匹配则返回1.
"word"=~"/w*"
例如下面的两个常规表达式的比较:
string =~ regexp 相匹配的常规表达式
string !~ regexp 两个表达式不匹配
另外字符串还有下面的特殊比较:
string ==? string 字符串相等,忽略大小写
string ==# string 字符串相等,大小写必须匹配
string !=? string 字符串不相等,忽略大小写
string !=# string 字符串不相等,大小写必须匹配
string <? string 小于,忽略大小写
string <# string 小于,大小写必须匹配
string <=? string 小于等于,忽略大小写
string <=# string 小于等于,大小写必须匹配
string >? string 大于,忽略大小写
string ># string 大于,大小写必须匹配
string >=? string 大于等于,忽略大小写
string >=# string 大于等于,大小写必须匹配
从这里我们可以看到每一个运算符有三种形式.基本形式(==)对应ignorecase选项.?(==?)忽略大小写的不同而#(==#)从不忽略这样的区别.
如果我们要删除一个变量,我们可以用下面的命令:
:unlet[!] {name}
在通常的情况下如果我们删除一个不存大的变量,Vim编辑器就会显示错误.而如果我们使用!,则不会显示错误信息.
当我们要输入文件名时,我们可以使用下面的一些特殊的单词或是符号:
% 当前文件名
# 交换文件名
<cword> 光标下的单词
<cWORD> 光标下的WORD
<cfile> 光标下的文件名
<afile> 当执行相关的自动命令(autocommand)正读入或是写入的文件名.
<abuf> 在一个自动命令中的当前缓冲区标号
<amatch>与<abuf>相类似.但是当在FileType或是Syntax事件中使用时并不是文件名,而文件类型或是语法名.
<sfile> 当前正用于:sourced的文件名.
我们可以用下面所列出的内容来修改这些单词或是符号.例如:p可以将文件名变为全名.例如光标下的文件名为test.c,<cfile>就将是test.c,而同是<cfile:p>就将成为/home/oualline/examples/test.c
我们可以用下面的内容进行修改:
:p
将文件名变成全路径文件名.但是我们要注意的是当我们用多个修饰符时,我们要个放在第一个.
:~
将全路径名/home/oualline/examples/test.c变为用~标记的文件名为,如~oualline/examples/test.c
:. 如果可能将成为当前目录相关的目录
:h 文件名的头部.例如../path/test.c就会为../path
:t 文件名的尾部.例如../path/test.c就会为test.c
:r 无扩展名的文件名.例如../path/test就会成为test
:e 扩展名
:s?from?to? 将第一次出现的form字符串改变为to字符串
:gs?from?to? 将所有的字符串form改变为to字符串
我们可以来看一下这些修饰符是如何作用在文件名上的.首先我们要先创建一个文件,其内容为我们运行实验的文件名.我们将光标放在这个文件名上,使用下面的命令来设置修饰符:
: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 没以参数
-nargs=1 1个参数
-nargs=* 任何个数的参数
-nargs=? 零个或是一个参数
-nargs=+ 一个或是更多个参数
在命令的定义中,参数是由关键字<args>指定的.例如:
:command -nargs=+ Say :echo "<args>"
然后我们输入:
:Say Hello World
命令的执行结果为:
Hello World
一些命令是指定一个范围作为其参数.告诉Vim我们在定义这样的一个命令我们需要指定-range选项.选项的值如下:
-range 允许的范围,默认为当前行.
-range=% 允许的范围,默认为当前文件(while file)
-range=count 允许的范围,但是他只是一个单一的数字,默认下为count.
当我们指定了一个范围以后,我们就可以用关键字<line1>和<line2>得到这个范围的第一行和最后一行.
例如下面的命令定义了一个SaveIt命令,这个命令可以将指定范围的文件写入文件save_file:
:command -range=% SaveIt:<line1>,<line2> write! save_file
其他的一些选项和关键字如下:
-count=number
这个命令指定一个数量,默认为number.数量的结果保存在关键字<count>中.
-bang 我们可以使用!修饰符.如果指定了,!将会被存放在关键字<bang>中.
-register
我们可以指定一个寄存器,默认为未命名寄存器.寄存器的定义放在关键字<reg>中.
关键字<f-args>含有与关键字<args>相同的信息.所不同的只是函数的调用方式不同.例如:
:command -nargs=* DoIt :call AFunction(<f-args>)
:DoIt a b c
执行下面的命令:
:call AFunction("a","b","c")
最后我们还有<lt>关键字,他包含字符<.
基本的功能函数:
Vim编辑器有许基本的功能函数.这一部分将会列出所有的功能函数:
append({line_number},{string})
作用:在line_number行后新增一行加入string
参数:
line_number
某行的行号,将会在其后插入文本.0将会使得在文件的开始处插入文本.
string 在指定行后将插入的文本.
返回值:整数标记.或为0则没有错误,1则是由于line_number超出范围所产生的错误argc()
作用:计算参数列表中的参数个数.
返回值:整数.参数个数.
argv({number})
作用:返回参数列表中的参数.
参数:
number: 参数索引.0则为参数列表中的第一个参数.
返回值:字符串.返回请求的参数.
browse(save,title,initial_directory,default)
作用:显示一个文件查看器,允许用户选择文件.这个只是在GUI版本中工作.
参数:
save:一个整数用来表明这个文件是否被读入或是保存.如果save为非0,则查看器选择一个文件写入.如果为0,则这个文件用于读取.
title:对话框的标题.
initial_directory:开始查看时的目录.
default:默认的文件名.
返回值:字符串.选择的文件名.如果用户选择了关闭或是有错误发生,则会返回一个空字符串.
例如下面的命令:
:call browse(0,"Hello","/home/mayuelong/Documents","Shell.txt")
bufexists(buffer_name)
作用:检查一个缓冲区是否存在.
参数:
buffer_name:要检查的缓冲区的名称.
返回值:整数标记.若存在则返回真(1),否则为假(0)
bufloaded(buffer_name)
作用:查看一个缓冲区是否被装入
参数:
buffer_name:查看是否装入的缓冲区的名称.
返回值:整数标记.若存在则返回真(1),否则为假(0)
bufname(buffer_specification)
作用:查看指定的缓冲区
参数:
buffer_specification:指明缓冲区的标号或是字符串.如果指定缓冲区标号,那么buffer_specification返回缓冲区标号.如果指定了字符串,他就会被作为一个常规的表达式并且会列出查找得到并且匹配的缓冲区.这里有三个特殊的缓冲区:%当前缓冲区,#交换缓冲区,$列表中的最后一个缓冲区.
返回值:字符串.包含缓冲区全名的字符串或是有错误发生或是没有匹配时则会返回空串.
bufnr(buffer_expression)
作用:得到缓冲区的标号.
参数:
buffer_expression:与函数bufname中的相类似.
返回值:整数.缓冲区的标号.若有错,则返回-1.
bufwinnr(buffer_expression)
作用:得到一个缓冲区的窗口号
参数:
buffer_expression:与bufname功能函数的参数相同
返回值:整数.与缓冲区相匹配的第一窗口的标号.或是有错误或是没有匹配的窗口时返回-1
byte2line(byte_index)
作用:将字节索引转换为行号
参数:byte_index 在当前缓冲区的字符索引
返回值:整数.包含由byte_index所指定的字符的行号或是byte_index超出范围时返回-1
char2nr(character)
作用:将字符转换成相应的数字
参数:
character:转换单一的字符.如果指定了一个长的字符串,只使用第一个字符.
返回值:整数.与字符相对应的数字标号.例如:char2nr("A")的值为65(即其相对应的ASCII码)
col(location)
作用:返回指定位置的列号
参数:
location:标记的描述(如"x)或是"."得到当前光标所在处的列号
返回值:整数.返回标记或是光标的所在的列号.当有错误发生时则返回0
confirm({message},{choice_list},[default],[type])
作用:显示一个对话框可以使得用户一系列的选择并返回用户的选择.
参数:
{message}在对话框中显示的提示信息.
{choice_list}包含选择列表的字符串.每一个新行("/n")来分隔每一个选择.用&来表明加速字符.
[default]表明默认选择的索引.第一个按钮为#1.如果没有指定这个参数,则第一个按钮为默认的.
[type]要显示的对话框的类型.可用的选择如下"Error","Question","Info","Warning","Generic".默认情况下"Generic"
返回值:整数.选择的数字(从1开始).如果用户按<ESC>或是CTRL-C来退出则返回0
如下面的一些例子:
echo confirm("Choose one","&One/n&Two/n&Three",2,"Error")
echo confirm("Choose one","&One/n&Two/n&Three",1,"Question")
echo confirm("Choose one","&One/n&Two/n&Three",0,"Warning")
echo confirm("Choose one","&One/n&Two/n&Three",0,"Info")
echo confirm("Choose one","&One/n&Two/n&Three",0,"Generic")
delete({file_name})
作用:删除文件
参数:
{file_name}要删除的文件名
返回值:整数.0表明文件已被删除,非0则表示错误.
did_filetype()
作用:检测FileType事件是否发生.这个命令在用自动命令时显得更为有用.
返回值:整数.如果自动命令正在执行并且至少有一个事件已发生则返回非0,否则返回0
escape({string},{character_list})
作用:将{string}字符串的字符转换成转义字符.{character_list}则为要进行转义的字符列表.
返回值:字符串
例如下面的命令:
:echo escape("This is a 'test'"," '")
其执行结果为:
This/ is/ a/ /'test/'
exsits({string})
作用:检测由{string}所指定的内容是否存在.
参数:
{string}要检测的内容.这个可以用来指定一个选项('&autoindent'),环境变量('$VIMRUNTIME'),基本的函数名('*escape')或者是一个简单的变量('var_name')(注:在这里我们要指定定这个引号标记,因为我们是在字符串中传递这些值)
返回值:整数.如果存在则返回1,否则返回0
expand({string},[flag])
作用:返回与{string}匹配的文件列表.这个字符串可以包含通配符或是其他的描述.在这里我们要注意的是'suffixes'选项和'wildignore'选项可以影响扩展如何实现.如果一个特殊的单词例如'<cfile>'被扩展,并不会显示更深一些的扩展.如果光标位于字符串'~/.vimrc'上,'expand('<cfile>')的结果为'~/.vimrc'.如果我们要得到全名,我们需要扩展两次.所以'expand(expand('<cfile>'))将会返回'/home/oualline/.vimrc'.选项'wildignore'和'suffixes'将会起作用,除非指定了一个非0的[flag]
返回值:字符列表.由新行分隔的与{string}相匹配的文件名列表.如果没有匹配的,则会返回回空字符串.
filereadable({file_name})
作用:检测一个文件是否可读
参数:要检测的文件名
返回值:整数.如果这个文件存在并可读则会返回非0值.0则表明这个文件不存在或是这个文件不可读.
fnamemodify({file_name},{modifiers})
作用:对{file_name}执行{modifiers}并返回结果.
参数:
{file_name}文件名
{modifiers}修改标记,如":r:h"
返回值:字符串.被修改的文件名
getcwd()
作用:得到当前的工作目录
返回值:字符串.当前的工作目录
getftime({file_name})
作用:得到一个文件的修改时间
参数:
{file_name} 要检测的文件名
近回值:整数.文件的修改时间,若发生错误则返回-1
getline({line_number})
作用:从当前的编辑缓冲区中取出一行
参数:
{line_number} 要得到的行号或是"."表明光标所在的行
返回值:字符串.一行文本.如果{line_number}超出范围则会返回空字符串
getwinposx()getwinposy()
作用:返回GUI窗口的x或是y坐标
返回值:整数.以像素表示的GUI窗口的x或是y坐标.如果这些信息不可得则返回-1.
glob({file_name})
作用:在文件名中扩展通配符并返回文件列表.
参数:
{file_name}
表明要匹配文件名类型的字符串.我们还可以使用由反引号(`)构成的外部命令.如下面的例子:glob("`find . -name '*.c' -print'")
返回值:字符串.由<NL>分隔的匹配的文件列表.如果没有匹配的则会返回空串
has({feature})
作用:检测某一个特征已被安装
参数:
{feature} 包含特征名的字符串
返回值:整数标记.如果这个特征已被编译则要返回1,否则返回0
histadd({history},{command})
作用:在一个历史列表加入某一个内容
参数:
{history} 要用到的历史名.如下:
"cmd" ":" 命令历史
"search" "/" 查找历史
"expr" "=" 表达式历史
"input" "@" 输入历史
返回值:成功则为1,错误为0
histdel({history},[pattern])
作用:从历史中移除命令
参数:
{history} 要用到的历史列表
[pattern]
定义要移除的内容的表达式.如果没有指定类型,将会从历史中移除所有的内容.
histget({history},[index])
作用:从历史记录中得到某一内容
参数:
{history} 要用到的历史列表
[index]
要得到的内容索引.最新的输入为-1,次新的为-2,依次类推.最后一个输入的为1,次后输入的为2,依次类推.如果没有指定索引,将后返回最后一个输入的命令.
返回值:字符串.历史记录中指定的命令,如果有错误发生时则会返回空串
histnr({history})
作用:返回指定历史列表中的当前输入的标号
参数:
{history} 要检测的历史
返回值:整数.在这个历史列表中的最后一个内容.如果有错误则返回-1
hlexists({name})
作用:检测一个语法加亮组是否存在
参数:
{name} 要检测的组名
返回值:整数标记.若存在则为非0,否则为0
hlID({name})
作用:指定语法加亮组的名,返回ID号
参数:
{name} 语法加亮组的名
返回值:整数.ID号
hostname()
作用:得到电脑的主机名
返回值:字符串.电脑的主机名
input({prompt})
作用:问一个问题并会得到答案
参数:
{prompt} 要显示的提示
返回值:字符串.与用户输入相一致的内容
isdirectory({file_name})
作用:检测{file_name}是否为一个目录
参数:要检测的内容名
返回值:整数标记.如果是为目录则为1,如果不是目录或不存在则返回0
libcall({dll_name},{function},{argument})
作用:在DLL文件中调用函数(只在Windows系统中使用)
参数:
{dll_name} 共享库的文件名,在其中定义了{function}
{function} 函数名
{argument}
单一参数.如果这个参数为一个整数,他就会作为整数传递.如果是字符串,就会以"char*"传递.
返回值:字符串.返回函数.
line({position})
作用:指定一个标记或是其他的位置指示,返回行号
参数:
{position} 位置标记.可以是一个标记,'x,当前光标所在处".",或是文件尾"$"
返回值:整数.行号.如果没有标记或是其他的错误,则会返回0
line2byte({line_number})
作用:将行号转换成字符索引
参数:
{line_number}
要转换的行号.这个可以是一个标记('x),当前光标处('.')或者是缓冲区的最后一行('$')
返回值:整数.由1开始的行中第一个字符的索引.如果有错误发生则会返回-1
localtime()
作用:以UNIX格式返回当前时间
返回值:整数.
maparg({name},[mode])
作用:返回映射到哪一个键
参数:
{name} {lhs}映射名
[mode] 字符映射的模式.默认为""
返回值:字符串.映射结果字符串.如果没有映射返回空串
mapcheck({name},[mode])
作用:检测一个映射是否存在
参数:
{name} {lhs}映射名
[mode] 字符映射的模式,默认为""
返回值:字符串.返回匹配{name}的任何映射.这个函数与maparg函数有一些不同.前者会在映射中查找相冲突的名字.例如如果我们有一个映射"ax",他就会转换为"axx"
例如下面的一些例子:
:map ax test
:echo maparg("ax")
test
:echo maparg("axx")
:echo mapcheck("ax")
test
:echo mapcheck("axx")
test
match({string},{pattern})
作用:检测{string}是否与{pattern}相匹配.如果要设置了'ignorecase'就会使得编辑忽略大小的情况.
参数:
{string} 要检测的字符串
{pattern} 要检测的类型
返回值:整数.{string}中{pattern}出现的第一个字符索引.第一个字符为0.如果没有相匹配的就会返回-1.
matchend({string},{pattern})
作用:与match函数相类似,所不同的是他会返回{pattern}后的字符索引.
matchstr({string},{pattern})
作用:与match函数相类似,只是他会返回匹配的字符串
参数:
{string} 要检测的字符串
{pattern} 要检测的类型
返回值:字符串.{string}中匹配的部分.如果没有匹配就会返回空串
nr2char({number})
作用:将数转换成字符
参数:字符的ASCII码值.
返回值:长度为1的字符串.与数字相对应的字符
rename({from},{to})
作用:重命名一个文件.
参数:
{from} 存在的文件名
{to} 要重命名为的文件名
返回值:整数标记.如果成功则为0,否则为非0
setline({line_number},{line})
作用:用{line}的字符串内容替换{line_number}行的内容.
参数:
{line_number} 要改变的行号
{line} 替换行的文本
返回值:整数标记.如果没有错误则为0,否则为非0
strftime({format},[time])
作用:通过{format}返回时间格式.在字符串可以放置的转换字符决定于我们系统的strftime函数.
参数:字符串.包含时间格式化的时间字符串
strlen({string})
作用:计算字符串的长度
参数:
{string} 我们要计算长度的字符串
返回值:整数.字符串的长度
strpart({string,{start},{length})
作用:返回由{start}开始的长度为{length}的子串
例如:
:echo strpart("This is a test",0,4)
This
:echo strpart("This is a test",5,2)
is
如果{start}和{length}所指定的为不存在的字符,就会忽略这种情况.例如下面的命令从第一个字符的左边开始.
:echo strpart("This is a test",-2,4)
Th
参数:
{string}我们要从中查找的字符串
{start}我们要选取的字符串的开始地址
{length}我们要选取的字符串的长度
返回值:字符串.我们要选取的子串
strtrans({string})
作用:将字符串不可打印的字符转换成可以打印的字符
参数:
{string} 包含不要打印字符的字符串
返回值:字符串.不可打印字符的结果子.例如CTRL-A就会转换为^A.
substitute({string},{pattern},{replace},{flag})
作用:在字符串,将第一个与{pattern}匹配的字符替换成{replace}.这个命令与Vim的编辑命令相同
参数:
{string} 要替换的字符串
{pattern} 用来指定替换部分的字符串
{replace} 要替换成为的文本
{flag}
如果没有指定只是替换第一个出现的,如果为g,就会可以替换全部的情况.
返回值:字符串.替换后的字符串
synID({line},{column},{transparent_flag})
作用:返回由{line}和{column}所指定的语法ID.
参数:
{line},{column} 内容所在的位置
{transparent_flag}If non-0, transparent items are reduced to the items they reveal
返回值:语法ID.
synIDattr({sytnax_id},{attribute},[mode])
作用:得到语法颜色元素的标记
参数:
{sytnax_id} 语法描述的标号.
{attribute} 标记名.可有和的标记名如下:
"name" 语法内容名
"fg" 前景色
"bg" 后景色
"fg#" 以#RRGGBB格式的前景色
"bg#" 以#RRGGBB格式的后景色
"bold" 如果内容为粗体则为1
"italic"如果内容为斜体则为1
"reverse"如果内容反转则为1
"inverse"与上面内容相同
"underline"如果内容为下划线则为1
[mode]
要得到哪种终端标记.这个可以是"gui","cterm","term".默认的终端是我们当前用的.
返回值:字符串.标记值.
synIDtrans({syntax_id})
作用:返回转换的语法ID
参数:
{syntax_id} 语法元素的ID
返回值:整数,转换的语法ID.
system({command})
作用:执行外部命令并输出.选项'shell'和'shelldir'可以用于这个函数
参数:
{command} 要执行的命令.
返回值:字符串.输出命令的执行结果.
tempname()
作用:产生一个临时文件名
返回值:字符串.用为临时文件的文件名.
visualmode()
作用:得到最后的可视化模式
返回值:字符串.作为命令字符串得到最后一个可视化模式.这个可以是v,V,或是CTRL-V
virtcol({location})
作用:得到给定位置的列号.
参数:位置可以是."(光标处),'a(标记a),或者是$"(文件最后处)
返回值:整数.
winbufnr({number})
作用:得到窗口内缓冲区的标号.
参数:
{number} 窗口标号.0为当前窗口.
返回值:整数.缓冲区标号.若有错则为-1.
winheight({number})
作用:得到窗口高度.
参数:
{number} 窗口标号.0为当前窗口.
返回值:整数.以行数表示的窗口高度.若有错,则为-1
winnr()
作用:得到当前窗口号.
返回值:整数.当前窗口标号.最上的窗口为#1