15 Interesting VS Code Settings

I’ve been using VS Code for quite some time now. In fact, given the nature of my work recently I’ve found myself spending more time in VS Code than in VS 2017 over the past several months. The “out-of-the-box”, “stock” experience with VS Code is truly fantastic and has provided me with just about all the functionality I’ve needed.

Sure, I’ve added some extensions such as C#, mssql, Babel JavaScript, and transformer to address some gaps but by and large, I’ve found the experience to be more than sufficient for my needs. That said, I recently attended a talk that began by highlighting a dozen or so of the interesting configuration options that can be set to tweak the experience.

Given that I’ve never really paid much attention to the settings I thought I should dive in, look over the nearly 500 settings, and highlight a few which I found most interesting. Although the vast majority are pretty typical for an editor there are plenty that can have a significant impact on the way we work so without further ado, here are my picks for the top 15 most interesting VS Code settings!

15. window.title

Out-of-the-box, VS Code’s title bar provides minimal information about what’s being edited. The information provided might be sufficient for small projects or individual files but as projects grow it might not be enough. For example, how many files named index.js does your latest node.js project contain?

window.title gives us a relatively straightforward way to customize the information shown in the title bar by providing us with a series of variables we can include in a string template. The default settings document details the variables so I won’t go into detail about them here but I will say that I’ve found the following quite useful:

"${appName}${separator}${rootName}${separator}${activeEditorMedium}"

14. workbench.tips.enabled

After opening VS Code for the first time and exploring the UI a bit you’re likely to close all of the editor windows and stumble upon this nice watermark image and a few tips for returning to a productive state. Over time however, you’re likely to internalize most of the tips and you might not want to see them any more. By changing workbench.tips.enabled to false you can rid yourself of them and get rid of some of the clutter.

It’s a subtle change but I really like just having the faint VS logo.

13. update.channel

If you do any number of presentations that rely on VS Code or you like to control when your software updates are installed the update.channel setting will likely be of interest to you. Setting this value to none and restarting the editor will prevent any new releases from being installed and potentially interfering with any of your demos!

Once you’ve set update.channel to none and are ready to apply any available updates you can do so by selecting the Check for Updates option under the Code menu on the Mac or the Help menu on Windows.

12. markdown.styles

I do much of my writing in markdown. Even write most of my blog posts start off in markdown before I move them to WordPress when I’m ready to publish. As convenient as that is, I often find that I’d like to customize how the preview window renders the text, be it for my stylistic preference or to match the styles in a given project. That’s where the markdown.styles setting comes in.

The help text displayed for the markdown.styles setting in the master settings file reads as follows:

A list of URLs or local paths to CSS style sheets to use from the markdown preview. Relative paths are interpreted relative to the folder open in the explorer. If there is no open folder, they are interpreted relative to the location of the markdown file. All ‘\’ need to be written as ‘\’.

I point this out because it reveals a number of intricacies about the setting. First, it takes an array of file names. This allows us to split our CSS into several files or allow the CSS to vary by project. Next, the file names are all relative to either the current markdown file OR the folder open in the VS Code Explorer. Since the paths are relative we can share CSS between markdown files or projects based on our file organization structure.

Note: You’ll need to close and re-open the preview after changing this setting or the referenced CSS for the changes to be reflected in the preview window.

11. editor.fontLigatures

Although changing the font is something that one would expect from any text editor, I particularly appreciate that VS Code allows us to control whether ligatures are rendered for the fonts that support them.

One such font that I like is Fira Code, a programming font specifically designed with ligatures in mind. In Fira Code, ligatures are used for a number of multi-character operators such as equality, inequality, piping, and so on as a single glyph rather than several thus allowing the code to [arguably] look a bit cleaner. The underlying characters all remain intact, I just think it just looks better.

Not everyone likes the ligatures for a multitude of reasons so they’re disabled by default but by changing the editor.fontLigatures setting to true we can take advantage of them in VS Code. Of course, if you enable the setting and decide you don’t like them, you can always return the value to its default.

10. editor.renderWhitespace

Although I don’t spend much time in F# these days one thing I got used to was caring about seeing whitespace in my code since whitespace is significant there. I got so used to seeing whitespace in my code that I even turned on the feature in Word for my more formal writing. Unfortunately, showing whitespace in the full Visual Studio is a binary proposition; you either see all whitespace characters or none. I’ve often wished for some balance between the two options.

VS Code’s editor.renderWhitespace setting takes this capability beyond what Visual Studio traditionally offers by providing a third option, boundary, which offers what I consider to be the best of both worlds. The boundary setting essentially shows leading and trailing whitespace while ignoring single whitespace characters between words or syntax elements.

In the screenshot which features some JavaScript you can see the leading whitespace rendered as dots but the spaces in the code itself are ignored leading to a more natural appearance.

9. editor.cursorStyle

This is another setting with a subtle visual effect that can greatly affect your experience when using VS Code.

By default, the text cursor is rendered as a solid vertical bar but there are plenty of other styles in other editors. In VS Code we can change the editor.cursorStyle setting to adjust the cursor to something else that we may be more accustomed to, be it a vertical line, underscore, or even a box.

Setting Effect
block
block-outline
line
line-thin
underline
underline-thin

There’s also an editor.cursorBlinking setting which controls how the cursor blinks. I prefer the solid or default blink values but you can also choose smooth, phase, and expand.

I encourage you to experiment with various combinations of the editor.cursorStyle and editor.cursorBlinking settings to choose one that works best for you. I thought the expanding block-outline was fun for a bit but found it pretty distracting overall. Now I’m back to using a boring solid line.

8. git.autofetch

