Up: 目次   [Index]


Win32 の OLE オートメーション

*if_ole.txt*    For Vim バージョン 8.1.  Last change: 2019 May 05


                  VIMリファレンスマニュアル    by Paul Moore

Vim への OLE インターフェイス

1. アクティブにする|ole-activation|
2. メソッド|ole-methods|
3. "normal" コマンド|ole-normal|
4. 登錄|ole-registration|
5. MS Visual Studio との統合|MSVisualStudio|

{Vim が |+ole| 機能付きでコンパイルされたときのみ利用できる。src/if_ole.INSTALL を參照}

代はりにクライアント、サーバー型の通信を使ふこともできる |clientserver|。

1. アクティブにする

Vim は、あらゆるオートメーションクライアント、例へば Visual Basic, Python, Perl などからアクセス可能な、OLE オートメーションサーバーとして振舞ふ。Vim アプリケーションの "名前" (これは OLE 用語で言ふところの "ProgID") は、"Vim.Application" である。

したがつて、Vim のインスタンスを起動する (あるいはすでに起動してゐるインスタンスに接續する) には、次のやうなコードが用ゐられることになる:

[Visual Basic]
Dim Vim As Object
Set Vim = CreateObject("Vim.Application")
[Python]
from win32com.client.dynamic import Dispatch
vim = Dispatch('Vim.Application')
[Perl]
use Win32::OLE;
$vim = new Win32::OLE 'Vim.Application';
[C#]
// プロジェクトに VIM への參照を追加する。
// COM タブを選擇する。
// "VIM Ole Interface 1.1 Type Library" を選擇する。
Vim.Vim vimobj = new Vim.Vim();

Vim は、他の一部の OLE サーバーがサポートしてゐるやうな、"hidden" な OLE サーバーとしての機能をサポートしてゐない。クライアントが Vim のインスタンスを起動する場合、そのインスタンスは卽座に可視化される。單に Vim インスタンスとの OLE 接續を閉ぢるだけでは、Vim インスタンスを終了するに十分ではない - 明確に終了コマンド (例へば、:qa!, :wqa) を實行する必要がある。

2. メソッド

Vim はクライアントに對して 4 つのメソッドを公開してゐる。

SendKeys(keys)

一聯のキー操作を實行する。

このメソッドはひとつの引數、キーストロークの文字列、を取る。これらのキーストロークは、完全にキーボードから打ち込まれたもののやうに實行される。スペシャルキーは、マッピングの右側に書かれる、<...> 形式の名前で與へることができる。

Note:
Ex "normal" コマンドの實行はサポートされてゐない - 以下の |ole-normal| を見よ。

例 (Visual Basic の文法)

Vim.SendKeys "ihello<Esc>"
Vim.SendKeys "ma1GV4jy`a"

これらの例は、Vim がノーマルモードで始まるものと假定してゐる。必ずノーマルモードにするには、一聯のキーを次のやうに CTRL-\ CTRL-N で始めるとよい

Vim.SendKeys "<C-\><C-N>ihello<Esc>"

CTRL-\ CTRL-N は、插入モード、コマンドラインモードにゐるとき、Vim をノーマルモードに戾す。

Note:
これらは Vim コマンドの途中に入れると機能しないことに注意せよ。

Eval(expr)

式(expr)を實行する。

このメソッドはひとつの引數、Vim 標準フォーマットの式、を取る (|expression| を參照)。戾り値は、その式を評價した結果の文字列である。リスト |List| は文字列に變換される。そのとき各要素の閒に改行が插入され、連結される。

例 (Visual Basic の文法で)

Line20 = Vim.Eval("getline(20)")
Twelve = Vim.Eval("6 + 6")              ' これが文字列であることに注意
Font = Vim.Eval("&guifont")
SetForeground()

Vim ウィンドウを最前面に持つてくる。

このメソッドは引數を持たない。戾り値はない。

例 (Visual Basic の文法で)

Vim.SetForeground
GetHwnd()

Vim のウィンドウハンドルを得る。

このメソッドは引數を持たない。戾り値は Vim ウィンドウのウィンドウハンドルである。これは Vim ウィンドウに對して何かの操作を行ひたい時に使ふ。

例 (Visual Basic の文法で)

Vim_Hwnd = Vim.GetHwnd

3. "normal" コマンド

Vim が OLE オートメーションコマンドを處理する方法は、ex コマンド :normal の實裝と統合されてゐるため、OLE オートメーションから :normal コマンドを實行することはできない。實際に實行しようとしても失敗する、たぶん害はないと思はれるが、豫期しない動作をする恐れはある。

この狀況をトラップする現實的な方法は今のところ存在しないため、ユーザーはこの制限に單に氣をつけるやうにする他ない。

4. 登錄

Vim を OLE サーバーとして動作させる前に、システムレジストリに登錄する必要がある。これを行ふには、Vim をひとつの引數 "-register" で實行すればよい。

gvim -register

OLE サーバーが登錄されてゐないとき、OLE をサポートした gvim を起動すると警告ダイアログが出る。"Yes" を選擇するとレジストリに登錄できる。

レジストリが書き込み可能でないときには登錄はできない。もし登錄できないときは "Administrator" 權限で gvim を起動すること。

いつたん Vim が登錄されると、アプリケーションへのパスはレジストリに保存される。Vim を移動、削除、更新する前に、レジストリの項目を "-unregister" スイッチを使つて削除する必要がある。

gvim -unregister

OLE メカニズムは、登錄された Vim の內、最初に見つけたものを使用する。Vim がすでに實行されてゐる場合は、その Vim が使用される。OLE コマンドに影響されないで、(いくつかの) Vim セッションを張らうとする場合は、非 OLE バージョンを違ふディレクトリに置いて使用するとよい。そして、OLE バージョンをパスに含まれないディレクトリに置けば、"gvim" とタイプしたとき非 OLE バージョンが起動するやうになる。

結果を表示するメッセージボックスを表示したくないなら "-silent" を付けること。

gvim -silent -register
gvim -silent -unregister

5. MS Visual Studio との統合

OLE バージョンにより、Microsoft Visual Studio のエディタとして Vim を實行することができる。これは "VisVim" と呼ばれる。これは OLE バージョンを含んだアーカイブに同梱されてゐる。ドキュメントは、ランタイムディレクトリに置かれてゐる README_VisVim.txt ファイルにある。

Vim と Visual Studio.Net を連携させる

.Net studio は外部エディタをサポートしてゐるので、.Net では VisVim は必要ない。次のやうにするとよい:

.Net Studio でメニューから [ツール] → [外部ツール] を選擇する。

次を追加する

タイトルVim
コマンドc:\vim\vim63\gvim.exe
引數--servername VS_NET’ ‘--remote-silent’ "+call cursor($(CurLine), $(CurCol))" $(ItemPath)
初期ディレクトリ

かうしておくと .Net でファイルを開いたとき、.Net のメニューから [ツール] → [Vim] を選べるやうになる。

それを選ぶとそのファイルが Vim で開かれる。

この外部コマンドをアイコンにして好きなところに置くことができる。これをデフォルトのエディタに設定することもできる。

もしこれをさらに改良できたら、それを留めておけるやうに Vim メーリングリストに投稿していただきたい。

--servername VS_NET

この引數をつけると、VS_NET といふ名前で新しい Vim インスタンスを作る。そのため、VS で複數のファイルを開いても、同じ Vim のインスタンスが使はれる。これによつて複數の Vim のインスタンスを起動し、かつどのインスタンスが VS のファイルを開いてゐるかを管理することができる。

--remote-silent’ "+call cursor(10, 27)"

カーソルを 10 行 27 桁に移動する

より詳しくは Vim 內で

:h --remote-silent

[.Net の部分は Dave Fishburn と Brian Sturk によつて提供された]


Up: 目次   [Index]