查看文章
 
vim使用手册41--编写 Vim 脚本(上)
2007年12月18日 星期二 14:00

*41.1* 简介 *vim-script-intro* *script*


你最初接触到 Vim 脚本是在 vimrc 文件里。当 Vim 启动时它将读取该文件的内容并执
行其中的命令。你可以在其中设置选项。你也可以在其中使用任何冒号命令 (以 ":" 开
头的命令;这些命令有时也被称作 Ex 命令或命令行命令)。
语法文件其实也是 Vim 脚本。专为某种文件类型设定选项的文件也是。一个很复杂的
宏可以被单独的定义在一个 Vim 脚本文件中。你可以自己想到其它的应用。

让我们从一个简单的例子开始:

:let i = 1
:while i < 5
: echo "count is" i
: let i += 1
:endwhile

备注:
那些 ":" 字符并非必须。只有在你键入命令时才需要,在编写 Vim 脚本时可以
去掉。在这里用一是为了清楚,二是为了区别于普通模式命令。
备注:
你可以拷贝这里的示例文本,然后用 :@" 执行。

本例的输出是:

count is 1
count is 2
count is 3
count is 4

第一行的 ":let" 命令给一个变量赋值。通常的用法是:

:let {变量} = {表达式}
在例子中变量名是 "i" 而表达式是一个简单的数值 1。
":while" 命令开始一个循环。通常的用法是:

:while {条件}
: {语句}
:endwhile
只要条件为真,"while" 和 ":endwhile" 包围的语句总被执行。在例子中使用的条件是
表达式 "i < 5"。这个条件在变量 i 小于五时总是真的。
备注:
如果你碰巧写了一个死循环语句,你可以用 CTRL-C 来终止 (在 MS-Windows
上使用 CTRL-Break)。

":echo" 命令显示它的参数。在这个例子中的参数是字符串 "count is" 和变量 i 的
值。因为开始时 i 的值是一,所以将会显示:

count is 1

接着是 ":let i += 1" 命令。该命令相当于 ":let i = i + 1"。在变量 i 上加一并将
新的值赋给同一个变量。

给出本例是为了解释命令,不过如果你真的要写这样一个循环,下面的表达更加简洁:

:for i in range(1, 4)
: echo "count is" i
:endfor
我们现在不解释 |:for| 和 |range()| 如何工作,一会儿再说。如果你没有耐心,点击
这些链接。


三 种 数 值

数值可以是十进制,十六进制,或者八进制的。以 "0x" 或 "0X" 开始的数值是十六进制
的。例如 "0x1f" 代表十进制 31。以零开始的数值是八进制的。"017" 代表十进制 15。
当心:不要在十进制数前添上零,那样该数值将会被作为八进制数对待!
":echo" 命令总以十进制格式显示数值。例:

:echo 0x7f 036
127 30

在一个数值前加上减号会将其变为负值。十六进制数和八进制数亦然。减号也用于减法操
作。将下例与前面的比较:

:echo 0x7f -036
97

表达式中的空白字符将被忽略。然而,为了增加表达式的易读性,建议用来分隔不同的项
目。例如,为了不和上面的负号混淆,在减号和之后的数字前加入一个空格:

:echo 0x7f - 036

*41.2* 变量


一个变量名可以由 ASCII 字符,数字和下划线组成。但是变量名不能以数字开始。以下
是几个有效的变量名:

counter
_aap3
very_long_variable_name_with_dashes
FuncLength
LENGTH

"foo+bar" 和 "6var" 都是无效的变量名。
这些变量都是全局的。要列出当前定义的所有变量可以用这个命令:

:let
你可以在任何地方使用全局变量。这同时也意味着: 当一个脚本文件使用 "count" 变量
时,可能另一个脚本文件也使用了这个变量。这至少会引起混乱,严重时会导致脚本无法
正常工作。为避免这种情况发生,你可以在变量名前加上 "s:" 使其变成脚本文件的局部
变量。例如,一脚本包含以下代码:

:let s:count = 1
:while s:count < 5
: source other.vim
: let s:count += 1
:endwhile
由于 "s:count" 是局部变量,你可以确信调用 (source) "other.vim" 脚本时不会改变
它的值。如果 "other.vim" 也使用一个 "s:count" 变量,该变量将会是仅在脚本内有效
的局部变量。更多关于脚本局部变量可以在这里读到: |script-variable|。

还有很多其它类型的变量,参阅 |internal-variables|。最常用的几类有:

