Too many tabs open? No problem!

Mads Kristensen

When you have lots of tabs open in Visual Studio, your horizontal screen resolution determines how many will fit the Tab Well. The remaining document tabs won’t be shown unless you enable multi-row tabs. But what if you don’t want to lose the coding space multi-row tabs take up, and still need an easier way to get an overview of all your open documents? Here’s how we might fix it and we need your help!

Image Scroll Tabs v3

You might already be familiar with the experience of hovering over tabs and using the mouse wheel to scroll through them in some browsers and other applications. The Custom Document Well extension brought this feature in Visual Studio in older versions, but the extension was discontinued years ago due to changes in the architecture of Visual Studio itself. Mouse wheel scrolling wasn’t built in after this change due to several reasons, and the feature had to be reimagined to properly function under this new architecture.

For many years, Visual Studio has used a different method to show all open document tabs. Click the chevron on the right of the Tab Well to see the full list.

Image Scroll Tabs file list v1
Figure: Animation showing how to open the open document list

And more recently in Visual Studio 2022, the concept of multi-row tabs was introduced. It allows you to spread all your open document tabs onto multiple rows, so each tab is always visible.

Image Scroll Tabs multi row toggle v2
Figure: Animation showing how to toggle multi-row tabs on and off

However, we’ve noticed that a feature request for using the mouse scroll wheel has been gaining steam recently. Please vote and comment if you agree.

In conversations with the users that have requested this feature, we’ve heard the following:

  1. It’s too cumbersome to get an overview of all open tabs
  2. I don’t want to enable multi-row tabs while coding because it takes up vertical space
  3. I got muscle memory using the scroll wheel on tabs from other apps

So, with increased interest and a better understanding of the root problems, what would the right solution look like for Visual Studio users? One that would complement the existing features in Visual Studio.

Let’s do an experiment and find out!

The experiment

We’re starting out with an extension to kick off the experiment. We call it Scroll Tabs and the first iteration enables a solution to all three problems.

When your mouse hovers over the document tabs and you scroll the mouse wheel, the multi-line tabs feature is toggled on and off as shown in the video above. When you then click a tab to show the document, the multi-row tabs are disabled again to free up the vertical space.

Next steps

If this feature is interesting to you, please install the Scroll Tabs extension and take it for a ride. Make sure to share any ideas and bugs on the GitHub issue tracker, and feel free to send pull requests too. The feature request ticket is a suitable place to share your comments and thoughts, so make sure to vote and comment there as well.

Do you like the idea of community experiments like this one? Let us know in the comments below.

18 comments

