Vim Tips Wiki
Advertisement

Duplicate tip

This tip is very similar to the following:

These tips need to be merged – see the merge guidelines.

Tip 1440 Printable Monobook Previous Next

created December 14, 2006 · complexity basic · author Xu Song · version n/a


Many text editors automatically launch new files in tabs, rather than use a separate window for each new file. Here's how to make Vim behave that way under Microsoft Windows.

Using file associations

To automatically open a file in a Vim tab with a double-click or other "Open" action, you need to set up file associations. Open a command prompt window (Start, Run cmd.exe). This example uses C source-code files – modify the commands for whatever file types you want. At command prompt, type (you may need to change the path to suit your system):

ftype code="C:\Program Files\Vim\vim72\gvim.exe" --remote-tab-silent "%1"
assoc .c=code
assoc .h=code

Now, double-clicking on .c or .h files will open them in tabs in a single instance of gvim.

To make Vim the editor for all text file types (as defined by MS Windows) try

ftype txtfile="C:\Program Files\Vim\vim72\gvim.exe" --remote-tab-silent "%1"

Using the Windows Send To menu

Obviously you can't enter file associations for every file you'll ever open in Vim. To provide an "open in tabs" capability for files without an association, you can add an entry to your "Send To" context menu, as follows:

  1. Click Start, Run then type SendTo and press Enter. If the Profile path for your user name has been changed, you may need to run %USERPROFILE%\SendTo rather than just SendTo. For Vista go to %APPDATA%\Microsoft\Windows\SendTo.
  2. The SendTo directory should now be open. It contains the shortcuts in your Send To context menu. Right-click the SendTo window and add a new shortcut to gvim.
  3. Edit the 'Target' box in the Properties of the gvim shortcut to read (you may need to change this for your path to gvim):
    "C:\Program Files\Vim\vim71\gvim.exe" --remote-tab-silent
    .

In Windows Explorer, right-click one or more files, and select Send To, gvim in the context menu. You can repeat this to open other files in new tabs in the same Vim instance.

Using different gvim instances for different file types

If wanted, you can define file associations so that certain file types are opened in one instance of gvim, while others are opened in a different instance.

For example, the following will cause .log and .txt files to be opened in an instance of gvim named TXTVIM, while .c and .h files would be opened in another instance using the code example given earlier.

ftype txtfile="C:\Program Files\Vim\vim71\gvim.exe" --servername TXTVIM --remote-tab-silent "%1"
assoc .log=txtfile
assoc .txt=txtfile

SendTo menu items for specific Vim instances can be created in the same way, by adding a --servername option before the --remote-tab-silent in the target for the shortcut created in the section above.

Note that the .txt extension defaults to the txtfile association on Windows. In fact, many extensions are already associated with txtfile, so just setting the ftype as above will automatically set the correct behavior for several filetypes, more of which (such as .log) can be added with assoc as shown.

To see a list of current associations on your system, type assoc with no arguments in a cmd window. Or, for easier viewing, read the list into Vim with

:r !assoc

See also

Comments

Windows 7 (and Vista too, I believe) has per-user associations that override the global associations. This seems to be a bit messy, ftype/assoc had no effect for me because I had already chosen to open .c files with VIM through Windows Explorer. The solution was to search for ".c" in the registry and delete a key named ".c" somewhere in HKEY_CURRENT_USER, then use ftype/assoc.

Ugh, I did not know that. This sounds like the same keys which you can use intentionally to set up user-specific associations on any modern Windows. Arguably Windows is doing The Right Thing by setting them up on a per-user basis by default. But they should also have modified ftype and assoc to do the same thing.
If you're on a multi-user system, you might consider using the registry keys I just linked to rather than using ftype and assoc, rather than just deleting them.
--Fritzophrenic 14:14, September 8, 2011 (UTC)

If the above tips don't seem to work, take a look at VimTip1225. I had to make some additional regedits


An annonymous user added the following below #Using file associations:

Using the Windows Open or Double-Click to open files in gvim tabs

To provide an "open in tabs" capability for files without an association on Double-Click or Open menu one need to edit registry as follows:

  1. Click Start, Run then type regedit and press Enter.
  2. Edit the registry HKEY_CLASSES_ROOT\Applications\gvim.exe\open\command and set the Value Data to
    C:\Program Files\Vim\vim72\gvim.exe --remote-tab-silent "%1"
    The path might need to be modified for the location of gvim on your machine.

In Windows Explorer, double-click one or more files and they should open in tabs in gvim!

I'm OK with this content (if it works) but it needs explanation. How does it work? Why would you want to use this instead of file associations? What does it do? Does it launch ALL files in Vim, or just files without an association already set up?

It also needs a better, more descriptive title. The file associations method also allows you to double-click or use the "open" context menu item to open a file, what does this method do differently?

Finally, it has become our practice, when suggesting a registry edit, to place the Registry Warning template before the suggested registry tweak. Do this simply by adding {{RegistryWarning}} prior to the registry entry instructions.

Thanks for the addition, annonymous user, please feel free to help fix it up!

--Fritzophrenic 16:14, November 6, 2009 (UTC)

Advertisement