⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usr_41.cnx

📁 Vim 中文文档
💻 CNX
📖 第 1 页 / 共 4 页
字号:
两字符串是否相等,不计大小写。"!~#" 检查一个模式是否被匹配,同时也考虑大小写。|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 秒。==============================================================================*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> 字符。==============================================================================*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-] 可以跳转至该函数的详细说明。字符串操作:	char2nr()		取得字符的ASCII码值	nr2char()		通过ASCII码值取得一个字符	escape()		将字符串通过 '\' 转义	strtrans()		是一个字符串变成可以打印的格式	tolower()		将一个字符串转换为小写	toupper()		将一个字符串转换为大写	match()			字符串中的模式匹配处	matchend()		字符串中的模式匹配结束处	matchstr()		在一个字符串中匹配一个模式	stridx()		子串在母串中第一次出现的地方	strridx()		子串在母串中最后一次出现的地方	strlen()		字符串长度	substitute()		用一个字符串替换一个匹配的模式	submatch()		取得 ":substitute" 匹配中指定的某个匹配	strpart()		取得字符串的一部分	expand()		展开特殊的关键字	type()			变量的类型	iconv()			转换文本编码格式操作当前缓冲的文本:	byte2line()		取得某字节位置所在行号	line2byte()		取得某行之前的字节数	col()			光标或标记所在的列	virtcol()		光标或标记所在的屏幕列	line()			光标或标记所在行	wincol()		光标所在窗口列	cursor()		置光标于 行/列 处	winline()		光标所在窗口行	getline()		从缓冲中取一行	setline()		替换缓冲中的一行	append()		在第 {lnum} 行下添加文本 {string}	indent()		某行的缩进	cindent()		根据 C 缩进法则的某行的缩进	lispindent()		根据 Lisp 缩进法则的某行的缩进	nextnonblank()		查找下一个非空白行	prevnonblank()		查找前一个非空白行	search()		查找模式的匹配	searchpair()		查找配对的另一端系统调用及文件操作:	browse()		显示文件查找器	glob()			展开通配符	globpath()		在几个路径中展开通配符	resolve()		找到一个快捷方式所指	fnamemodify()		改变文件名	executable()		检查一个个执行程序是否存在	filereadable()		检查一个文件可读与否	filewritable()		检查一个文件可写与否	isdirectory()		检查一个目录是否存在	getcwd()		取得当前工作路径	getfsize()		区的文件大小	getftime()		取得文件的最近修改时间	localtime()		取得当前时间	strftime()		将时间转换为一个字符串	tempname()		取得一个临时文件的名称	delete()		删除文件	rename()		重命名文件	system()		取得一个 shell 命令的结果	hostname()		系统的名称缓冲,窗口及参数列表:	argc()			参数列表项数	argidx()		参数列表中的当前位置	argv()			从参数列表中取得一项	bufexists()		检查缓冲是否存在	buflisted()		检查缓冲是否存在并被列出	bufloaded()		检查缓冲是否存在并已加载	bufname()		取得某缓冲名	bufnr()			取得某缓冲号	winnr()			取得当前窗口的窗口号	bufwinnr()		取得某缓冲的窗口号	winbufnr()		取得某窗口的缓冲号	getbufvar()		取得某缓冲中的变量值	setbufvar()		设定某缓冲中的变量值	getwinvar()		取得某窗口的变量值	setwinvar()		设定某窗口的变量值折叠:	foldclosed()		检查某一行是否被折叠起来	foldclosedend()		类似 foldclosed() 当同时返回最后一行	foldlevel()		检查某行的折叠深度	foldtext()		产生否折叠折起时所显示的行语法加亮:	hlexists()		检查加亮组是否存在	hlID()			取得高亮组标示	synID()			取得某位置的语法标示	synIDattr()		取得某与法表示的特定属性	synIDtrans()		取得翻译后的语法标示历史纪录:	histadd()		在历史纪录中加入一项	histdel()		从历史记录中删除一项	histget()		从历史记录中提取一项	histnr()		取得某历史纪录的最大索引号交互:	confirm()		让用户作出选择	getchar()		从用户那里取得一个字符输入	getcharmod()		取得最近键入字符的修饰符	input()			从用户那里取得一个行输入	inputsecret()		从用户那里取得一个行输入,不回显	inputdialog()		从用户那里取得一个行输入,使用对话框	inputresave()		保存并清除 typeahead	inputrestore()		恢复 typeaheadVim 服务器:	serverlist()		返回服务器列表	remote_send()		向 Vim 服务器发送字符命令	remote_expr()		在 Vim 服务器内对一个表达式求值	server2client()		向一个服务器客户发送应答	remote_peek()		检查一个服务器是否已经应答	remote_read()		从一个服务器读取应答	foreground()		将一个 Vim 窗口移至前台	remote_foreground()	将一个 Vim 服务器窗口移至前台杂项:	mode()			取得当前编辑状态	visualmode()		最近一次使用过的可视模式	hasmapto()		检查映射是否存在	mapcheck()		检查匹配的映射是否存在	maparg()		取得映射的右部 (rhs)	exists()		检查是否存在变量,函数等	has()			检查 Vim 是否支持某特性	cscope_connection()	检查有无与 cscope 的联接	did_filetype()		检查某文件类型自动命令是否已经被使用了	eventhandler()		检查是否在一个事件处理程序内	getwinposx()		GUI Vim 窗口 的 X 位置	getwinposy()		GUI Vim 窗口 的 Y 位置	winheight()		取得某窗口的高度	winwidth()		取得某窗口的宽度	libcall()		调用一个外部库函数	libcallnr()		同上,但返回一个数值	getreg()		取得寄存器内容	getregtype()		取得寄存器类型	setreg()		设定寄存器内容及类型==============================================================================*41.7*	定义一个函数Vim 允许你定义自己的函数。基本的函数声明如下: >	:function {name}({var1}, {var2}, ...)	:  {body}	:endfunction<	Note:(注意)	函数名必须以大写字母开始。让我们来定义一个返回两数中较小者的函数。从下面这一行开始: >	:function Min(num1, num2)这将告诉 Vim 这个函数名叫 "Min" 并且带两个参数: "num1" 和 "num2"。   你要做的第一件事就是看看哪个数值小一些:   >	:  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:", "a:", 或 "s:" 的前缀,都是局部变量。.	Note:(注意)	为了从一个函数内部访问一个全局变量你必须在前面加上 "g:"。因此在一个函	数内 "g:count" 表示全局变量 "count",而 "count" 是另外一个,仅用于该	函数内的局部变量。现在你可以使用 ":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调用用户自定义函数的方式和调用内置函数完全一致。仅仅是函数名不同而已。上面的Min 函数可以这样来使用: >	:echo Min(5, 8)只有这时函数才被 Vim 解释并执行。如果函数中有类似未定义的变量之类的错误,你将得到一个错误信息。这些错误在定义函数时是不会被检测到的。当一个函数执行到 ":endfunction" 或 ":return" 语句没有带参数时,该函数返回零。如果要重定义一个已经存在的函数,在 "function" 命令后加上 !: >	:function!  Min(num1, num2, num3)范 围 的 使 用":call" 命令可以带一个行表示的范围。这可以分成两种情况。当一个函数定义是给出了"range" 关键字时,表示它会自行处理该范围。  Vim 在调用这样一个函数时给给它传递两个参数: "a:firstline" 和 "a:lastline",用来表示该范围所包括的第一行和最后一行。例如: >	:function Count_words() range	:  let n = a:firstline	:  let count = 0	:  while n <= a:lastline	:    let count = count + Wordcount(getline(n))	:  endwhile	:  echo "found " . count . " words"	:endfunction你可以这样调用上面的函数: >	:10,30call Count_words()这个函数将被调用一次并显示字数。   另一种使用范围的方式是在定义函数时不给出 "range" 关键字。Vim 将把光标移动到范围内的每一行,并对该行调用此函数。例如: >	:function  Number()	:  echo "line " . line(".") . " contains: " . getline(".")	:endfunction如果你用下面的方式调用该函数: >	:10,15call Number()它将被执行六次。可 变 参 数Vim 允许你定义参数个数可变的函数。下面的例子给出一个可以有1到20个参数的函数: >	:function Show(start, ...)变量 "a:1" 表示第一个可选的参数,"a:2" 表示第二个,如此类推。变量 "a:0" 表示这些参数的个数。   例如: >	:function Show(start, ...)	:  echohl Title	:  echo "Show is " . a:start	:  echohl None	:  let index = 1	:  while index <= a:0	:    echo "  Arg " . index . " is " . a:{index}	:    let index = index + 1	:  endwhile	:  echo ""	:endfunction上例中 ":echohl" 命令被用来给出接下来的 ":echo" 命令如何加亮输出。":echohl None"终止加亮。":echon" 命令除了不输出行结束符外,和 ":echo" 一样。函 数 列 表":function" 命令列出所有用户自定义的函数及其参数: >	:function<	function Show(start, ...) ~	function GetVimIndent()~	function SetSyn(name) ~如果要查看该函数具体做什么,用该函数名作为 ":function" 命令的参数即可: >	:function SetSyn<	1     if &syntax == '' ~	2       let &syntax = a:name ~

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -