*if_ruby.txt*   For Vim version 7.0aa.  Last change: 2004 Mar 14


		  VIM REFERENCE MANUAL    by Shugo Maeda

The Ruby Interface to Vim				*ruby* *Ruby*


1. Commands			|ruby-commands|
2. The VIM module		|ruby-vim|
3. VIM::Buffer objects		|ruby-buffer|
4. VIM::Window objects		|ruby-window|
5. Global variables		|ruby-globals|

{Vi does not have any of these commands}
			*E266* *E267* *E268* *E269* *E270* *E271* *E272* *E273*

The Ruby interface only works when Vim was compiled with the |+ruby| feature.

The home page for ruby is http://www.ruby-lang.org/.  You can find links for
downloading Ruby there.

==============================================================================
1. Commands						*ruby-commands*

							*:ruby* *:rub*
:rub[y] {cmd}		Execute Ruby command {cmd}.

:rub[y] << {endpattern}
{script}
{endpattern}
			Execute Ruby script {script}.
			{endpattern} must NOT be preceded by any white space.
			If {endpattern} is omitted, it defaults to a dot '.'
			like for the |:append| and |:insert| commands. This
			form of the |:ruby| command is mainly useful for
			including ruby code in vim scripts.
			Note: This command doesn't work when the Ruby feature
			wasn't compiled in.  To avoid errors, see
			|script-here|.

Example Vim script: >

	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}	Evaluate Ruby command {cmd} for each line in the
			[range], with $_ being set to the text of each line in
			turn, without a trailing <EOL>. Setting $_ will change
			the text, but note that it is not possible to add or
			delete lines using this command.
			The default for [range] is the whole file: "1,$".

							*:rubyfile* *:rubyf*
:rubyf[ile] {file}	Execute the Ruby script in {file}.  This is the same as
			":ruby load 'file'", but allows file name completion.

Executing Ruby commands is not possible in the |sandbox|.

==============================================================================
2. The VIM module					*ruby-vim*

Ruby code gets all of its access to vim via the "VIM" module.

Overview >
	print "Hello"			# displays a message
	VIM.command(cmd)		# execute an ex command
	num = VIM::Window.count		# gets the number of windows
	w = VIM::Window[n]		# gets window "n"
	cw = VIM::Window.current	# gets the current window
	num = VIM::Buffer.count		# gets the number of buffers
	b = VIM::Buffer[n]		# gets buffer "n"
	cb = VIM::Buffer.current	# gets the current buffer
	w.height = lines		# sets the window height
	w.cursor = [row, col]		# sets the window cursor position
	pos = w.cursor			# gets an array [row, col]
	name = b.name			# gets the buffer file name
	line = b[n]			# gets a line from the buffer
	num = b.count			# gets the number of lines
	b[n] = str			# sets a line in the buffer
	b.delete(n)			# deletes a line
	b.append(n, str)		# appends a line after n
<

Module Functions:

							*ruby-message*
VIM::message({msg})
	Displays the message {msg}.

							*ruby-set_option*
VIM::set_option({arg})
	Sets a vim option.  {arg} can be any argument that the ":set" command
	accepts.  Note that this means that no spaces are allowed in the
	argument!  See |:set|.

							*ruby-command*
VIM::command({cmd})
	Executes Ex command {cmd}.

							*ruby-evaluate*
VIM::evaluate({expr})
	Evaluates {expr} using the vim internal expression evaluator (see
	|expression|). Returns the expression result as a string.

==============================================================================
3. VIM::Buffer objects					*ruby-buffer*

VIM::Buffer objects represent vim buffers.

Class Methods:

current		Returns the current buffer object.
count		Returns the number of buffers.
self[{n}]	Returns the buffer object for the number {n}. The first number
		is 0.

Methods:

name		Returns the name of the buffer.
number		Returns the number of the buffer.
count		Returns the number of lines.
length		Returns the number of lines.
self[{n}]	Returns a line from the buffer. {n} is the line number.
self[{n}] = {str}
		Sets a line in the buffer. {n} is the line number.
delete({n})	Deletes a line from the buffer. {n} is the line number.
append({n}, {str})
		Appends a line after the line {n}.

==============================================================================
4. VIM::Window objects					*ruby-window*

VIM::Window objects represent vim windows.

Class Methods:

current		Returns the current window object.
count		Returns the number of windows.
self[{n}]	Returns the window object for the number {n}. The first number
		is 0.

Methods:

buffer		Returns the buffer displayed in the window.
height		Returns the height of the window.
height = {n}	Sets the window height to {n}.
cursor		Returns a [row, col] array for the cursor position.
cursor = [{row}, {col}]
		Sets the cursor position to {row} and {col}.

==============================================================================
4. Global variables					*ruby-globals*

There are two global variables.

$curwin		The current window object.
$curbuf		The current buffer object.

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