Vim Tips Wiki

Integrate gvim with Visual Studio

1,610pages on
this wiki
Revision as of 21:35, March 7, 2013 by Fritzophrenic (Talk | contribs)

Tip 683 Printable Monobook Previous Next

created 2004 · complexity intermediate · author Jon Heiner · version 6.0

On Windows systems, there are several ways to integrate Vim with Microsoft Visual Studio.

Integration of Vim with Visual Studio 2003 and later

Control Visual Studio from Vim

Script visual_studio.vim includes features:

  • Compatible with Visual Studio 2003, 2005, 2008, and 2010
  • Control Visual Studio from within Vim.
  • Load the current Visual Studio file into Vim.
  • Load the current Vim file into Visual Studio.
  • Compile the current file (C/C++) within Vim.
  • Build the current project (C/C++/C#) within Vim.
  • Load results from Visual Studio into the Vim quickfix file.

Note this plugin has an issue on some systems with not being able to find the required pywin32 DLLs, but the easy workaround is to copy these DLLs over to the Python directory. See

Making Visual Studio's editor work like Vim

ViEmu for Visual Studio is commercial software that emulates Vim editing commands within Visual Studio (Vim is not used).

VsVim is an open source Vim emulator (code at ). It is only available for all editons of Visual Studio 2010 and 2012 excluding Express Edition, and as with viemu does not use Vim.

Vim as an external tool

If you like Vim and use MS Visual Studio .NET for debugging and want a lightweight way to open the file you're currently debugging in VS in Vim, you can add Vim as an external tool. This will let you use a single keystroke to open the current VS file in vim with the cursor at the same line and even at the same column.

The Tool: In Visual Studio, Tools > External Tools > Add:

  • Title: &Vim
  • Command: C:\Vim\vim73\gvim.exe
  • Arguments: --servername VimStudio --remote-silent +"call cursor($(CurLine),$(CurCol))" "$(ItemFileName)$(ItemExt)"
  • Initial directory: $(ItemDir)

If you have other settings you'd like to apply (like normal zz to centre the cursor or updating path for :find, then you can put them in $HOME/vimfiles/visualstudioinvoke.vim and add +"runtime visualstudioinvoke.vim" before $(ItemFileName). $HOME is either the %HOME% environment variable if one is defined, or Vim determines an appropriate directory which you can see by doing :echo $HOME within Vim.

The Shortcut: In Visual Studio, Tools -> Options -> Environment -> Keyboard:

  • Command: ExternalCommand1 (it's easiest if you move your Vim external tool to be the first, otherwise use the correct index).
  • Shortcut key: F1

This will allow you to use your key combination to open the current file at the current line and cursor in a new vim browser. The browser will start at the directory of that file, so ':e .' will edit the directory of that file.

Remove the --servername VimStudio part if you want it to open a new instance of Vim each time.

Preventing Nagging: In order to effectively use the two together and make sure .NET does not complain about its files changing, goto Tools > Options > Environment > Documents and ensure these two options are checked:

  • Detect when file is changed outside the environment.
  • Auto-load changes (if not currently modified inside the environment).

In your visualstudioinvoke.vim, enable autoread so vim will update files when they're modified in Visual Studio:

set autoread

See Use Vim like an IDE for some useful plugins to help you stay in Vim longer.

Using old versions of Vim

Note: Only old versions of Vim include sendtovim.exe.

The Tool: In Visual Studio, Tools > Customize > Tools:

  • Title: &Vim
  • Command: C:\Vim\vim51\sendtovim.exe
  • Arguments: <c-z>:cd $(FileDir)<CR>:e $(FilePath)<CR>:$(CurLine)<CR>
  • Initial directory: $(FileDir)

Note: <c-z> brings gvim to foreground - on win2k, gvim gets focus but won't bring itself to foreground otherwise. You can remove it if you don't have this bring-to-foreground problem.

Visual Studio 2010

These arguments work better as for some reason the above ones break.

  • Arguments: --remote-silent +"call cursor($(CurLine),$(CurCol))" $(ItemFileName)$(ItemExt)

Opening Vim file in Visual Studio

Much like Vim's --remote, you can run devenv with the edit parameter to open a file in an existing Visual Studio. This command abbreviation opens the file you are currently editing, but doesn't transfer line or column postition.

:cabbrev vsedit :!"c:\Program Files\Microsoft Visual Studio 8\Common7\ide\devenv.exe" /edit "%"

See also Using DDE to open the current Vim file in Visual Studio.

Use Vim instead of Visual Studio's editor

This is not the same as Embedding vim in Visual Studio.

  • Open a solution in VS.Net.
  • In the solution explorer (View->Solution or Ctrl + R), you should see a list of files (click on the "Solution Explorer" tab if you do not see the file list).
  • Right click on any of the files and choose "Open With...", this brings up the Open With dialog.
  • Click on "Add..." this brings up the Add Program dialog.
  • Click on "Browse..." and point the Browse dialog to your gvim location.
  • You have now added gvim to the list of editors, you may also select gvim to be the default editor for that file type.

You may need to do this for all file types you wish to edit with gvim. And yes you still have VS.Net open the file in its own editor.

Of course if you want to reverse changes simply remove gvim from the list of editors; but why would you want to do that?

Window size opens the window in the middle of the screen and at the location and size of the its "source pane". How can I adjust where and of what size is the vim window when it opens? You can control your window size in your vimrc:

winpos 33 0
set lines=100

You can restrict this to files of a certain type by adding the above lines to a .vim file in your ftplugin directory. (For example in ~/.vim/ftplugin/cpp.vim for c++ files in visual studio.)

Editing in a single Vim

If VS.Net insists on opening each file in a new vim window, you may be able to force it to open each file in the same window by using a batch file instead of gvim to use vim's server-client functionality. Try this:

pathtovim\gvim.exe --servername VimStudio --remote-silent %*

Integration of Vim with pre-2003 versions of Visual Studio

Compiling from Vim

If you use nmake, you can use compiler msvc to set Vim's errorformat and makeprg for Visual C++. Use compiler cs for C#.

See also



Advertisement | Your ad here

Around Wikia's network

Random Wiki