IF_RUBY

*if_ruby.txt*   For Vim version 7.1.  最近更新: 2006年7月


		  VIM 参考手册    by Shugo Maeda
				译者: Willis, tocer
				http://vimcdoc.sf.net

Vim 的 Ruby 接口					*ruby* *Ruby*


1. 命令				|ruby-commands|
2. VIM 模块			|ruby-vim|
3. VIM::Buffer 对象		|ruby-buffer|
4. VIM::Window 对象		|ruby-window|
5. 全局变量			|ruby-globals|
6. 动态调入			|ruby-dynamic|

{Vi 无此功能}
			*E266* *E267* *E268* *E269* *E270* *E271* *E272* *E273*

只有编译 Vim 时加入 |+ruby| 特性才会有 Ruby 接口功能。

ruby 的主页是 http://www.ruby-lang.org/。你可以在那里找到 Ruby 下载的链接。


1. 命令							*ruby-commands*

							*:ruby* *:rub*
:rub[y] {cmd}		执行 Ruby 命令 {cmd}。

:rub[y] << {endpattern}
{script}
{endpattern}
			执行 Ruby 脚本 {script}{endpattern} _不能_有前导空白。如果 {endpattern} 省
			略,缺省为单个句号 '.',类似于 |:append| 和 |:insert|
			命令。这种形式的 |:ruby| 命令主要用于在 vim 脚本里包含
			ruby 代码。
			注意: 如果编译时没有加入 Ruby 特性,这个命令不会工作。
			为了避免错误,参看 |script-here|。

示例 Vim 脚本:

	function! RedGem()
	ruby << EOF
	class Garnet
		def initialize(s)
			@buffer = VIM::Buffer.current
			vimputs(s)
		end
		def vimputs(s)
			@buffer.append(@buffer.count,s)
		end
	end
	gem = Garnet.new("pretty")
	EOF
	endfunction


						*:rubydo* *:rubyd* *E265*
:[range]rubyd[o] {cmd}[range] 界定的每行上分别执行 Ruby 命令 {cmd},执行
			时,$_ 设为相应的行文本,不含结尾的 <EOL>。修改 $_ 就
			会修改相应的行,不过要 注意: 此命令不能用来增加或者删
			除行。
			缺省的 [range] 是整个文件: "1,$"。

							*:rubyfile* *:rubyf*
:rubyf[ile] {file}	执行 Ruby 脚本文件 {file}。这和 ":ruby load 'file'" 相
			当,但可用文件名自动补全功能。


|sandbox| 里不能执行 Ruby 命令。


2. VIM 模块						*ruby-vim*

Ruby 代码通过 "VIM" 模块调用所有的 vim 功能。

概述
	print "Hello"				# 显示消息
	VIM.command(cmd)			# 执行 ex 命令
	num = VIM::Window.count			# 得到窗口行数
	w = VIM::Window[n]			# 得到第 "n" 个窗口
	cw = VIM::Window.current		# 得到当前窗口
	num = VIM::Buffer.count			# 得到缓冲区的个数
	b = VIM::Buffer[n]			# 得到第 "n" 个缓冲区
	cb = VIM::Buffer.current		# 得到当前缓冲区
	w.height = lines			# 设置窗口高度
	w.cursor = [row, col]			# 设置窗口里的光标位置
	pos = w.cursor				# 得到数组 [行, 列]
	name = b.name				# 得到缓冲区的文件名
	line = b[n]				# 得到缓冲区的某一行
	num = b.count				# 得到总的行数
	b[n] = str				# 设置缓冲区的某一行
	b.delete(n)				# 删除某一行
	b.append(n, str)			# 在第 n 行后增加一行
	line = VIM::Buffer.current.line		# 得到当前行
	num = VIM::Buffer.current.line_number	# 得到当前行号
	VIM::Buffer.current.line = "test"	# 设置当前行


模块函数:

							*ruby-message*
VIM::message({msg})
	显示消息 {msg}*ruby-set_option*
VIM::set_option({arg})
	设置 vim 选项。{arg} 可以是任何一个 ":set" 命令接受的命令。 注意 这意
	味着参数里不能有空格!参见 |:set|。

							*ruby-command*
VIM::command({cmd})
	执行 Ex 命令 {cmd}*ruby-evaluate*
VIM::evaluate({expr})
	用 vim 内部的表达式分析器执行 {expr} (参看 |expression|)。返回字符串
	形式的执行结果。
	|List| 通过连接项目并在项目间插入换行符来转化为字符串。


3. VIM::Buffer 对象					*ruby-buffer*

VIM::Buffer 对象代表 Vim 缓冲区。

类方法:

current		返回当前缓冲区对象。
count		返回缓冲区的总数。
self[{n}]	返回第 {n} 个缓冲区。首个缓冲区的序号是 0。

方法:

name		返回缓冲区的名字。
number		返回缓冲区的序号。
count		返回总行数。
length		返回总行数。
self[{n}]	从缓冲区中返回一行。{n} 是行号。
self[{n}] = {str}
		设置缓冲区的一行。{n} 是行号。
delete({n})	删除缓冲区的一行。{n} 是行号。
append({n}, {str})
		在第 {n} 行后增加一行。
line		如果缓冲区激活,返回缓冲区的当前行。
line = {str}    如果缓冲区激活,设置缓冲区的当前行。
line_number     如果缓冲区激活,返回当前行的行号。


4. VIM::Window 对象					*ruby-window*

VIM::Window 对象代表 Vim 窗口。

类方法:

current		返回当前窗口对象。
count		返回窗口的总数。
self[{n}]	返回第 {n} 个窗口。首个窗口的序号是 0。

方法:

buffer		返回显示的缓冲区对象。
height		返回窗口的高度。
height = {n}	设置窗口的高度为 {n}。
width		返回窗口的宽度。
width = {n}	设置窗口的宽度为 {n}。
cursor		返回光标位置数组: [行、列]。
cursor = [{row}, {col}]
		设置光标位置为行 {row} 和列 {col}

5. 全局变量						*ruby-globals*

有两个全局变量。

$curwin		当前窗口对象。
$curbuf		当前缓冲区对象。


6. 动态调入						*ruby-dynamic*

MS-Windows 上,可以动态调入 Ruby 库。|:version| 输出这时应包括 |+ruby/dyn|。

这意味着 Vim 只有在必要时才寻找 Ruby DLL 文件。如果不使用 Ruby 接口,你就不需
要它。这样,即使没有该 DLL 文件,你也可使用 Vim。

要使用 Ruby 接口,Ruby DLL 必须在搜索路径上。控制台窗口里输入 "path" 可以看到
(搜索路径) 当前使用的目录。

DLL 的名字必须匹配 Vim 编译时所使用的 Ruby 版本。目前,该名字为 "ruby18.dll",
也就是 Ruby 1.8。要确信这一点,编辑 "gvim.exe" 文件并查找 "ruby\d*.dll\c"。


 vim:tw=78:ts=8:ft=help:norl:

Generated by vim2html on 2008年 03月 27日 星期四 17:04:45 CST