If you’re working on a team, chances are that your teammates are pushing changes to the same remote repository that you are. The git.autoFetch setting toggles whether VS Code automatically fetches those changes from the remote so you can see what’s happening in the repository without integrating the changes immediately. I think it’s a nice feature but if you enable it for daily use you may consider disabling it when working on a plane. Oops!

7. editor.minimap.*

VS Code’s minimap is a nice feature which shows you an overview of your code’s structure. It comes with a few customization options that I think greatly enhance its usefulness.

First is editor.minimap.renderCharacters. By default the minimap renders a pixelated view that attempts to replicate the characters in your code. Given how small the box is, I don’t find it particularly useful to render that way since most of the information is lost. Instead, I prefer to disable that option so the map renders blocks that represent the structure.

Next is editor.minimap.showSlider. This setting merely toggles when the region of the file currently visible in the editor window is highlighted in the map. By default, this is set to show only when the pointer is over the map. I tend to leave this setting alone but it can also be set to always so that it’s always shown.

Another interesting minimap setting is editor.minimap.maxColumn. Changing this value affects the minimap’s width based on the number of textual columns in the code. The default is 120.

We can also control whether the minimap appears on the right or left side of the code listing with the editor.minimap.side setting. By default the minimap appears on the right. I’ve played with both sides and see merits to both. When on the right, the minimap takes advantage of existing whitespace but it often quite some distance from the code. On the other hand, placing the minimap on the left increases the margin size but places the map much closer to most of the code. I tend to keep the minimap on the right to take advantage of that existing whitespace.

Finally, the minimap isn’t for everyone so like so many other VS Code features, you can turn it off by setting editor.minimap.enabled to false.

6. debug.internalConsoleOptions

Most of my work in VS Code centers around JavaScript applications and I’ve found the debugger in particular to be quite pleasant to work with. One thing that I found a bit troublesome at first though was how erratically the debug console window appeared to behave when I started a new debugging session. Fortunately, we can tame it a bit by changing the debug.internalConsoleOptions setting. This setting takes one of three values:

Value Effect
neverOpen Does not automatically open the debug console
openOnFirstSessionStart Opens the debug console when the first debugging session starts
openOnSessionStart Opens the debug console every time a debugging session starts

By default, debug.internalConsoleOptions is set to openOnFirstSessionStart but I prefer openOnSessionStart if for no reason other than starting each debugging session at a consistent place.

5. debug.openExplorerOnEnd

Much like the debug.internalConsoleOption setting, debug.openExplorerOnEnd controls affects VS Code’s behavior when working with debugging sessions. Where the debug.internalConsoleOption setting can surface the debug console when debugging starts, debug.openExplorerOnEnd surfaces the main explorer window when debugging ends. Be default this behavior is disabled but it can be convenient for remaining focused on your project structure whenever you return to editing.

4. files.exclude

When we open a folder in VS Code the explorer shows us a listing of that folder’s contents. Most of the time there are certain files or subfolders (such as .git) that we don’t want to see. VS Code’s files.exclude setting is an object that indicates whether certain glob patterns should be shown.

By default, the major version control system folders are hidden along with some other “special” folders (such as .DS_Store) that are used by the underlying operating system.

A related setting is search.exclude which behaves similar to files.exclude except that it specifies glob patterns to exclude from VS Code’s built-in search capabilities. Paths you may choose to exclude from the search feature would be things like the node_modules folder.

What I think makes this pair of settings so interesting is that search.exclude inherits the values from files.exclude so those globs are automatically excluded from search results while other patterns can still be shown in the explorer panel but excluded from searches.

3. editor.multiCursorModifier

One of my most loved VS Code features is its support for multiple cursors. I love that when my decade-old JavaScript habits kick in and I declare a series of values with var that I can click in multiple, non-sequential places in my code and replace change them to const or let. The problem is, I always seem to hold the wrong key, particularly when jumping between my Mac and Windows devices.

The editor.multiCursorModifier setting defaults to alt but I much prefer the ctrlCmd value. Now, regardless of which laptop I’m on, I press what is essentially the same key.

2. files.hotExit

Another of my favorite VS Code features is hot exit. Hot exit is VS Code’s ability to remember unsaved changes when VS Code is closed. This has proven fantastically useful for me when I’ve been keeping a scratchpad going and need to reboot to apply the latest system updates or accidentally close my VS Code windows.

By default, hot exit is set to trigger onExit but you can customize the behavior by changing the files.hotExit setting to off to disable, or onExitAndWindowClose to apply the effect to editor windows not tied to a particular folder.

1. files.autoSave

Finally we reach what has quickly become one of my favorite VS Code features – auto save. Although disabled by default VS Code gives us plenty of variety when it comes to managing this behavior via the files.autoSave setting.

To automatically save all changed files when we focus away from VS Code we can use the onWindowChange option. Similarly, we can use the onFocusChange value to save any changes when focus leaves the editor. And then there’s my personal favorite: autoSaveDelay which saves any changes after some interval specified by the files.autoSaveDelay setting. By default, this automatically saves changes every second but you can adjust it to your needs.

Although I definitely prefer the autoSaveDelay option I will offer one word of warning – don’t use it with nodemon or anything else that automatically rebuilds/reloads a project. Since you’ll likely be in the middle of typing some expression or statement when the interval hits, those processes are likely going to hit code that’s a work-in-progress and throw some errors.

Conclusion

So there they are – my 15 picks for most interesting VS Code settings. I did intentionally exclude some extension-specific settings from this list but I think these are definitely some of the most impactful settings for a variety of environments.

Did I miss any settings you find especially interesting? Let me know and I’ll see about putting together another list.

Advertisement