热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vi编辑器的学习使用(二十七)

Vim编辑器有着丰富的脚本语言.当我们要为特殊的任务而定制我们的编辑器时,这些命令语言就会给我们极大的灵活性.Vim编辑器允许我们定义,设置和使用自己的变量.为变量设定一个值,我
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 &#39;>/100<&#39;

其输出结果分别为:

>&#64;<

>/100<

在Vim编辑器中我们还可以用表达式进行整数的操作.这些操作包括如下的算术运算:

int&#43;int    加

int-int    减

int*int 乘

int/int 除

int%int 取余

-int    取负

另外逻辑运算符可以作用于字符串和整数.如果比较成功则返回1,否则则返回0.如下面的比较:

var &#61;&#61; var    检查是否相等

var !&#61; var     不等

var <  var    小于

var >  var     大于

var <&#61; var    小于等于

var >&#61; var    大于等于

另外比较运算符可以进行字符串和表达式的比较.例如下面进行指定的字符串("word")和表过式"/w*"比较,如果表达式匹配则返回1.

"word"&#61;~"/w*"

例如下面的两个常规表达式的比较:

string &#61;~ regexp    相匹配的常规表达式

string !~ regexp    两个表达式不匹配

另外字符串还有下面的特殊比较:

string &#61;&#61;? string    字符串相等,忽略大小写

string &#61;&#61;# string    字符串相等,大小写必须匹配

string !&#61;? string    字符串不相等,忽略大小写

string !&#61;# string    字符串不相等,大小写必须匹配

string
string <#  string    小于,大小写必须匹配

string <&#61;? string    小于等于,忽略大小写

string <&#61;# string    小于等于,大小写必须匹配

string >?  string    大于,忽略大小写

string >#  string    大于,大小写必须匹配

string >&#61;? string    大于等于,忽略大小写

string >&#61;# string    大于等于,大小写必须匹配

