1*if_ole.txt* For Vim version 8.2. Last change: 2019 Dec 07 2 3 4 VIM REFERENCE MANUAL by Paul Moore 5 6 7The OLE Interface to Vim *ole-interface* 8 91. Activation |ole-activation| 102. Methods |ole-methods| 113. The "normal" command |ole-normal| 124. Registration |ole-registration| 135. MS Visual Studio integration |MSVisualStudio| 14 15{only available when compiled with the |+ole| feature. See 16src/if_ole.INSTALL} 17An alternative is using the client-server communication |clientserver|. 18 19============================================================================== 201. Activation *ole-activation* 21 22Vim acts as an OLE automation server, accessible from any automation client, 23for example, Visual Basic, Python, or Perl. The Vim application "name" (its 24"ProgID", in OLE terminology) is "Vim.Application". 25 26Hence, in order to start a Vim instance (or connect to an already running 27instance), code similar to the following should be used: 28 29[Visual Basic] > 30 Dim Vim As Object 31 Set Vim = CreateObject("Vim.Application") 32 33[Python] > 34 from win32com.client.dynamic import Dispatch 35 vim = Dispatch('Vim.Application') 36 37[Perl] > 38 use Win32::OLE; 39 $vim = new Win32::OLE 'Vim.Application'; 40 41[C#] > 42 // Add a reference to Vim in your project. 43 // Choose the COM tab. 44 // Select "Vim Ole Interface 1.1 Type Library" 45 Vim.Vim vimobj = new Vim.Vim(); 46 47Vim does not support acting as a "hidden" OLE server, like some other OLE 48Automation servers. When a client starts up an instance of Vim, that instance 49is immediately visible. Simply closing the OLE connection to the Vim instance 50is not enough to shut down the Vim instance - it is necessary to explicitly 51execute a quit command (for example, :qa!, :wqa). 52 53============================================================================== 542. Methods *ole-methods* 55 56Vim exposes four methods for use by clients. 57 58 *ole-sendkeys* 59SendKeys(keys) Execute a series of keys. 60 61This method takes a single parameter, which is a string of keystrokes. These 62keystrokes are executed exactly as if they had been types in at the keyboard. 63Special keys can be given using their <..> names, as for the right hand side 64of a mapping. Note: Execution of the Ex "normal" command is not supported - 65see below |ole-normal|. 66 67Examples (Visual Basic syntax) > 68 Vim.SendKeys "ihello<Esc>" 69 Vim.SendKeys "ma1GV4jy`a" 70 71These examples assume that Vim starts in Normal mode. To force Normal mode, 72start the key sequence with CTRL-\ CTRL-N as in > 73 74 Vim.SendKeys "<C-\><C-N>ihello<Esc>" 75 76CTRL-\ CTRL-N returns Vim to Normal mode, when in Insert or Command-line mode. 77Note that this doesn't work halfway a Vim command 78 79 *ole-eval* 80Eval(expr) Evaluate an expression. 81 82This method takes a single parameter, which is an expression in Vim's normal 83format (see |expression|). It returns a string, which is the result of 84evaluating the expression. A |List| is turned into a string by joining the 85items and inserting line breaks. 86 87Examples (Visual Basic syntax) > 88 Line20 = Vim.Eval("getline(20)") 89 Twelve = Vim.Eval("6 + 6") ' Note this is a STRING 90 Font = Vim.Eval("&guifont") 91< 92 *ole-setforeground* 93SetForeground() Make the Vim window come to the foreground 94 95This method takes no arguments. No value is returned. 96 97Example (Visual Basic syntax) > 98 Vim.SetForeground 99< 100 101 *ole-gethwnd* 102GetHwnd() Return the handle of the Vim window. 103 104This method takes no arguments. It returns the hwnd of the main Vimwindow. 105You can use this if you are writing something which needs to manipulate the 106Vim window, or to track it in the z-order, etc. 107 108Example (Visual Basic syntax) > 109 Vim_Hwnd = Vim.GetHwnd 110< 111 112============================================================================== 1133. The "normal" command *ole-normal* 114 115Due to the way Vim processes OLE Automation commands, combined with the method 116of implementation of the Ex command :normal, it is not possible to execute the 117:normal command via OLE automation. Any attempt to do so will fail, probably 118harmlessly, although possibly in unpredictable ways. 119 120There is currently no practical way to trap this situation, and users must 121simply be aware of the limitation. 122============================================================================== 1234. Registration *ole-registration* *E243* 124 125Before Vim will act as an OLE server, it must be registered in the system 126registry. In order to do this, Vim should be run with a single parameter of 127"-register". 128 *-register* > 129 gvim -register 130 131If gvim with OLE support is run and notices that no Vim OLE server has been 132registered, it will present a dialog and offers you the choice to register by 133clicking "Yes". 134 135In some situations registering is not possible. This happens when the 136registry is not writable. If you run into this problem you need to run gvim 137as "Administrator". 138 139Once vim is registered, the application path is stored in the registry. 140Before moving, deleting, or upgrading Vim, the registry entries should be 141removed using the "-unregister" switch. 142 *-unregister* > 143 gvim -unregister 144 145The OLE mechanism will use the first registered Vim it finds. If a Vim is 146already running, this one will be used. If you want to have (several) Vim 147sessions open that should not react to OLE commands, use the non-OLE version, 148and put it in a different directory. The OLE version should then be put in a 149directory that is not in your normal path, so that typing "gvim" will start 150the non-OLE version. 151 152 *-silent* 153To avoid the message box that pops up to report the result, prepend "-silent": 154> 155 gvim -silent -register 156 gvim -silent -unregister 157 158============================================================================== 1595. MS Visual Studio integration *MSVisualStudio* *VisVim* 160 161The OLE version can be used to run Vim as the editor in Microsoft Visual 162Studio. This is called "VisVim". It is included in the archive that contains 163the OLE version. The documentation can be found in the runtime directory, the 164README_VisVim.txt file. 165 166 167Using Vim with Visual Studio .Net~ 168 169With .Net you no longer really need VisVim, since .Net studio has support for 170external editors. Follow these directions: 171 172In .Net Studio choose from the menu Tools->External Tools... 173Add 174 Title - Vim 175 Command - c:\vim\vim63\gvim.exe 176 Arguments - --servername VS_NET --remote-silent "+call cursor($(CurLine), $(CurCol))" $(ItemPath) 177 Init Dir - Empty 178 179Now, when you open a file in .Net, you can choose from the .Net menu: 180Tools->Vim 181 182That will open the file in Vim. 183You can then add this external command as an icon and place it anywhere you 184like. You might also be able to set this as your default editor. 185 186If you refine this further, please post back to the Vim maillist so we have a 187record of it. 188 189--servername VS_NET 190This will create a new instance of vim called VS_NET. So if you open multiple 191files from VS, they will use the same instance of Vim. This allows you to 192have multiple copies of Vim running, but you can control which one has VS 193files in it. 194 195--remote-silent "+call cursor(10, 27)" 196 - Places the cursor on line 10 column 27 197In Vim > 198 :h --remote-silent for more details 199 200[.Net remarks provided by Dave Fishburn and Brian Sturk] 201 202============================================================================== 203 vim:tw=78:ts=8:noet:ft=help:norl: 204