Vim 可以作为 OLE 服务器运行,从而能被任意的 OLE 客户端访问,例如: 我们可以用
Visual Basic,Python,或者 Perl 与 Vim 通信。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 服务器运行,这一点 Vim 不像其它一些 OLE 服务器。Vim
的 OLE 客户端启动时,会立即启动 Vim 程序实例并使之可见。简单断开 OLE 连接也不
会自动关闭 Vim 实例,为此需要显式地执行退出命令 (如 :qa! 、 :wqa ) 才可以。
在 Vim 能作为 OLE 服务器运行之前,必须先向系统注册。为此,可在运行 Vim 时加上
参数 "-register"。
-register gvim -register
运行 OLE 版本的 gvim 时,如果尚未注册 Vim OLE 服务器,会弹出一个对话框供用户选
择是否注册,选择 "Yes" 注册。
有时候注册可能失败,这可能是因为注册表不可写。如果是这个原因,需要以管理员身份
运行 gvim。
一旦注册,Vim 的路径就会被存储到注册表里。在移动、删除或升级 Vim 之前,应该使
用 "-unregister" 清除这些注册信息。
-unregister gvim -unregister
系统会使用最先注册的 Vim 执行 OLE 命令。如果已有 Vim 在运行,会使用该 Vim 实
例。如果有 (多个) Vim 会话正在运行,但不希望它们响应 OLE 命令,可以使用非 OLE
版本的 Vim,并将其放到别的目录里运行。此时不应把 OLE 版本的 Vim 放在正常搜索路
径中,以确保键入 "gvim" 时启动的是非 OLE 版本。
-silent
如果不想让 Vim 在注册时弹出对话框,可以在前面加 "-silent" 参数:
gvim -silent -register gvim -silent -unregister