After a fresh install of Visual Studio, I often re-configure some options and setup keyboard bindings. This tends to be a bit of a pain as each and every time I have to remember what setting is in what U.I. configuration pane and how do I find/configure that again? I also will often forget about certain settings until the point I need them and it really breaks my coding rhythm down to go hunt for and reconfigure these options.
I recently found a simple solution to get my VS just the way I want it.
P.S. Some of you may want to tell me all about the VS import/export settings, and you may be right, but I just haven?t spent the time to use/understand/easily find a way to integrate it into my ?flow?.
So I present to you ?MY happy path? to Visual Studio Environment configuration.
1. Install the NuGet Package Manager Extension
You?re going to probably install this extension anyway, so go-ahead and install it now if you don?t already have it? We need this so you can get access to the NuGet Package Manager Console
2. Execute Function Set-VisualStudioEnvironmentConfiguration
Wait! What is ?Set-VisualStudioEnvironmentConfiguration??
This is a little function that I have in My PowerShell $Profile which gets setup on all development environment.
So what?s in this PowerShell script?
As of writing this, I only have two specific setup commands, but thought I?d share as an example of what you can do:
- Set a keyboard binding to a specific command.
# Map Ctrl+W to close a tab $DTE.Commands.Item("File.Close").Bindings = "Global::Ctrl+W";
- ShowLineNumbers for all language files.
# Turn on line numbers for ALL language types ($DTE.Properties("TextEditor", "AllLanguages") | where {$_.Name -eq "ShowLineNumbers" } ).Value = $true
- Turn on whitespace?
# This doesn't work and I wish it did...
$DTE.ExecuteCommand("Edit.ViewWhiteSpace")
# Fails with: "Command "Edit.ViewWhiteSpace" is not available."
# Maybe one of you can help me out?- How can I find and setup the settings I like?
I?m no VS expert and only know as much about the $DTE object as what I?ve written about here, but I?ll give you some tips and you can go from there?
- Google/Bing are your friends. Type ?DTE Visual Studio {TheThingYouWantToAccomplish}?
- After your search, most examples you find will be VB macros and as it turns out VB (in this case) translates nicely to PowerShell (EX:
VB Macro: DTE.Commands.Item("File.Close").Bindings = "Global::Ctrl+W"
PowerShell: $DTE.Commands.Item("File.Close").Bindings = "Global::Ctrl+W" See the difference? (yep just the ?$? at the beginning of the PowerShell one) Nifty eh? - Don?t be afraid to use PowerShell to search/filter things in the $DTE. Try this:
PM> $DTE.Commands | where { $_.Name ?match ?Close? } | select { $_.Name }
- Happy VS Environment setting-uppers!
Yeah, export/import is much easier. Don’t have to install nuget package manager extension, and don’t have to write powershell commands–you can just use the built-in VS UI to edit commands/menus/etc.
The ability to automate at this level is huge. Thanks for this.
@peterritchie:disqus @d762c661517d3fec78da4c00d3a35fa0:disqus Have neither of you guys seen studioshell.codeplex.com yet? There’s a nuget package too – the entire VS DTE OM is mapped to a powershell provider – fully automatable with idiomatic powershell provider cmdlets.