Is there a shortcut to move between header and source file in VC++?

Visual C++Keyboard Shortcuts

Visual C++ Problem Overview


This is a feature I have grown accustomed to in Eclipse (Ctrl+Tab). Is there an equivalent in Visual C++?

Visual C++ Solutions


Solution 1 - Visual C++

In Visual Studio 2013 and later there is a default keyboard shortcut for this: Ctrl+K, Ctrl+O (You will need to hold down Ctrl and type ko and then release Ctrl)

In earlier versions, see:

Visual Studio Macro to switch between CPP and H files

or

Open Corresponding File in Visual Assist

Solution 2 - Visual C++

In Visual Studio 2013 a default keyboard shortcut for this is Ctrl+K, Ctrl+O

Solution 3 - Visual C++

You could add this macro to your VS config (via Tools -> Macros -> Macro Explorer) then assign a hotkey to it (via Tools -> Options -> Environment -> Keyboard).

I only just wrote it (been meaning to try this for ages!) but it seems to work so far, in both VS2008 and VS2010.

Since it's a macro you can edit it to include whatever rules you want (e.g. looking in other folders, or special naming rules if you have a single header shared by multiple cpp files or similar).

Here's the macro (I'm sure it could be better written; I'm unfamiliar with the VS objects and only realised macros were using .Net about half-way through writing the thing :)):

Sub FileSwitch()
    Try
        Dim CurrentPath As String = DTE.ActiveDocument.FullName
        Dim OtherPath As String

        If (IO.Path.HasExtension(CurrentPath)) Then
            Dim CurrentExtension As String = IO.Path.GetExtension(CurrentPath)

            Select Case CurrentExtension
                Case ".h", ".hpp", ".hxx"
                    OtherPath = IO.Path.ChangeExtension(CurrentPath, ".cpp")
                    If (Not IO.File.Exists(OtherPath)) Then
                        OtherPath = IO.Path.ChangeExtension(CurrentPath, ".c")
                        If (Not IO.File.Exists(OtherPath)) Then
                            OtherPath = IO.Path.ChangeExtension(CurrentPath, ".cxx")
                        End If
                    End If
                Case ".cpp", ".c", ".cxx"
                    OtherPath = IO.Path.ChangeExtension(CurrentPath, ".h")
                    If (Not IO.File.Exists(OtherPath)) Then
                        OtherPath = IO.Path.ChangeExtension(CurrentPath, ".hpp")
                        If (Not IO.File.Exists(OtherPath)) Then
                            OtherPath = IO.Path.ChangeExtension(CurrentPath, ".hxx")
                        End If
                    End If
                Case Else
            End Select
            If (OtherPath <> Nothing) Then
                DTE.ItemOperations.OpenFile(OtherPath)
            End If
        End If

    Catch ex As System.Exception
        MsgBox(ex.Message)
    End Try
End Sub

Here's a (very wide :)) screenshot showing what the macro editor and hotkey/options dialogs should look like, to help those not familiar with them:

enter image description here

Solution 4 - Visual C++

Try PhatStudio. It's free and comes with an easy installer.

  • ALT + S = Switch between header/source file

  • ALT + O = Open a file (supports instant search via typing, like the start menu in Windows Vista/7).

Solution 5 - Visual C++

Try Visual Assist, which sports this very feature (amongst others):

http://www.wholetomato.com/

The code browsing functionality -- of which the header/cpp swap is one part -- are really good.