b:name 缓冲区的局部变量
w:name 窗口的局部变量
g:name 全局变量 (也用于函数中)
v:name Vim 预定义的变量


删 除 变 量

变量不仅仅可以在 ":let" 命令显示,同时也占用内存空间。为了删除一个变量可以使用
":unlet" 命令。例:

:unlet s:count
这将删除 "s:count" 这个脚本局部变量并释放其占用的内存。如果你并不确定这个变量
是否存在,但并不希望系统在它不存在时报错,可以在命令后添加 !:

:unlet! s:count
当一个脚本结束时,它使用的局部变量不会自动被删除。下一次脚本被执行时,旧的变量
值仍可被使用。例:

:if !exists("s:call_count")
: let s:call_count = 0
:endif
:let s:call_count = s:call_count + 1
:echo "called" s:call_count "times"
"exists()" 函数检查一个变量是否已经被定义过了。它的参数是你想检查的变量的名
字。而不是变量本身!如果你这样做:

:if !exists(s:call_count)
那么变量 s:call_count 的值将被用来做检测。你不会得到想的结果。
惊叹号 ! 将一个值取反。当该值为真时,表达式的值为假。当该值为假时,表达式的
值为真。你可以把它读作 "not"。这样 "if !exists()" 可以被读作 "if not exists()"
(如果-不-存在)。
Vim 把任何非零的值当作真。零代表假。
注意:
如果期待数值类型,Vim 自动把字符串转换为数值。如果使用不以数位开始的字
符串,返回的数值为零。所以小心这种代码:
:if "true"
这里 "true" 会被解读为零,也就是假值!


字 符 串 变 量 和 常 量

到目前为止我们只用到了数值作为变量的值。同样的我们可以使用字符串。这两种变量类
型是 Vim 支持的基本类型。变量的类型是动态的。每当我们通过 ":let" 语句为变量赋
值时,变量的类型才被确定。类型更多的内容见 |41.8|。
你需要使用字符串常量来为字符串变量赋值。字符串常量有两种。第一种是由双引号
括起来的:

:let name = "peter"
:echo name
peter

如果你想在这样的字符串内使用双引号,在之前加上反斜杠即可:

:let name = "\"peter\""
:echo name
"peter"

如果你不想使用反斜杠,也可以用单引号括起字符串:

:let name = '"peter"'
:echo name
"peter"

所有的字符在单引号内都保持其本来面目。只有单引号本身例外: 输入两个你会得到一个
单引号。因为反斜杠在其中也被作为其本身来对待,你无法使用它来改变其后的字符的意
义。
在双引号括起来的字符串中可以使用特殊字符。这里有一些有用的例子:

\t <Tab>
\n <NL>,换行
\r <CR><Enter>
\e <Esc>
\b <BS>,退格
\" "
\\ \,反斜杠
\<Esc> <Esc>
\<C-W> CTRL-W

最后两个只是用来举例子的。"\<name>" 的形式可以被用来表示特殊的键 "name"。
在 |expr-quote| 中列出了全部的特殊字符。

*41.3* 表达式


Vim 脚本支持的表达式很丰富,也很容易使用。你可以在这里读到表达式的定义:
|expression-syntax|。这里我们只看看常用的几个。
已经提到的那些数值,字符串常量和变量都属于表达式。因此任何可以使用表达式的
地方,数值,字符串变量和常量都可以使用。其它基本的表达式有:

$NAME 环境变量
&name 选项
@r 寄存器

例子:

:echo "The value of 'tabstop' is" &ts
:echo "Your home directory is" $HOME
:if @a > 5
&name 这种形式可以被用来暂时改变一个选项的值。例:

:let save_ic = &ic
:set noic
:/The Start/,$delete
:let &ic = save_ic
这样既确保了在匹配 "The Start" 模式时 'ignorecase' 选项是关闭的,同时也保留了
用户原来的选项值。(另一个方法是在模式里加上 "\C",见 |/\C|。)


算 术

我们把这些基本的东西都混合起来用就更有趣了。先来看看算术运算:

a + b 加
a - b 减
a * b 乘
a / b 除
a % b 余

先乘除,后加减。例如:

:echo 10 + 5 * 2
20

括号内的先计算。这也没什么奇怪的。例如:

:echo (10 + 5) * 2
30

用 "." 可以把两个字符串连接起来。例如:

:echo "foo" . "bar"
foobar