从这里我们可以看到每一个运算符有三种形式.基本形式(&#61;&#61;)对应ignorecase选项.?(&#61;&#61;?)忽略大小写的不同而#(&#61;&#61;#)从不忽略这样的区别.

如果我们要删除一个变量,我们可以用下面的命令:

:unlet[!] {name}

在通常的情况下如果我们删除一个不存大的变量,Vim编辑器就会显示错误.而如果我们使用!,则不会显示错误信息.

当我们要输入文件名时,我们可以使用下面的一些特殊的单词或是符号:

%    当前文件名

#    交换文件名

    光标下的单词

    光标下的WORD

    光标下的文件名

    当执行相关的自动命令(autocommand)正读入或是写入的文件名.

    在一个自动命令中的当前缓冲区标号

相类似.但是当在FileType或是Syntax事件中使用时并不是文件名,而文件类型或是语法名.

    当前正用于:sourced的文件名.

我们可以用下面所列出的内容来修改这些单词或是符号.例如:p可以将文件名变为全名.例如光标下的文件名为test.c,就将是test.c,而同是就将成为/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(":p")

我们可将这里的:p换成我们可以试验的任何修饰符.

下面的内容我们将会更详细的说明一个:echo和expand功能

:echo的功能只是重复他的参数.例如:

:echo "Hello world"

Hello world

我们还可以用他来显示变量的值:

:let flag&#61;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 &#61;&#61; "xterm"

:    "Do xterm suff

:elseif &term &#61;&#61; "vt100"

:    "Do vt100 suff

:else

:    "Do non xterm and vt100 stuff

:endif

循环

:while命令开始一个循环.这个循环是由命令:endwhile命令结束的:

:while counter<30

:  let counter&#61;counter&#43;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 &#61; " echo &#39;Hello world!&#39;"

:execute command

Vim编辑器还允许我们定义自己的函数.函数定义的一般形式如下:

:function {name}({var1},{var2},...)

(注:函数的名称要以大写字母开始)

结束定义用下面的命令:

:endfunction

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

:function Min(num1,num2)

这个命令是告诉Vim我们定义的函数名为Min,他有两个参数.我们要做的第一件事就是我们要比较两个数中哪一个要小一些:

:    if a:num1
这里的前缀a:是告诉Vim这个变量是一个函数参数.我们将最小的参数赋值给smaller变量:

:    if a:num1
:        let smaller &#61; a:num1

:    else

        let smaller &#61; a:num2

:    endif

这里的smaller是局部变量.在这个函数中使用的所有变量均为局部变量,除非我们使用了g:作为前缀.例如在函数定义外我们定义了变量var.在函数内部我们要使用时要用g:var来调用.所以说一个变量依据其内容有三个不同的名字.

现在我们可以用:return语句来返回最小的那个数.最后我们结束函数定义:

:    return smaller

:endfunction

完整的函数定义如下:

:function Min(num1,num2)

:    if a:num1
:        let smaller &#61; a:num1

:    else

:        let smaller &#61; a:num2

:    endif

:    return smaller

:endfunction

这样我们就可以用表达式来使用我们的函数了,如:

:let tiny &#61; 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 &#61; 1

:    echo "Show is"a:start

:

:    while (index <&#61;a:0)

:        echo "Arg" index "is" a:index

:        let index &#61; index &#43; 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&#61;0 1delete

然而因为在默认的情况下-nargs&#61;0,所以我们不需要指定他.

其他的-nargs选项值如下:

-nargs&#61;0    没以参数

-nargs&#61;1    1个参数

-nargs&#61;*    任何个数的参数

-nargs&#61;?    零个或是一个参数

-nargs&#61;&#43;    一个或是更多个参数

在命令的定义中,参数是由关键字指定的.例如:

:command -nargs&#61;&#43; Say :echo ""

然后我们输入:

:Say Hello World

命令的执行结果为:

Hello World

一些命令是指定一个范围作为其参数.告诉Vim我们在定义这样的一个命令我们需要指定-range选项.选项的值如下:

-range    允许的范围,默认为当前行.

-range&#61;%    允许的范围,默认为当前文件(while file)

-range&#61;count    允许的范围,但是他只是一个单一的数字,默认下为count.

当我们指定了一个范围以后,我们就可以用关键字得到这个范围的第一行和最后一行.

例如下面的命令定义了一个SaveIt命令,这个命令可以将指定范围的文件写入文件save_file:

:command -range&#61;% SaveIt:, write! save_file

其他的一些选项和关键字如下:

-count&#61;number

这个命令指定一个数量,默认为number.数量的结果保存在关键字中.

-bang    我们可以使用!修饰符.如果指定了,!将会被存放在关键字中.

-register

我们可以指定一个寄存器,默认为未命名寄存器.寄存器的定义放在关键字中.

关键字含有与关键字相同的信息.所不同的只是函数的调用方式不同.例如:

:command -nargs&#61;* DoIt :call AFunction()

:DoIt a b c

执行下面的命令:

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

最后我们还有关键字,他包含字符<.

基本的功能函数:

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开始).如果用户按或是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 &#39;test&#39;"," &#39;")

其执行结果为:

This/ is/ a/ /&#39;test/&#39;

exsits({string})

作用:检测由{string}所指定的内容是否存在.

参数:

{string}要检测的内容.这个可以用来指定一个选项(&#39;&autoindent&#39;),环境变量(&#39;$VIMRUNTIME&#39;),基本的函数名(&#39;*escape&#39;)或者是一个简单的变量(&#39;var_name&#39;)(注:在这里我们要指定定这个引号标记,因为我们是在字符串中传递这些值)

返回值:整数.如果存在则返回1,否则返回0

expand({string},[flag])

作用:返回与{string}匹配的文件列表.这个字符串可以包含通配符或是其他的描述.在这里我们要注意的是&#39;suffixes&#39;选项和&#39;wildignore&#39;选项可以影响扩展如何实现.如果一个特殊的单词例如&#39;&#39;被扩展,并不会显示更深一些的扩展.如果光标位于字符串&#39;~/.vimrc&#39;上,&#39;expand(&#39;&#39;)的结果为&#39;~/.vimrc&#39;.如果我们要得到全名,我们需要扩展两次.所以&#39;expand(expand(&#39;&#39;))将会返回&#39;/home/oualline/.vimrc&#39;.选项&#39;wildignore&#39;和&#39;suffixes&#39;将会起作用,除非指定了一个非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}

表明要匹配文件名类型的字符串.我们还可以使用由反引号(&#96;)构成的外部命令.如下面的例子:glob("&#96;find . -name &#39;*.c&#39; -print&#39;")

返回值:字符串.由分隔的匹配的文件列表.如果没有匹配的则会返回空串

has({feature})

作用:检测某一个特征已被安装

参数:

{feature}    包含特征名的字符串

返回值:整数标记.如果这个特征已被编译则要返回1,否则返回0

histadd({history},{command})

作用:在一个历史列表加入某一个内容

参数:

{history}    要用到的历史名.如下:

"cmd"    ":"    命令历史

"search" "/"    查找历史

"expr"    "&#61;"    表达式历史

"input"    "&#64;"    输入历史

返回值:成功则为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}    位置标记.可以是一个标记,&#39;x,当前光标所在处".",或是文件尾"$"

返回值:整数.行号.如果没有标记或是其他的错误,则会返回0

line2byte({line_number})

作用:将行号转换成字符索引

参数:

{line_number}

要转换的行号.这个可以是一个标记(&#39;x),当前光标处(&#39;.&#39;)或者是缓冲区的最后一行(&#39;$&#39;)

返回值:整数.由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}相匹配.如果要设置了&#39;ignorecase&#39;就会使得编辑忽略大小的情况.

参数:

{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})

作用:执行外部命令并输出.选项&#39;shell&#39;和&#39;shelldir&#39;可以用于这个函数

参数:

{command}    要执行的命令.

返回值:字符串.输出命令的执行结果.

tempname()

作用:产生一个临时文件名

返回值:字符串.用为临时文件的文件名.

visualmode()

作用:得到最后的可视化模式

返回值:字符串.作为命令字符串得到最后一个可视化模式.这个可以是v,V,或是CTRL-V

virtcol({location})

作用:得到给定位置的列号.

参数:位置可以是."(光标处),&#39;a(标记a),或者是$"(文件最后处)

返回值:整数.

winbufnr({number})

作用:得到窗口内缓冲区的标号.

参数:

{number}    窗口标号.0为当前窗口.

返回值:整数.缓冲区标号.若有错则为-1.

winheight({number})

作用:得到窗口高度.

参数:

{number}    窗口标号.0为当前窗口.

返回值:整数.以行数表示的窗口高度.若有错,则为-1

winnr()

作用:得到当前窗口号.

返回值:整数.当前窗口标号.最上的窗口为#1








推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文详细介绍了Python中正则表达式和re模块的使用方法。首先解释了转义符的作用,以及如何在字符串中包含特殊字符。然后介绍了re模块的功能和常用方法。通过学习本文,读者可以掌握正则表达式的基本概念和使用技巧,进一步提高Python编程能力。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
author-avatar
mobiledu2502875123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有