Hi !
Profiles in Visual Studio Code are a way to create different environments for different projects or purposes. They allow us to switch between different sets of extensions, settings, and keyboard shortcuts without affecting our default VS Code configuration.
I found it super useful mostly when I think about the extensions that I have. In example: if Iโm doing plain rust coding, I donโt need all my Azure and IoT extensions loaded in VSCode. I just need the rust ones.
Here is how I create a new profile with my necessary extensions. In the Manage option (bottom left), select [Profiles // Create Profile]
Create an empty profile.
Iโll name my new profile โBlog Demoโ.
I have no extensions installed in this profile. Iโll install CoPilot and Rust Analyzer.
And thatโs it ! my new profile, will only have these 3 extensions and my VS Code experience will be much lighter
Happy coding!
Greetings
El Bruno
More posts in my blog ElBruno.com.
Top comments (3)
Hi El Bruno, I'm manly suffering from shortcut conflicts in extensions, and certainly welcome this new feature! Like, I open a Jupyter notebook, hit Shift+Enter to run a code cell and... it inserts an empty line below the current one, because the "Visual Studio Keybindings" extension decided so. I have been using Visual Studio since before it was Visual Studio (neรฉ Visual C++ back in the 1990), but never known about this shortcut... The fewer extensions, the better!
The downside is that setting sync nightmare between computers increases in direct proportion to the number of profiles in use. :)
Do you happen to know whether user settings of the main, Default profile are propagated to other profiles? The moment I create a new profile, the entire, formerly the only User settings file
settings.json
is copied from<Root>/User/settings.json
to<Root>/User/profiles/<profile>/settings.json
(<Root>
is platform-dependent, and<profile>
is a cryptic name, like, in my case,-2b9e98ae
, used instead of the profile's real name to make sure that I become even more confused than I already am :-) ). If, for example, I delete a setting from the<profile>/settings.json
, then which one will be used: the setting from my mainUser/settings.json
, or the default, as if this setting were not set at all? The JSON settings editor dimmed some settings with a tooltip saying that this setting can be changed only in the Default profile, so the answer may even possibly depend on a particular setting.I also don't understand yet how this new feature interacts with the remotes, both SSH and the newly added Tunnel, and almost all my work with VSCode is remote, on cloud VMs. Do profiles propagate to remotes, too? It didn't look to me that they do. Fortunately, extensions conflicts on remotes are not as common as in the front end. Indeed, more posts on this feature would be helpful! (hint, hint!)
The Profiles feature is entirely undocumented, despite there being quite a buzz about it. Microsoft so weirdly decided not to even mention it in the documentation, as if it weren't officially there yet, but the news widely reported that it had been released, according to the very same Microsoft, with VSCode 1.75. Strange things are going on, indeed...
The Profiles feature is now documented here.
I agree that it's not implemented thoughtfully enough. What makes it unusable for me is that it doesn't inherit (as far as I can tell) but rather duplicates. The issue here suggests they're thinking about it.
I haven't looked into profiles in remote setups but here's a (now closed) issue discussing it.
Thanks for the update, looks like they've expanded the documentation with the FAQ section and more details on how profiles work.
I would not call profiles unusable, but I'm also miss inheritance a lot. I am maintaining my main profile sorted alphabetically and by groupโI don't change it too often, and mostly edit it in JSONC. This allows using any diff&merge tool to transfer changes, but that's very inconvenient, no doubt about that. VSCode is not my main IDE (VS is), but I'm using it even for xplat C++ development (VS remote dev concept is very different: the files are local, and sent to the remote as needed; also, the support for CMake was fairly basic and the SSH client library for remoting very outdated; I'm not sure I'll prefer VSCode to VS for my next xplat C++ project).
Here's what I mean by keeping the
settings.json
hand-formatted: sort keys alphabetically, insert a//
when the headword changes. Works for one set of settings, but if I had 5 profiles, not sure I would keep them as neat as I maintain one :(and so on. Such a formatting can be easily automated, indeed, I just don't change settings too often to