一般的,当 ":echo" 命令遇到多个参数时,会在它们之间加入空格。但上例中参数是一
个表达式,所以不会有空格。

下面的条件表达式很显然是从 C 语言里借来的:

a ? b : c

如果 "a" 为真用 "b",否则用 "c"。例如:

:let i = 4
:echo i > 5 ? "i is big" : "i is small"
i is small

在整个表达式被求值前,结构中的三部分总是先被求值的。因此你可以将其视为:

(a) ? (b) : (c)

*41.4* 条件语句


":if" 命令在条件满足的前提下,执行其后直到 ":endif" 的所有语句。常用的形式为:

:if {condition}
{statements}
:endif

语句 {statements} 仅当表达式 {condition} 为真 (非零) 时才被执行。这些语句还必
须是有效的。否则 Vim 无法找到相应的 ":endif"。
你也可以使用 ":else"。常用形式为:

:if {condition}
{statements}
:else
{statements}
:endif

第二组 {statements} 仅当条件不满足时被执行。
最后还有 ":elseif":

:if {condition}
{statements}
:elseif {condition}
{statements}
:endif

这种形式就像 ":else" 接着 "if" 一样,但是少出现一个 ":endif"。
下面是一个有用的例子 (可以用在你的 vimrc 文件里):它检查 'term' 选项并根据
不同的值做不同的操作:

:if &term == "xterm"
: " Do stuff for xterm
:elseif &term == "vt100"
: " Do stuff for a vt100 terminal
:else
: " Do something for other terminals
:endif

逻 辑 操 作

实际上我们在前面的几个例子中已经是用到了。下面是几个最常用的形式:

a == b 等于
a != b 不等于
a > b 大于
a >= b 大于等于
a < b 小于
a <= b 小于等于

如果条件满足,结果为 1,否则为 0。例如:

:if v:version >= 700
: echo "祝贺"
:else
: echo "你在使用旧的版本,升级!"
:endif
这里 "v:version" 是 Vim 定义的变量,用来存放 Vim 的版本号。600 意为 6.0 版。
6.1 版的值为 601。这对编写可以在不同版本的 Vim 上运行的脚本很有用。参阅
|v:version|

对数值和字符串都可以做逻辑操作。两个字符串的算术差被用来比较它们的值。这个结果
是通过字节值来计算的,对于某些语言,这样做的结果未必正确。
在比较一个字符串和一个数值时,该字符串将先被转换成一个数值。这容易出错,因
为当一个字符串看起来不像数值时,它会被当作 0 对待。例如:

:if 0 == "one"
: echo "yes"
:endif
上面的例子将显示 "yes",因为 "one" 看起来不像一个数值,所以被转换为 0 了。

对于字符串来说还有两种操作:

a =~ b 匹配
a !~ b 不匹配

左边的 "a" 被当作一个字符串。右边的 "b" 被当作一个匹配模式,正如做查找操作一
样。例如:

:if str =~ " "
: echo "字符串包括空格"
:endif
:if str !~ '\.$'
: echo "字符串以句号结尾"
:endif
注意 在匹配模式中用单引号是很有用的。因为匹配模式中通常有很多反斜杠,而反斜杠
在双引号字符串中必须双写才有效。

在做字符串比较时用到 'ignorecase' 选项。如果你不希望使用该选项,可以在比较时加
上 "#" 或 "?"。"#" 表示大小写敏感;"?" 表示忽略大小写。因此 "==?" 比较两字符串
是否相等,不计大小写。"!~#" 检查一个模式是否被匹配,同时也考虑大小写。
|expr-==| 有一个完整的字符串比较/匹配操作列表。



循 环 详 述

":while" 命令已经在前面提到了。还有另外两条语句可以在 ":while" 和 ":endwhile"
之间使用。

:continue 跳回 while 循环的开始;继续循环
:break 跳至 ":endwhile";循环结束

例:

:while counter < 40
: call do_something()
: if skip_flag
: continue
: endif
: if finished_flag
: break
: endif
: sleep 50m
:endwhile
":sleep" 命令使 Vim 小憩一下。"50m" 表示休息 50 毫秒。再举一个例子,":sleep 4"
休息 4 秒。

更多循环可以用 ":for" 命令实现,见下面的 |41.8|。

*41.5* 执行一个表达式


到目前为止,脚本内的语句都是由 Vim 直接运行的。用 ":execute" 命令可以执行一个
表达式的结果。这是一个创建并执行命令的非常有效的方法。
例如要跳转到一个由变量表示的标签:

:execute "tag " . tag_name
"." 被用来连接字符串 "tag " 和变量 "tag_name" 的值。假设 "tag_name" 的值为
"get_cmd",那么被将执行的命令将是:

:tag get_cmd
":execute" 命令只能用来执行冒号命令。":normal" 命令可以用来执行普通模式命令。
然而,它的参数只能是按表面意义解释的命令字符,不能是表达式。例如:

:normal gg=G
这个命令将跳转到第一行并以 "=" 操作符排版所有行。
为了使 ":normal" 命令也可以带表达式,可以把 ":execute" 与其连起来使用。
例:

:execute "normal " . normal_commands
变量 "normal_commands" 必须包含要执行的普通模式命令。
必须确保 ":normal" 的参数是一个完整的命令。否则,Vim 碰到参数的结尾就会中止
其运行。例如,如果你开始了插入模式,你必须也退出插入模式。这样没问题:

:execute "normal Inew text \<Esc>"
这将在当前行插入 "new text "。注意 这里使用了特殊键 "\<Esc>"。这样就避免了在你
的脚本当中键入真正的 <Esc> 字符。

如果你不想执行字符串,而想执行它作为表达式计算的结果,可以用 eval() 函数:

:let optname = "path"
:let optval = eval('&' . optname)
"&" 被加到 "path" 前面,这样传给 eval() 的参数成为 "&path"。这时得到的返回值就
是 'path' 选项的值。
相同的操作可以这样完成:
:exe 'let optval = &' . optname

*41.6* 使用函数


Vim 定义了大量的函数并通过这些函数提供了丰富的功能。本节将给出一些例子。你可以
在 |functions| 找到一个完整的列表。

一个函数可以被 ":call" 命令调用。参数列表要用括号括起来,并用逗号分割。例如:

:call search("Date: ", "W")
这将以 "Date: " 和 "W" 为参数调用 search() 函数。search() 函数的第一个参数是
一个查找模式,第二个是一个标志。标志 "W" 表示查找操作遇到文件尾时不折返。

在一个表达式内也可以调用函数。例如:

:let line = getline(".")
:let repl = substitute(line, '\a', "*", "g")
:call setline(".", repl)
getline() 函数从当前缓冲区获取一行文本。其参数是行号。在本例中,"." 表示光标所
在行。
substitute() 函数的功能和 ":substitute" 命令相似。它的第一个参数是要执行替
换操作的源字符串。第二个参数是一个匹配模式,第三个参数是替换字符串。最后一个参
数是一个标志位。
setline() 函数将第一个参数表示的行的文本置为第二个参数表示的字符串。本例中
光标所在的行被 substitute() 函数的结果所替换。因此这三条语句的效果等同于:

:substitute/\a/*/g
如果你在调用 substitute() 之前或之后有更多的事情要做的话,用函数的方式就会更有
趣了。


函 数 *function-list*

Vim 提供的函数很多。这里我们以它们的用途分类列出。你可以在 |functions| 找到一
个以字母顺序排列的列表。在函数名上使用 CTRL-] 可以跳转至该函数的详细说明。

字符串操作:
nr2char() 通过 ASCII 码值取得一个字符
char2nr() 取得字符的 ASCII 码值
str2nr() 把字符串转换为数值
printf() 根据 % 项目格式化字符串
escape() 将字符串通过 '\' 转义
tr() 把一组字符翻译成另一组
strtrans() 将一个字符串变成可显示的格式
tolower() 将一个字符串转换为小写
toupper() 将一个字符串转换为大写
match() 字符串中的模式匹配处
matchend() 字符串中的模式匹配结束处
matchstr() 在一个字符串中匹配一个模式
matchlist() 类似 matchstr(),同时返回子匹配
stridx() 子串在母串中第一次出现的地方
strridx() 子串在母串中最后一次出现的地方
strlen() 字符串长度
substitute() 用一个字符串替换一个匹配的模式
submatch() 取得 ":substitute" 匹配中指定的某个匹配
strpart() 取得字符串的一部分
expand() 展开特殊的关键字
iconv() 转换文本编码格式
byteidx() 字符串里字符的字节位置
repeat() 重复字符串多次
eval() 计算字符串表达式

列表处理:
get() 得到项目,错误索引不报错
len() 列表的项目总数
empty() 检查列表是否为空
insert() 在列表某处插入项目
add() 在列表后附加项目
extend() 在列表后附加另一个列表
remove() 删除列表里一或多个项目
copy() 建立列表的浅备份
deepcopy() 建立列表的完整备份
filter() 删除列表的选定项目
map() 改变每个列表项目
sort() 给列表排序
reverse() 反转列表项目的顺序
split() 分割字符串成为列表
join() 合并列表项目成为字符串
range() 返回数值序列的列表
string() 列表的字符串表示形式
call() 调用函数,参数以列表形式提供
index() 列表里某值的索引
max() 列表项目的最大值
min() 列表项目的最小值
count() 计算列表里某值的出现次数
repeat() 重复列表多次

字典处理:
get() 得到项目,错误的键不报错
len() 字典项目的总数
has_key() 检查某键是否出现在字典里
empty() 检查字典是否为空
remove() 删除字典的项目
extend() 从一个字典增加项目到另一个字典
filter() 删除字典的选定项目
map() 改变每个字典项目
keys() 得到字典的键列表
values() 得到字典的值列表
items() 得到字典的键-值组对的列表
copy() 建立字典的浅备份
deepcopy() 建立字典的完整备份
string() 字典的字符串表示形式
max() 字典项目的最大值
min() 字典项目的最小值
count() 计算字典里某值的出现次数

变量:
type() 变量的类型
islocked() 检查变量是否加锁
function() 得到函数名对应的函数引用
getbufvar() 取得指定缓冲区中的变量值
setbufvar() 设定指定缓冲区中的变量值
getwinvar() 取得指定窗口的变量值
gettabwinvar() 取得指定窗口和标签页的变量值
setwinvar() 设定指定窗口的变量值
settabwinvar() 设定指定窗口和标签页的变量值
garbagecollect() 可能情况下释放内存

光标和位置标记位置:
col() 光标或位置标记所在的列
virtcol() 光标或位置标记所在的屏幕列
line() 光标或位置标记所在行
wincol() 光标所在窗口列
winline() 光标所在窗口行
cursor() 置光标于 行/列 处
getpos() 得到光标、位置标记等的位置
setpos() 设置光标、位置标记等的位置
byte2line() 取得某字节位置所在行号
line2byte() 取得某行之前的字节数
diff_filler() 得到一行之上的填充行数目

操作当前缓冲区的文本:
getline() 从缓冲区中取一行
setline() 替换缓冲区中的一行
append() 附加行或行的列表到缓冲区
indent() 某行的缩进
cindent() 根据 C 缩进法则的某行的缩进
lispindent() 根据 Lisp 缩进法则的某行的缩进
nextnonblank() 查找下一个非空白行
prevnonblank() 查找前一个非空白行
search() 查找模式的匹配
searchpos() 寻找模式的匹配
searchpair() 查找 start/skip/end 配对的另一端
searchpairpos() 查找 start/skip/end 配对的另一端
searchdecl() 查找名字的声明

系统调用及文件操作:
glob() 展开通配符
globpath() 在几个路径中展开通配符
findfile() 在目录列表里查找文件
finddir() 在目录列表里查找目录
resolve() 找到一个快捷方式所指
fnamemodify() 改变文件名
pathshorten() 缩短路径里的目录名
simplify() 简化路径,不改变其含义
executable() 检查一个可执行程序是否存在
filereadable() 检查一个文件可读与否
filewritable() 检查一个文件可写与否
getfperm() 得到文件权限
getftype() 得到文件类型
isdirectory() 检查一个目录是否存在
getfsize() 取得文件大小
getcwd() 取得当前工作路径
haslocaldir() 检查当前窗口是否使用过 |:lcd|
tempname() 取得一个临时文件的名称
mkdir() 建立新目录
delete() 删除文件
rename() 重命名文件
system() 取得一个 shell 命令的结果
hostname() 系统的名称
readfile() 读入文件到一个行列表
writefile() 把一个行列表写到文件里

日期和时间:
getftime() 得到文件的最近修改时间
localtime() 得到以秒计的当前时间
strftime() 把时间转换为字符串
reltime() 得到准确的当前或者已经经过的时间
reltimestr() 把 reltime() 的结果转换为字符串

缓冲区,窗口及参数列表:
argc() 参数列表项数
argidx() 参数列表中的当前位置
argv() 从参数列表中取得一项
bufexists() 检查缓冲区是否存在
buflisted() 检查缓冲区是否存在并在列表内
bufloaded() 检查缓冲区是否存在并已加载
bufname() 取得某缓冲区名
bufnr() 取得某缓冲区号
tabpagebuflist() 得到标签页里的缓冲区列表
tabpagenr() 得到标签页号
tabpagewinnr() 类似于特定标签页里的 winnr()
winnr() 取得当前窗口的窗口号
bufwinnr() 取得某缓冲区的窗口号
winbufnr() 取得某窗口的缓冲区号
getbufline() 得到指定缓冲区的行列表

命令行:
getcmdline() 得到当前命令行
getcmdpos() 得到命令行里的光标位置
setcmdpos() 设置命令行里的光标位置
getcmdtype() 得到当前命令行的类型

quickfix 和位置列表:
getqflist() quickfix 错误的列表
setqflist() 修改 quickfix 列表
getloclist() 位置列表项目的列表
setloclist() 修改位置列表

插入模式补全:
complete() 设定要寻找的匹配
complete_add() 加入要寻找的匹配
complete_check() 检查补全是否被中止
pumvisible() 检查弹出菜单是否显示

折叠:
foldclosed() 检查某一行是否被折叠起来
foldclosedend() 类似 foldclosed() 但同时返回最后一行
foldlevel() 检查某行的折叠级别
foldtext() 产生折叠关闭时所显示的行
foldtextresult() 得到关闭折叠显示的文本

语法和高亮:
hlexists() 检查高亮组是否存在
hlID() 取得高亮组标示
synID() 取得某位置的语法标示
synIDattr() 取得某语法标示的特定属性
synIDtrans() 取得翻译后的语法标示
diff_hlID() 得到 diff 模式某个位置的高亮标示
matcharg() 得到 |:match| 参数的相关信息

拼写:
spellbadword() 定位光标所在或之后的错误拼写的单词
spellsuggest() 返回建议的拼写校正列表
soundfold() 返回 "发音相似" 的单词等价形式

历史记录:
histadd() 在历史记录中加入一项
histdel() 从历史记录中删除一项
histget() 从历史记录中提取一项
histnr() 取得某历史记录的最大索引号

交互:
browse() 显示文件查找器
browsedir() 显示目录查找器
confirm() 让用户作出选择
getchar() 从用户那里取得一个字符输入
getcharmod() 取得最近键入字符的修饰符
input() 从用户那里取得一行输入
inputlist() 让用户从列表里选择一个项目
inputsecret() 从用户那里取得一行输入,不回显
inputdialog() 从用户那里取得一行输入,使用对话框
inputsave() 保存和清除预输入 (typeahead)
inputrestore() 恢复预输入 (译注:参阅 input())

GUI:
getfontname() 得到当前使用的字体名
getwinposx() GUI Vim 窗口的 X 位置
getwinposy() GUI Vim 窗口的 Y 位置

Vim 服务器:
serverlist() 返回服务器列表
remote_send() 向 Vim 服务器发送字符命令
remote_expr() 在 Vim 服务器内对一个表达式求值
server2client() 向一个服务器客户发送应答
remote_peek() 检查一个服务器是否已经应答
remote_read() 从一个服务器读取应答
foreground() 将一个 Vim 窗口移至前台
remote_foreground() 将一个 Vim 服务器窗口移至前台

窗口大小和位置:
winheight() 取得某窗口的高度
winwidth() 取得某窗口的宽度
winrestcmd() 恢复窗口大小的返回命令
winsaveview() 得到当前窗口的视图
winrestview() 恢复保存的当前窗口的视图

杂项:
mode() 取得当前编辑状态
visualmode() 最近一次使用过的可视模式
hasmapto() 检查映射是否存在
mapcheck() 检查匹配的映射是否存在
maparg() 取得映射的右部 (rhs)
exists() 检查变量,函数等是否存在
has() 检查 Vim 是否支持某特性
changenr() 返回最近的改变号
cscope_connection() 检查有无与 cscope 的连接
did_filetype() 检查某文件类型自动命令是否已经使用
eventhandler() 检查是否在一个事件处理程序内

libcall() 调用一个外部库函数
libcallnr() 同上,但返回一个数值

getreg() 取得寄存器内容
getregtype() 取得寄存器类型
setreg() 设定寄存器内容及类型

taglist() 得到匹配标签的列表
tagfiles() 得到标签文件的列表
 

类别:Linux||添加到搜藏 |分享到i贴吧|浏览(1336)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu