*if_ruby.txt*	For Vim バージョン 9.1.  Last change: 2025 Nov 09


		  VIM リファレンスマニュアル	by Shugo Maeda


Rubyインターフェイス					*ruby* *Ruby*


1. コマンド			|ruby-commands|
2. Vimモジュール		|ruby-vim|
3. Vim::Buffer オブジェクト	|ruby-buffer|
4. Vim::Window オブジェクト	|ruby-window|
5. グローバル変数		|ruby-globals|
6. rubyeval() Vim 関数		|ruby-rubyeval|
7. 動的ローディング		|ruby-dynamic|

			*E266* *E267* *E268* *E269* *E270* *E271* *E272* *E273*

{Vim が |+ruby| 機能付きでコンパイルされている場合にのみ利用できる}

Rubyのホームページは http://www.ruby-lang.org/ である。ここでRubyをダウンロー
ドできる。

==============================================================================
1. コマンド						*ruby-commands*

							*:ruby* *:rub*
:rub[y] {cmd}		Rubyのコマンド{cmd}を実行する。次のようにして使う: >
				:ruby print "Hello"

:rub[y] << [trim] [{endmarker}]
{script}
{endmarker}
			Rubyスクリプト{script}を実行する。

			[endmarker]が省略された場合、|:append|や|:insert|コマ
			ンド同様にドット '.' がデフォルトである。詳細について
			は |:let-heredoc| を参照。

			この形式の|:ruby|コマンドは主にVim scriptにRubyコード
			を埋め込むのに便利である。

			Note: Ruby のサポートを有効にしてコンパイルされていな
			いとこのコマンドは機能しない。エラーを回避するには
			|script-here| を参照。

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
<
使っている Ruby のバージョンを見るには: >
	:ruby print RUBY_VERSION
<

						*:rubydo* *:rubyd* *E265*
:[range]rubyd[o] {cmd}	[range]の範囲の各行に対し、行末の<EOL>を削除して$_へ代
			入しつつ、Rubyコマンド{cmd}を実行評価する。$_を変更す
			るとバッファのテキストを変更できるが、このコマンドを
			使って行を追加したり削除したりはできないことに注意。
			[range]を省略した場合ファイル全体が対象: "1,$"

							*:rubyfile* *:rubyf*
:rubyf[ile] {file}	ファイル{file}のRubyスクリプトを実行する。ファイル名の
			補完が利用できる以外は、`: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-blob*
Vim::blob({arg})
	{arg}から |Blob| リテラル文字列を返す。

							*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|参照)。実行結果は次のように返される:
	- Vimの実行結果が number の場合は Integer
	- Vimの実行結果が float の場合は Float
	- Vimの実行結果が string の場合は String
	- Vimの実行結果がVimの list の場合は Array
	- Vimの実行結果がVimの dictionary の場合は Hash
	辞書とリストは再帰的に展開される。

==============================================================================
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		カーソルの位置を[行数, カラム]の形で配列にして返す。
		最初の行番号は 1 で、最初の桁番号は 0 である。
cursor = [{row}, {col}]
		カーソルの位置を{row} 行の {col}カラムに設定する。

==============================================================================
5. グローバル変数					*ruby-globals*

2つのグローバル変数がある。

$curwin		現在のウィンドウオブジェクト
$curbuf		現在のバッファオブジェクト

==============================================================================
6. rubyeval() Vim 関数					*ruby-rubyeval*

双方向インターフェイスを促進するため、|rubyeval()| 関数を使用して Ruby 式を評
価しそれらの値を Vim script に渡すことができる。

Ruby の値 "true", "false" および "nil" は、それぞれ v:true, v:false および
v:null に変換される。

==============================================================================
7. 動的ローディング					*ruby-dynamic*

MS-WindowsとUnixではRubyライブラリを動的に読み込むことが可能である。これを行う
と|:version|の出力に|+ruby/dyn|が含まれるようになる。

この場合、Vimは必要になったときだけRubyのDLLファイル及び共有ライブラリを検索す
る。Rubyインターフェイスを使わないのであればそれらは必要ではないので、ライブラ
リファイルがシステムに無くてもVimを使うことができる。


MS-Windows ~

これが動作するためには Ruby の適切なバージョンがインストールされている必要があ
る。次の場所からパッケージをダウンロードできる:
http://rubyinstaller.org/downloads/
現在のパッケージは rubyinstaller-2.2.5.exe である。
http://www.garbagecollect.jp/ruby/mswin32/en/download/release.html

Rubyインターフェイスを使うにはRubyのDLLが検索パス内に存在しなければならない。
コンソールウィンドウで "path" とタイプすると、どのディレクトリが検索パスとなる
か表示することができる。また 'rubydll' オプションを Ruby の DLL を指定するのに
使うこともできる。

DLLの名前はVimをコンパイルした時のRubyのバージョンに一致しなければならない。現
在その名前は "msvcrt-ruby220.dll" である。これはRuby 2.2.X用である。これを確か
めるには、"gvim.exe" を開き、"ruby\d*.dll\c" を検索する。

自分で RubyInstaller 1.9 または 2.X 対応の Vim を MSVC でビルドするには、ちょっ
としたこつが必要である。詳細は src/INSTALLpc.txt を参照。

Vim が RubyInstaller 2.4 以降でビルドされているなら、環境変数 PATH に
"C:\Ruby<version>\bin\ruby_builtin_dlls" を追加する必要があるかもしれない。


Unix ~

コンパイル時に DYNAMIC_RUBY_DLL で指定されたファイルの代わりに、'rubydll' オプ
ションを使って Ruby の共有ライブラリファイルを指定するのに使える。共有ライブラ
リのバージョンは Vim をコンパイルする時に用いた Ruby のバージョンと一致してい
なければならない。

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