Discussion is closed. Login to edit/delete existing comments.

  • John B 4

    Vertical tabs solve the problem. Maybe people don’t like that they don’t look at all like tabs, stylistically? The feature felt half done last I looked.

  • Alex Lambert 3

    I really like the vertical tab layout on my widescreen monitor. But it would be great if this could be controlled per window. When I tear some tabs out to a smaller monitor I would like the tabs on top, as the vertical layout consumes too much space. Maybe a setting that disabled vertical tabs for windows with teared out tabs inside?

  • Daniel Smith 5

    This is actually pretty slick. Minimal clicks, unobtrusive, and fast. Keep up the good work!

    • Mads KristensenMicrosoft employee 2

      Glad you like it. I feel the same 🙂

  • Mike Cheel 1

    I personally gave up on Visual Studio’s tab paradigm a number of years ago and just moved the tabs to the left (instead of the default top). Now I can see them all, I still get color coding and grouping and best of all I don’t pull all of my hair out because they keep moving around all over the place. I appreciate the idea behind this extension but I feel like the core problem (for me) isn’t solved. I just want to be able to find and access my tabs simply and quickly without clicking around. Moving the tabs vertically is still the best solution for me.

  • Melissa P 9

    What I don’t understand is: why is there no file “grouping” feature? We have many tabs open for a reason, because many files belong together as a set. I’m not talking about design files and its code-behind files. I’m talking about architecturally related files. What files belong together is something VS doesn’t know and can’t know. But that doesn’t matter, I could simply define these files as a group. And then open and close this group, and the group shows its files as a – well – ordered set, always the same left-to-right order. And then I have a drop down gear thingy to find my group to open and close. And maybe have a nice tab color for this group. Whenever I have a task (scrum) to perform, I know I need the same set of files from data, controller, action etc. as they architecturally belong together but are split in separate projects and folders. I mean, that’s the reason why we have these 50 tabs open in the first place and it gets cluttered. Grouping solves that. One day, I will find the time to code that extension myself.

    • Mads KristensenMicrosoft employee 3

      That’s a super interesting idea. I could see how that could be used for many different things such as React components etc.

      • Melissa P 1

        Hm, no. That’s not what I had in mind. This feels over-engineered and over-complicated. I want something on-the-fly, on-demand and just for 10 minutes in some cases. I don’t want to define regular expressions, filters and all that stuff. I can’t even explain to myself what files belong together, it’s more intuition what belongs together or not. And I will not rename files just to satisfy extensions. I want to click on five files and say “that’s a group, make it green”. And half an hour later I work on something else and create the blue group and close the green group. And then later I reopen the green group, include another file to it and delete the blue group. I want that ease and flexibility, this on-demand feeling when I need it.

        • frieder-berthold 1

          Hey Melissa,
          before Visual Studio 2022 i used Save all the Tabs. While it didn’t include colors for the grouping it was super easy to just save, close and open sets of tabs.
          Maybe this would be a starting point for the discussion?

    • Sabrina Cosolo 2

      This is really a very interesting feature proposal, I can already see it applied in my project where I have the classical Business, Data, Model classes and usually they are logically grouped (by table or group of tables related) and going up and down vertical tabs or Solution explorer is not exactly easy.
      Your concept would really help, as I think it would also help the possibility to order in a custom way projects instead of having them alphabetically ordered. Yes alphabetic is easy but not always the best, especially when a solution is very complex and with many projects.

    • Dave Johnston 1

      I am a hoarder of web links in my browser, and often have over 70 pages open for reference, so I am used to grouping tabs together to save space and organise related pages.

      Rather than invent something unique, where the user must train themselves, can we not just copy the tab-grouping mechanism used in latest browsers?

      Note: The only feature I do not like in browsers, is you cannot drop tabs onto a closed group to add the page to it. Aside from that niggle, it is quite an intuitive tab system.

  • Alex Vallat 2

    This is nice, for a fairly narrow range of open tabs. Too many to fit in one line, but not so many as to still swamp multiple lines.

    I think it fails to address the underlying issue which is: “I want to get back to a tab I was looking at before, but I can’t find it”.

    If we take a step back and consider what the point of Tabs is at all, that might help. As far as Visual Studio is concerned they represent all the open files (or editors, but for simplicity I’ll just refer to them as ‘files’ here), but from the user perspective being “open” isn’t a useful state to associate with a file. I am never interested in the question “What are all my open files?” or “Is this file I see in the solution tree open or not?” or “Is the definition of this method in an open file?”. There are three lists of things that are useful, which we currently use tabs for:

    1. All the files with unsaved changes. This easily could be a submenu under File or Window, with a Save All command. When I’m interested in unsaved changes, it’s pretty much never to navigate to the file for itself so much as to see the list and save or discard the changes.

    2. Files I’ve looked at recently. Specifically going back and forth along navigation paths, or copying and pasting, comparing, anything where I’m jumping between the same few files that I’m currently looking at. Tabs are good for these, but would be more usefully sorted by last viewed (or edited) than by when they were ‘opened’, which is a fairly meaningless thing as a user. There is also the problem that these tabs I’m actually using are swamped by a whole load of tabs that I am no longer working with, so there needs to be a way for history to fall off the bottom and not get in the way. Maybe it just overflows, maybe it really expires.

    3. Files I always want at my fingertips. Pinned tabs are good for this, but importantly the mere act of looking at a file should not promote it to this status, it has to be an explicit command to pin it. If I just open Program.cs from the solution editor, that alone does not imply that I want Program.cs to be always easily available as a tab. If I do, I can pin it.

    So what might this look like? Perhaps Tabs should be a mix of what you have explicitly pinned, and a frecently ordered set of tabs you have recently viewed, with an overflow to long history. Separately there can be a submenu somewhere of files with unsaved changes. It’s entirely up to Visual Studio whether and when it keeps low level file handles open, that’s just not a concern of mine as a user. It should not be my job to tidy up which tabs are ‘open’ and which are not.

  • Mid City Islamabad 1

    That’s great step, as we use multiple monitors to get separator views, now i’ll try this method? and let see hows its work.

  • Rod Falanga 1

    I’ve downloaded it and will give it a try. There’re some solutions I work with which have a lot of files in them, so this could be helpful.

    My only concern, at this point, is this feature probably won’t be easily discoverable.

  • Barry Arends 0

    Thanks for sharing this. Nice to give this a try before it is potentially included.

    Having to switch between many tabs is definitely an issue in some of the solutions I work on. I already found the multi-row tab an improvement and I like the idea of “collapsable” tab rows and it works quite well, but like one of the commenters I have my doubts this is not very intuitive when you don’t know about this feature yet. Would a simple hover-over with the mouse not be enough to slide out the entire tabs panel and collapse it back on mouse-leave?

    Also nice would be the possibility to save the multi-row tabs state (which tabs are open) and be able switch “context”to a different set of frequently used tabs. I know there are other extensions that do similar things, but they don’t seem to hit the spot of simplicity.

  • peter sz 0

    How can it be this dumb? Can’t you just copy some of the designs from VSCode? The tabs without icons are just way too difficult to distinguish. Do you even understand the pain of having to look for and differentiate `MainPage.xaml` `MainPage.idl` `MainPage.h` `MainPage.cpp`?

Feedback usabilla icon