(I also really rated its intellisense and refactoring features, but not everybody I've spoken to has agreed with me.)

EDIT: just remembered, the Nifty Solution Plugin also does this -- plus another handly Visual Assist-like thing, though nothing else -- and they're free:

http://code.google.com/p/niftyplugins/

(The guy's perforce plugin is great, too. Much better than the default VSSCC rubbish.)

Solution 6 - Visual C++

In Visual Studio 2008 and 2010, you can right click in your .cpp file and choose Go To Header File ... that will take you in one direction. For the other direction, if you right click something you're declaring in the header, and choose Go To Definition, that will take you in the other direction. You might have to go through an ambiguity resolution dialog if you choose the constructor, because the function name matches the class name, but if you choose anything else, you'll go straight where you want. I know this is a two-click approach, rather than one keystroke, but it does do what you want.

Solution 7 - Visual C++

If you position your mouse over a function declaration in the header and press F12, the cpp file will be opened at the definition of the cpp file... I use this feature extensively!

Solution 8 - Visual C++

I don't see this answer here, but at least in Visual Studio 2012 (Express included!), you can just assign your own keyboard command to go to the header file (NOTE: Only goes one way -- you can't go back to the source file unfortunately...)

  1. Go to Tools/Options/Environment/Keyboard.
  2. Find the following command: EditorContextMenus.CodeWindow.GoToHeaderFile
  3. Assign whatever key combination you want (Alt-S works)
  4. Profit

Not sure which versions of VS this works in, but it doesn't require any add-ins and seems to do the trick in at least one direction.

Solution 9 - Visual C++

For Visual Studio 2013, as mentioned by others it's the command named:

EditorContextMenus.CodeWindow.ToggleHeaderCodeFile

and it has as default combination of keys: Ctrl+K,Ctrl+O, but it can be changed if you introduce the new combination of keys that you like in the

Press shortcut keys:

under

Tools -> Options -> Environment -> Keyboard.

So you can choose a custom keys combination as my favorite for .h to .cpp switch is Ctrl+Tab.

Solution 10 - Visual C++

Try using Switch - it's an addin that lets you flick between source and header, code and designer, XAML and codebehind etc etc:

http://www.dwmkerr.com/switch/ or directly from Products and Extensions for Visual Studio

Solution 11 - Visual C++

I'm a fan of Visual Assist for doing this. Its not cheap but it provides a lot more functionality than switching between header and source. I also use its open file in project and class browsing features a lot. Of course the macro is free...

Solution 12 - Visual C++

There's also a macro listed on the Whole Tomato support forum which has a few more file mappings.

Solution 13 - Visual C++

Visual assist also does not support Visual studio express editions. So you are stuck with the macro if you are using that IDE>

Solution 14 - Visual C++

In Visual Studio 2008 it's Alt + O.

Solution 15 - Visual C++

In their (in)finite wisdom, MS decided to remove macros in MSVS 2012, so the macro above won't work.

For MSVS 2012, I found this:

http://www.dwmkerr.com/switch/

It's highly configurable + if you want to help improving it, you can do so on GitHub.

Solution 16 - Visual C++

In Visual Studio 2013 it's ALT + O

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJeffVView Question on Stackoverflow
Solution 1 - Visual C++Kyle AlonsView Answer on Stackoverflow
Solution 2 - Visual C++Anton KView Answer on Stackoverflow
Solution 3 - Visual C++Leo DavidsonView Answer on Stackoverflow
Solution 4 - Visual C++TymekView Answer on Stackoverflow
Solution 5 - Visual C++please delete meView Answer on Stackoverflow
Solution 6 - Visual C++Kate GregoryView Answer on Stackoverflow
Solution 7 - Visual C++user206705View Answer on Stackoverflow
Solution 8 - Visual C++aardvarkkView Answer on Stackoverflow
Solution 9 - Visual C++meJustAndrewView Answer on Stackoverflow
Solution 10 - Visual C++Dave KerrView Answer on Stackoverflow
Solution 11 - Visual C++JohnOView Answer on Stackoverflow
Solution 12 - Visual C++sean eView Answer on Stackoverflow
Solution 13 - Visual C++FionView Answer on Stackoverflow
Solution 14 - Visual C++Marek SzanyiView Answer on Stackoverflow
Solution 15 - Visual C++CsimbiView Answer on Stackoverflow
Solution 16 - Visual C++Sagi SulimaniView Answer on Stackoverflow