VS Code Cheat Sheet
A complete reference for Visual Studio Code — settings, debugging, tasks, snippets, extensions, Git, and keyboard shortcuts. Click any section to expand or collapse.
Command Palette
The Command Palette (Ctrl+Shift+P) is the fastest way to access any VS Code feature — prefix with > for commands, @ for symbols, : for line numbers
# Open Command Palette
Ctrl+Shift+P (Windows/Linux)
Cmd+Shift+P (Mac)
# Open file by name
Ctrl+P / Cmd+P
# Go to line number
Ctrl+G / Cmd+G
# Go to symbol in file
Ctrl+Shift+O / Cmd+Shift+O
# Go to symbol in workspace
Ctrl+T / Cmd+TPanel & Sidebar Shortcuts
Learn these panel shortcuts to navigate VS Code without touching the mouse — Explorer, Search, Git, Extensions are the most-used panels
# Toggle Sidebar visibility
Ctrl+B / Cmd+B
# Toggle Explorer
Ctrl+Shift+E / Cmd+Shift+E
# Toggle Search panel
Ctrl+Shift+F / Cmd+Shift+F
# Toggle Source Control
Ctrl+Shift+G / Cmd+Shift+G
# Toggle Extensions
Ctrl+Shift+X / Cmd+Shift+X
# Toggle Terminal
Ctrl+` / Cmd+`
# Toggle Problems panel
Ctrl+Shift+M / Cmd+Shift+M
# Focus breadcrumbs
Ctrl+Shift+; / Cmd+Shift+;Editor Groups & Splits
Split editors let you view multiple files side-by-side — use Ctrl+1/2/3 to jump between groups without lifting your hands from the keyboard
# Split editor right
Ctrl+\ / Cmd+\
# Split editor down
Ctrl+K Ctrl+\ / Cmd+K Cmd+\
# Focus left/right editor group
Ctrl+1 / Ctrl+2 / Ctrl+3
# Move file to new group
Ctrl+K Ctrl+Shift+Right
# Close editor
Ctrl+W / Cmd+W
# Reopen closed editor
Ctrl+Shift+T / Cmd+Shift+T
# Navigate editor tabs
Ctrl+Tab (cycle forward)
Ctrl+Shift+Tab (cycle backward)Zen Mode & Display
Zen Mode (Ctrl+K Z) hides all chrome and centers the editor — ideal for focused writing or code review sessions
# Toggle Zen Mode (distraction-free)
Ctrl+K Z / Cmd+K Z
# Toggle full screen
F11
# Increase / decrease font size
Ctrl+= / Ctrl+-
Cmd+= / Cmd+-
# Reset font size
Ctrl+Numpad0 / Cmd+Numpad0
# Toggle word wrap
Alt+Z / Option+Z
# Toggle minimap
View > Minimap (Command Palette: "Toggle Minimap")Multi-Cursor Editing
Multi-cursor is one of VS Code's killer features — Ctrl+D to add the next occurrence one at a time lets you refine selections before editing all of them
# Add cursor above / below
Ctrl+Alt+Up / Ctrl+Alt+Down
Cmd+Option+Up / Cmd+Option+Down (Mac)
# Add cursor at mouse click
Alt+Click / Option+Click
# Select all occurrences of current word
Ctrl+Shift+L / Cmd+Shift+L
# Add next occurrence to selection
Ctrl+D / Cmd+D
# Skip current occurrence, go to next
Ctrl+K Ctrl+D / Cmd+K Cmd+D
# Select all occurrences (case-sensitive)
Ctrl+F2 / Cmd+F2
# Column/box selection
Shift+Alt+drag / Shift+Option+dragCode Folding
Folding (Ctrl+Shift+[) collapses blocks of code to improve readability — fold to level N with Ctrl+K Ctrl+N to see only top-level structure
# Fold current region
Ctrl+Shift+[ / Cmd+Option+[
# Unfold current region
Ctrl+Shift+] / Cmd+Option+]
# Fold all regions
Ctrl+K Ctrl+0 / Cmd+K Cmd+0
# Unfold all regions
Ctrl+K Ctrl+J / Cmd+K Cmd+J
# Fold all block comments
Ctrl+K Ctrl+/ / Cmd+K Cmd+/
# Fold level 1-7
Ctrl+K Ctrl+1 ... Ctrl+K Ctrl+7Line Operations
Alt+Up/Down moves lines without cut/paste — the fastest way to reorganize code without breaking your flow
# Move line up / down
Alt+Up / Alt+Down / Option+Up / Option+Down
# Copy line up / down
Shift+Alt+Up / Down / Shift+Option+Up / Down
# Delete line
Ctrl+Shift+K / Cmd+Shift+K
# Insert line below
Ctrl+Enter / Cmd+Enter
# Insert line above
Ctrl+Shift+Enter / Cmd+Shift+Enter
# Join line below to end of current
Ctrl+J / Cmd+J
# Indent / outdent line
Ctrl+] / Ctrl+[
Cmd+] / Cmd+[Refactoring & Code Actions
F2 renames a symbol across the entire workspace — safer than find/replace because it understands scope and won't touch string literals
# Trigger code action / quick fix
Ctrl+. / Cmd+.
# Rename symbol (across files)
F2
# Format document
Shift+Alt+F / Shift+Option+F
# Format selection
Ctrl+K Ctrl+F / Cmd+K Cmd+F
# Organize imports
Shift+Alt+O / Shift+Option+O
# Go to definition
F12
# Peek definition
Alt+F12 / Option+F12
# Find all references
Shift+F12
# Go to implementation
Ctrl+F12 / Cmd+F12Find & Replace in File
Alt+Enter in the find box selects all matches at once — combine with multi-cursor to edit all occurrences simultaneously
# Open Find
Ctrl+F / Cmd+F
# Open Find with Replace
Ctrl+H / Cmd+H
# Toggle case sensitive
Alt+C / Option+C
# Toggle whole word
Alt+W / Option+W
# Toggle regex mode
Alt+R / Option+R
# Find next / previous
F3 / Shift+F3 / Cmd+G / Cmd+Shift+G
# Select all matches
Alt+Enter / Option+Enter
# Replace current match
Enter (in replace field)
# Replace all
Ctrl+Alt+Enter / Cmd+Option+EnterGlobal Search (Across Files)
Global search supports full regex with capture groups and backreferences ($1, $2) in the replace field — powerful for bulk refactoring across many files
# Open global search
Ctrl+Shift+F / Cmd+Shift+F
# Open global search + replace
Ctrl+Shift+H / Cmd+Shift+H
# Search with regex — capture groups in replace
# Find: (\w+)\s+(\w+)
# Replace: $2 $1
# Include / exclude files
# Use glob patterns in the "files to include/exclude" box:
src/**/*.ts
!**/*.test.ts
!node_modules
# Search in selection only
# Click the "..." in search panel → "Search Only in Open Editors"Navigation Shortcuts
Alt+Left/Right navigates your edit history like a browser — invaluable when jumping between definition and usage sites across multiple files
# Go back / forward (like browser history)
Alt+Left / Alt+Right
Ctrl+- / Ctrl+Shift+- (Mac: Cmd+- / Cmd+Shift+-)
# Go to matching bracket
Ctrl+Shift+\ / Cmd+Shift+\
# Go to beginning / end of file
Ctrl+Home / Ctrl+End
Cmd+Up / Cmd+Down (Mac)
# Go to beginning / end of line
Home / End
# Scroll without moving cursor
Ctrl+Up / Ctrl+Down
Cmd+Up / Cmd+Down (Mac — scrolls view)
# Reveal active file in Explorer
Ctrl+K E / Cmd+K Esettings.json — Common Options
Workspace .vscode/settings.json overrides user settings for that project — commit it to share consistent settings with your team
// .vscode/settings.json (workspace) or
// ~/Library/Application Support/Code/User/settings.json (user)
{
// Editor
"editor.fontSize": 14,
"editor.tabSize": 2,
"editor.insertSpaces": true,
"editor.wordWrap": "on",
"editor.lineNumbers": "relative",
"editor.minimap.enabled": false,
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.rulers": [80, 120],
"editor.bracketPairColorization.enabled": true,
"editor.stickyScroll.enabled": true,
// Files
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 1000,
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
"files.exclude": {
"node_modules": true,
".git": true
},
// Terminal
"terminal.integrated.fontSize": 13,
"terminal.integrated.defaultProfile.osx": "zsh",
// Workbench
"workbench.colorTheme": "One Dark Pro",
"workbench.iconTheme": "material-icon-theme",
"workbench.startupEditor": "none"
}Language-Specific Settings
Language-scoped settings override globals only for that file type — use [languageId] brackets and the language ID shown in the status bar bottom-right
// Override settings per language
{
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2
},
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.tabSize": 4,
"editor.formatOnSave": true
},
"[go]": {
"editor.defaultFormatter": "golang.go",
"editor.tabSize": 4,
"editor.insertSpaces": false
},
"[markdown]": {
"editor.wordWrap": "on",
"editor.quickSuggestions": {
"comments": "off",
"strings": "off",
"other": "off"
}
}
}Keybindings (keybindings.json)
Use "when" clauses to make keybindings context-sensitive — add a "-" prefix to the command name to remove an existing binding without replacing it
// Open: Ctrl+K Ctrl+S → "Open Keyboard Shortcuts (JSON)"
[
// Remap format document
{
"key": "ctrl+shift+i",
"command": "editor.action.formatDocument",
"when": "editorHasDocumentFormattingProvider && editorTextFocus && !editorReadonly"
},
// Open terminal with custom key
{
"key": "ctrl+alt+t",
"command": "workbench.action.terminal.new"
},
// Run test file
{
"key": "ctrl+shift+t",
"command": "workbench.action.tasks.runTask",
"args": "test"
},
// Remove binding
{
"key": "ctrl+k ctrl+k",
"command": "-editor.action.deleteLines"
}
]launch.json — Node.js
The launch.json file configures debugger sessions — "launch" starts a new process, "attach" connects to an already-running process on a debug port
// .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Program",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/src/index.js",
"envFile": "${workspaceFolder}/.env",
"restart": true,
"runtimeExecutable": "node",
"skipFiles": ["<node_internals>/**"]
},
{
"name": "Attach to Process",
"type": "node",
"request": "attach",
"port": 9229,
"restart": true,
"skipFiles": ["<node_internals>/**"]
},
{
"name": "Debug Jest Tests",
"type": "node",
"request": "launch",
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/jest",
"args": ["--runInBand", "--watchAll=false"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
}
]
}launch.json — Browser / Chrome
Chrome debugging requires the "Debugger for Chrome" or built-in JS debugger — set breakpoints in VS Code and they hit in the browser via source maps
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Chrome",
"type": "chrome",
"request": "launch",
"url": "http://localhost:5173",
"webRoot": "${workspaceFolder}/src",
"sourceMapPathOverrides": {
"webpack:///src/*": "${webRoot}/*"
}
},
{
"name": "Launch Firefox",
"type": "firefox",
"request": "launch",
"url": "http://localhost:5173",
"webRoot": "${workspaceFolder}/src"
}
]
}Debug Keyboard Shortcuts
Conditional breakpoints (right-click gutter) only pause when an expression is truthy — essential for debugging loops or functions called hundreds of times
# Start / continue debugging
F5
# Stop debugging
Shift+F5
# Restart debugger
Ctrl+Shift+F5 / Cmd+Shift+F5
# Step over (next line)
F10
# Step into (enter function)
F11
# Step out (exit function)
Shift+F11
# Toggle breakpoint on current line
F9
# Open Debug Console
Ctrl+Shift+Y / Cmd+Shift+Y
# Add to Watch
Right-click selection → "Add to Watch"
# Conditional breakpoint
Right-click gutter → "Add Conditional Breakpoint"tasks.json — Basic Setup
Tasks automate build, test, and dev server commands inside VS Code — the default build task runs with Ctrl+Shift+B without opening the task picker
// .vscode/tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "npm run build",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$tsc"]
},
{
"label": "test",
"type": "shell",
"command": "npm test",
"group": {
"kind": "test",
"isDefault": true
},
"presentation": {
"reveal": "always",
"panel": "new"
}
},
{
"label": "dev server",
"type": "shell",
"command": "npm run dev",
"isBackground": true,
"problemMatcher": {
"pattern": { "regexp": "." },
"background": {
"activeOnStart": true,
"beginsPattern": "starting",
"endsPattern": "ready"
}
}
}
]
}Task Variables & Input
Input variables prompt for values at runtime — use "pickString" for a dropdown or "promptString" for free text, referenced as ${input:id} in commands
// Predefined variables available in tasks.json
// ${workspaceFolder} — /home/user/my-project
// ${file} — currently open file
// ${fileBasename} — filename.ext
// ${fileExtname} — .ext
// ${fileDirname} — directory of open file
// ${relativeFile} — src/index.ts
// ${selectedText} — current editor selection
// ${env:MY_VAR} — environment variable
// User input prompts
{
"version": "2.0.0",
"inputs": [
{
"id": "environment",
"type": "pickString",
"description": "Select deployment environment",
"options": ["staging", "production"],
"default": "staging"
}
],
"tasks": [
{
"label": "deploy",
"type": "shell",
"command": "npm run deploy:${input:environment}"
}
]
}Snippet File Format
Snippet placeholders use ${N:default} syntax — Tab cycles through them, ${0} marks the final cursor position. Use $TM_FILENAME, $CURRENT_YEAR, etc. for dynamic values
// File: .vscode/<name>.code-snippets (workspace)
// or: ~/.config/Code/User/snippets/<lang>.json (user)
{
"Console log": {
"scope": "javascript,typescript",
"prefix": "cl",
"body": [
"console.log('${1:label}:', ${2:value});"
],
"description": "Quick console.log with label"
},
"React Function Component": {
"scope": "javascriptreact,typescriptreact",
"prefix": "rfc",
"body": [
"export default function ${1:ComponentName}() {",
" return (",
" <div>",
" ${2}",
" </div>",
" );",
"}"
],
"description": "React function component"
},
"TODO comment": {
"prefix": "todo",
"body": ["// TODO: ${1:description}"],
"description": "Add a TODO comment"
}
}Built-in Snippet Variables
Snippet variables like $CLIPBOARD and $TM_FILENAME_BASE make snippets context-aware — great for file headers, license blocks, or test boilerplate
// Dynamic variables usable in snippet body:
$TM_FILENAME // current filename (index.ts)
$TM_FILENAME_BASE // filename without extension (index)
$TM_DIRECTORY // directory of current file
$TM_FILEPATH // full file path
$RELATIVE_FILEPATH // relative to workspace root
$CLIPBOARD // current clipboard content
$WORKSPACE_NAME // workspace folder name
// Date/time
$CURRENT_YEAR // 2025
$CURRENT_MONTH // 04
$CURRENT_DATE // 18
$CURRENT_HOUR // 14
$CURRENT_MINUTE // 32
$CURRENT_SECONDS_UNIX // unix timestamp
// Random
$RANDOM // 6-digit random decimal
$RANDOM_HEX // 6-digit random hexSource Control Panel
The inline diff view (click any changed file) is one of VS Code's best features — it shows exactly what changed with full syntax highlighting and edit support
# Open Source Control panel
Ctrl+Shift+G / Cmd+Shift+G
# Stage file
Click "+" next to file in Source Control panel
# Unstage file
Click "-" next to staged file
# Discard changes (single file)
Click "↩" next to file (Discard Changes)
# Stage all changes
Click "+" next to "Changes" header
# Commit staged changes
Ctrl+Enter / Cmd+Enter (in message box)
# Commit with message (command line style)
git.commitAll via Command Palette
# Open diff view
Click any changed file in Source Control.gitignore Patterns
Commit .vscode/settings.json, tasks.json, launch.json, and extensions.json to share team config — but gitignore .vscode/*.vsdb and personal preference files
# Standard patterns
node_modules/
dist/
build/
.env
.env.local
.env.*.local
*.log
npm-debug.log*
# OS files
.DS_Store
Thumbs.db
# IDE files (or don't — team preference)
.vscode/
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# Language-specific
__pycache__/
*.py[cod]
*.class
*.jar
target/
.gradle/Recommended extensions.json
Commit .vscode/extensions.json so teammates get prompted to install the same extensions — keeps the team aligned without forcing installations
// .vscode/extensions.json
// Teammates see "Install Recommended Extensions" prompt
{
"recommendations": [
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"eamodio.gitlens",
"ms-vsliveshare.vsliveshare",
"streetsidesoftware.code-spell-checker",
"christian-kohler.path-intellisense",
"ms-azuretools.vscode-docker",
"bradlc.vscode-tailwindcss",
"svelte.svelte-vscode",
"ms-python.python"
],
"unwantedRecommendations": []
}Terminal Shortcuts
Split terminals (Ctrl+Shift+5) let you run dev server and git commands side-by-side — toggle the whole panel with Ctrl+J without losing your place in the editor
# Open new terminal
Ctrl+` / Cmd+`
# Create new terminal instance
Ctrl+Shift+` / Cmd+Shift+`
# Kill terminal
Ctrl+Shift+delete (or trash icon)
# Toggle terminal panel
Ctrl+J / Cmd+J
# Split terminal
Ctrl+Shift+5 / Cmd+\
# Switch between terminals
Ctrl+PageUp / PageDown
Cmd+Option+Left / Right (Mac)
# Scroll terminal
Ctrl+Shift+Up / Down
Shift+PageUp / PageDown
# Clear terminal
Ctrl+K / Cmd+KTerminal Profile Configuration
Set up multiple terminal profiles (bash, zsh, PowerShell, WSL) so you can quickly open the right shell for the task — use the "+" dropdown to choose a profile
// settings.json — configure terminal shells
{
// Default shell per OS
"terminal.integrated.defaultProfile.windows": "PowerShell",
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.defaultProfile.osx": "zsh",
// Custom profiles
"terminal.integrated.profiles.windows": {
"Git Bash": {
"source": "Git Bash"
},
"WSL Ubuntu": {
"path": "wsl.exe",
"args": ["-d", "Ubuntu"]
}
},
// Environment variables
"terminal.integrated.env.osx": {
"NODE_ENV": "development"
},
// Font and appearance
"terminal.integrated.fontSize": 13,
"terminal.integrated.fontFamily": "MesloLGS NF",
"terminal.integrated.cursorStyle": "line",
"terminal.integrated.gpuAcceleration": "on"
}Developer Productivity
GitLens (eamodio.gitlens) and Error Lens (usernamehw.errorlens) are the highest-impact productivity extensions — inline blame and inline errors eliminate context-switching
# Must-have extensions (install via Extensions panel or CLI)
code --install-extension esbenp.prettier-vscode
code --install-extension dbaeumer.vscode-eslint
code --install-extension eamodio.gitlens
code --install-extension ms-vsliveshare.vsliveshare
code --install-extension christian-kohler.path-intellisense
code --install-extension streetsidesoftware.code-spell-checker
code --install-extension usernamehw.errorlens
code --install-extension wix.vscode-import-cost
# Theme and appearance
code --install-extension zhuangtongfa.material-theme
code --install-extension pkief.material-icon-theme
# AI coding
code --install-extension GitHub.copilot
code --install-extension GitHub.copilot-chatLanguage & Framework Extensions
Install language extensions from the official publisher (e.g., ms-python.python, golang.go, rust-lang.rust-analyzer) for the best IntelliSense and debugging support
# JavaScript / TypeScript
code --install-extension ms-vscode.vscode-typescript-next
code --install-extension bradlc.vscode-tailwindcss
code --install-extension dsznajder.es7-react-js-snippets
# Python
code --install-extension ms-python.python
code --install-extension ms-python.black-formatter
code --install-extension ms-python.pylance
# Go
code --install-extension golang.go
# Rust
code --install-extension rust-lang.rust-analyzer
# Docker / Cloud
code --install-extension ms-azuretools.vscode-docker
code --install-extension ms-vscode-remote.remote-containers
code --install-extension hashicorp.terraform
# Database
code --install-extension ckolkman.vscode-postgres
code --install-extension mtxr.sqltoolsRemote Development
Remote-SSH lets you edit files, run terminals, and debug on a remote server as if it were local — all extensions run on the remote, so IntelliSense is fully accurate
# Remote development extension pack
code --install-extension ms-vscode-remote.vscode-remote-extensionpack
# Includes:
# - Remote - SSH (ms-vscode-remote.remote-ssh)
# - Remote - Containers (ms-vscode-remote.remote-containers)
# - Remote - WSL (ms-vscode-remote.remote-wsl)
# Connect via SSH
# 1. Open Command Palette → "Remote-SSH: Connect to Host..."
# 2. Enter: user@hostname
# 3. VS Code reconnects entirely on the remote machine
# SSH config example (~/.ssh/config)
# Host myserver
# HostName 192.168.1.100
# User ubuntu
# IdentityFile ~/.ssh/id_rsa
# ForwardAgent yesMulti-Root Workspace (.code-workspace)
Multi-root workspaces let you open multiple unrelated folders in one VS Code window — use ${workspaceFolder:Name} to reference a specific root in tasks and launch configs
// my-project.code-workspace
{
"folders": [
{
"name": "Frontend",
"path": "./frontend"
},
{
"name": "Backend",
"path": "./backend"
},
{
"name": "Shared Libs",
"path": "../shared"
}
],
"settings": {
"editor.fontSize": 14,
"files.exclude": {
"node_modules": true
}
},
"extensions": {
"recommendations": [
"esbenp.prettier-vscode"
]
},
"launch": {
"configurations": [
{
"name": "Full Stack",
"type": "node",
"request": "launch",
"program": "${workspaceFolder:Backend}/src/index.js"
}
]
}
}Workspace Trust & Security
Workspace Trust protects against malicious settings.json or tasks.json in cloned repos — leave it enabled and only trust repos you own or have reviewed
# Workspace Trust — VS Code asks on first open
# "Trusted" mode: all features enabled
# "Restricted" mode: extensions disabled, no task auto-run
# Disable trust prompt for local folders (settings.json)
{
"security.workspace.trust.enabled": false
}
# View trusted workspaces
# Command Palette → "Manage Workspace Trust"
# Trust current workspace from terminal
# Command Palette → "Workspaces: Trust Workspace"
# Per-folder trust in multi-root
# Each folder can have its own trust levelIntelliSense Triggers
Ctrl+Shift+Space shows parameter hints mid-call — use it when you've already typed the function name and need a reminder of argument types and order
# Trigger suggestions manually
Ctrl+Space / Cmd+Space
# Trigger parameter hints (function signature)
Ctrl+Shift+Space / Cmd+Shift+Space
# Show hover documentation
Hover over symbol (or press Ctrl+K Ctrl+I)
# Peek at definition inline
Alt+F12 / Option+F12
# Open definition in new tab
F12
# Go to type definition
Command Palette → "Go to Type Definition"
# Find all references
Shift+F12
# Call hierarchy (who calls this?)
Shift+Alt+H / Shift+Option+Hjsconfig.json / tsconfig.json
A jsconfig.json at the project root enables path alias IntelliSense, type checking for JS files, and accurate auto-imports — essential for large JS projects
// jsconfig.json — enables full JS IntelliSense
{
"compilerOptions": {
"module": "ESNext",
"moduleResolution": "bundler",
"target": "ESNext",
"jsx": "react-jsx",
"baseUrl": ".",
"paths": {
"@/*": ["src/*"],
"@components/*": ["src/components/*"]
},
"checkJs": true,
"strict": false
},
"include": ["src"],
"exclude": ["node_modules", "dist"]
}
// tsconfig.json — TypeScript projects
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "bundler",
"strict": true,
"paths": { "@/*": ["./src/*"] }
}
}🔧 What is VS Code?
Visual Studio Code is a free, open-source code editor built by Microsoft, released in 2015. It has rapidly become the world's most popular editor — used by over 73% of developers according to the Stack Overflow Developer Survey. Built on Electron with the Monaco editor at its core, VS Code offers the speed of a text editor with features approaching a full IDE.
Unlike Visual Studio (the full IDE), VS Code is lightweight and cross-platform (Windows, macOS, Linux). Its killer feature is a rich extension ecosystem with over 50,000 extensions covering every language, framework, and workflow.
🚀 Key Features
- ✓IntelliSense: Smart completions, parameter hints, and type info
- ✓Built-in Git: Stage, commit, diff, and branch without leaving the editor
- ✓Integrated debugger: Set breakpoints and inspect variables visually
- ✓Extensions: 50,000+ extensions for languages, themes, and tools
- ✓Remote development: Edit files on SSH servers, containers, or WSL
- ✓Live Share: Real-time collaborative editing and debugging
💡 Why Developers Love It
- •Fast startup: Opens in under a second even on large projects
- •Highly customizable: Every keybinding, theme, and behavior is configurable
- •Free and open source: MIT-licensed codebase on GitHub
- •Multi-language: First-class support for JS, TS, Python, Go, Rust, Java, C++
- •Web version: Run at vscode.dev without installing anything
- •Active development: Monthly releases with new features
VS Code Best Practices
🔧 Commit .vscode/ to Git
Share settings.json, tasks.json, launch.json, and extensions.json with your team. Exclude personal preference files like *.vsdb
⌨️ Learn 5 Shortcuts
Master Ctrl+P, Ctrl+Shift+P, Ctrl+D, Alt+Up/Down, and F2. These alone will 2x your editing speed
📦 Keep Extensions Lean
Too many extensions slow startup. Disable (not uninstall) extensions per workspace rather than globally installing everything
🎨 Use Workspace Themes
Set different color themes per project type in workspace settings — helps visually distinguish between frontend, backend, and config workspaces
🔍 Use Error Lens
Install "Error Lens" extension to see errors/warnings inline next to the code — eliminates the need to hover or check the Problems panel
💾 Enable Format on Save
Set "editor.formatOnSave": true with a consistent formatter (Prettier) across the team — eliminates all formatting debates in code review