My VSCode Setup in 2025
I've been using VSCode as my primary editor for years now, and my setup has evolved quite a bit. I've tried probably hundreds of extensions, countless themes, and experimented with different workflows. Here's what I've settled on - the stuff that actually makes a difference.
The Foundation: Settings
Before we get to extensions, here are the settings that form the foundation of my setup. These are in my settings.json:
{
// Editor basics
"editor.fontSize": 14,
"editor.fontFamily": "'JetBrains Mono', 'Fira Code', Menlo, Monaco, 'Courier New', monospace",
"editor.fontLigatures": true,
"editor.lineHeight": 1.6,
"editor.tabSize": 2,
// Quality of life
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.linkedEditing": true,
"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": true,
// Minimap (I turned it off)
"editor.minimap.enabled": false,
// File management
"files.autoSave": "onFocusChange",
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
// Terminal
"terminal.integrated.fontSize": 13,
"terminal.integrated.fontFamily": "'JetBrains Mono', monospace",
// Workbench
"workbench.colorTheme": "Tokyo Night Storm",
"workbench.iconTheme": "material-icon-theme",
"workbench.startupEditor": "none",
"workbench.editor.enablePreview": false,
// Zen mode for deep focus
"zenMode.centerLayout": false,
"zenMode.hideLineNumbers": false,
}Why These Settings Matter
Font ligatures - Makes code more readable with combined characters (like => becoming a single arrow). JetBrains Mono is excellent for this.
Format on save - Controversial, but I love it. No more thinking about formatting, it just happens.
Linked editing - When you rename an HTML tag, it automatically renames the closing tag. Small thing, huge time saver.
Auto save on focus change - I used to lose work switching between terminal and editor. Never again.
Disable minimap - Unpopular opinion: the minimap wastes screen space. If your files are so long you need a minimap, they're probably too long.
Essential Extensions
I try to keep my extension list minimal. Here are the ones I actually use daily:
1. Prettier - Code Formatter
This is non-negotiable. Consistency across the team, zero arguments about formatting.
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}2. ESLint
Catches errors before they make it to production. Configure it once, forget about it.
The extension auto-fixes on save if you add:
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
}3. GitLens
Game changer for understanding code history. Inline blame annotations show who changed what and when, right in the editor.
Key features I use:
- Inline blame (see the last commit for each line)
- File history view
- Compare branches/commits
- Line history for tracking down bugs
4. Error Lens
Shows errors and warnings inline, right next to the code. No more hovering or checking the problems panel.
{
"errorLens.fontSize": "13",
"errorLens.enabledDiagnosticLevels": ["error", "warning"]
}5. Auto Rename Tag
Automatically renames paired HTML/XML tags. Works beautifully with JSX.
6. Import Cost
Displays the size of imported packages inline. Helps catch bloated imports early.
import moment from 'moment' // 💰 229.4KB
import dayjs from 'dayjs' // 💰 6.5KBEye-opening for bundle size optimization.
7. TODO Highlight
Highlights TODO, FIXME, NOTE comments. Makes them impossible to miss.
// TODO: Refactor this later
// FIXME: This breaks on edge case
// NOTE: Important context here8. Path Intellisense
Autocompletes file paths. Essential for imports and avoiding typos.
9. Better Comments
Color-codes different types of comments:
// ! Deprecated code
// ? Query: why does this work?
// TODO: Implement feature
// * Important note10. Console Ninja
Shows console.log output right in the editor. No more switching to the browser console constantly.
Language-Specific Extensions
JavaScript/TypeScript
- TypeScript Error Translator - Converts cryptic TS errors into plain English
- Pretty TypeScript Errors - Makes error messages actually readable
React
- ES7+ React/Redux/React-Native snippets - Shortcuts like
rafcefor functional components - React Developer Tools - Though I mostly use the browser extension
CSS/Tailwind
- Tailwind CSS IntelliSense - Autocomplete for Tailwind classes, must-have if you use Tailwind
- CSS Peek - Jump to CSS definitions from HTML
Keybindings That Changed Everything
I've customized a bunch of keybindings. Here are the ones I use constantly:
[
// Quick terminal toggle
{
"key": "cmd+j",
"command": "workbench.action.terminal.toggleTerminal"
},
// Duplicate line (like in Sublime)
{
"key": "cmd+shift+d",
"command": "editor.action.copyLinesDownAction"
},
// Delete line
{
"key": "cmd+shift+k",
"command": "editor.action.deleteLines"
},
// Move line up/down
{
"key": "alt+up",
"command": "editor.action.moveLinesUpAction"
},
{
"key": "alt+down",
"command": "editor.action.moveLinesDownAction"
},
// Navigate between editor groups
{
"key": "cmd+1",
"command": "workbench.action.focusFirstEditorGroup"
},
{
"key": "cmd+2",
"command": "workbench.action.focusSecondEditorGroup"
},
// Close other editors
{
"key": "cmd+alt+w",
"command": "workbench.action.closeOtherEditors"
},
// Zen mode for focus sessions
{
"key": "cmd+k z",
"command": "workbench.action.toggleZenMode"
}
]The Shortcuts I Actually Use
Cmd+P - Quick file open. Type part of a filename, instantly open it. I probably use this 100+ times a day.
Cmd+Shift+P - Command palette. Access any VSCode command. Learning this was a game-changer.
Cmd+Shift+F - Global search. Find anything across your entire project.
Cmd+D - Multi-cursor select. Select the next occurrence of current word. Hit it multiple times, edit all at once.
Cmd+Shift+L - Select all occurrences. Like Cmd+D but gets them all instantly.
Alt+Click - Add cursors anywhere. Multiple cursor editing is powerful once you get used to it.
Cmd+/ - Toggle line comment. Works in every language.
Workflow Optimizations
1. Workspaces for Different Projects
I use VSCode workspaces to save project-specific settings and open files. Each client project gets its own workspace.
Save with: File > Save Workspace As...
2. Split Editors Strategically
I usually run a 2-column layout:
- Left: Component file
- Right: Test file or related component
Cmd+\ to split editor, Cmd+1/2 to switch between them.
3. Integrated Terminal Workflow
I keep 3 terminal instances open:
- Dev server (
npm run dev) - Git commands
- General purpose (file operations, installs, etc.)
Cmd+J to toggle terminal visibility, backtick to cycle between instances.
4. Snippets for Repetitive Code
Custom snippets save so much time. Here's one I use constantly:
{
"React Functional Component": {
"prefix": "rfc",
"body": [
"interface ${1:ComponentName}Props {",
" $2",
"}",
"",
"export function ${1:ComponentName}({ $3 }: ${1:ComponentName}Props) {",
" return (",
" <div>",
" $4",
" </div>",
" )",
"}"
],
"description": "React Functional Component with TypeScript"
}
}Type rfc, hit Tab, and you've got a full component scaffold.
5. Project-Specific Settings
Each project can have a .vscode/settings.json:
{
"editor.tabSize": 4,
"files.exclude": {
"**/node_modules": true,
"**/.next": true,
"**/dist": true
},
"search.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/.next": true
}
}Keeps the sidebar clean and search results relevant.
Theme: Tokyo Night Storm
I've tried dozens of themes. Tokyo Night Storm is the one I keep coming back to.
Why I like it:
- Easy on the eyes - Not too bright, not too dark
- Good contrast - Comments are visible but not distracting
- Consistent colors - Similar syntax elements use similar colors across languages
- Active development - Regularly updated for new language features
Alternatives I've liked:
- One Dark Pro - If you prefer Atom-style
- Dracula - Classic, great contrast
- GitHub Dark Dimmed - If you work on GitHub a lot
What I Removed
Extensions I tried but ultimately uninstalled:
Bracket colorizers - Built into VSCode now, no extension needed
Live Share - Great concept, but I rarely pair program remotely
Code spell checker - Caught typos but had too many false positives in code
Peacock - Changes VSCode color per workspace. Cool idea, but I found it distracting
WakaTime - Time tracking felt like surveillance. If you like data, you might like it.
Performance Tips
Extensions slow down VSCode. Here's how to keep it fast:
Check Extension Performance
Cmd+Shift+P → "Developer: Show Running Extensions"
Sort by activation time. If something takes >500ms, consider if you really need it.
Disable Extensions Per Workspace
Some extensions only make sense for certain projects:
Right-click extension → "Disable (Workspace)"
Exclude Folders from Search
{
"files.exclude": {
"**/node_modules": true,
"**/.git": true,
"**/.DS_Store": true,
"**/dist": true,
"**/.next": true
},
"search.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/build": true,
"**/.next": true,
"**/coverage": true
}
}Massively speeds up search and reduces sidebar clutter.
The Setup Process for New Machines
When setting up a new machine, here's my checklist:
- Install VSCode
- Enable Settings Sync -
Cmd+Shift+P→ "Settings Sync: Turn On" - Install JetBrains Mono font - https://www.jetbrains.com/lp/mono/
- Install extensions (most come via Settings Sync)
- Configure keybindings (also synced)
- Install CLI tool -
Cmd+Shift+P→ "Shell Command: Install 'code' command in PATH"
The code command is clutch. Open any folder in VSCode from terminal:
cd my-project
code .What's Next?
I'm keeping an eye on:
Cursor - AI-powered editor built on VSCode. Trying it for small projects.
GitHub Copilot Chat - More integrated than the sidebar version. Seems promising.
VSCode Profiles - Official feature for different setups (work vs. personal vs. streaming)
Dev Containers - Containerized development environments. Great for onboarding.
My Actual Settings Files
Want my exact setup? Here are the files:
settings.json - All the settings above plus language-specific configs
keybindings.json - All custom keyboard shortcuts
snippets/ - Custom code snippets for React, TypeScript, etc.
All synced via Settings Sync, so I get the same experience on every machine.
The Bottom Line
Your setup should optimize for your workflow. Don't install extensions just because they're popular. Try them, keep what helps, remove what doesn't.
The best setup is the one that gets out of your way and lets you focus on writing code.
What's in your setup? Any extensions or keybindings I should try? Let me know - always looking to optimize.
Quick Reference - My Essential Extensions:
- Prettier
- ESLint
- GitLens
- Error Lens
- Auto Rename Tag
- Import Cost
- TODO Highlight
- Path Intellisense
- Better Comments
- Console Ninja
Must-have keybindings:
Cmd+P- Quick file openCmd+Shift+P- Command paletteCmd+D- Multi-selectCmd+J- Toggle terminalCmd+K Z- Zen mode