VS Code Extensions Skill
Master VS Code productivity with essential extensions, optimal settings, custom keybindings, and workspace configuration. This skill covers extension recommendations by category, settings sync, profiles, snippets, tasks, and debugging configurations.
When to Use This Skill
USE when:
-
Setting up a new development environment
-
Optimizing VS Code for specific languages/frameworks
-
Creating consistent team configurations
-
Building custom snippets and tasks
-
Configuring debugging for complex applications
-
Managing multiple project profiles
-
Automating repetitive editor tasks
DON'T USE when:
-
Need full IDE features (use JetBrains IDEs)
-
Working exclusively in terminal (use vim/neovim)
-
Resource-constrained environments (use lighter editors)
-
Pair programming with different editors (standardize first)
Prerequisites
Installation
macOS
brew install --cask visual-studio-code
Linux (Ubuntu/Debian)
sudo snap install code --classic
Or download from https://code.visualstudio.com/
Windows
winget install Microsoft.VisualStudioCode
Or download from https://code.visualstudio.com/
Verify installation
code --version
Open VS Code from terminal
code . # Open current directory code file.txt # Open file code --diff file1 file2 # Diff two files code --goto file:10:5 # Open file at line 10, column 5
CLI Extension Management
List installed extensions
code --list-extensions
Install extension
code --install-extension ms-python.python
Uninstall extension
code --uninstall-extension extension-id
Install multiple extensions from file
cat extensions.txt | xargs -L 1 code --install-extension
Export extensions list
code --list-extensions > extensions.txt
Install extensions on new machine
cat extensions.txt | xargs -L 1 code --install-extension
Core Capabilities
- Essential Extensions by Category
Create extensions installation script
cat > install-extensions.sh << 'EOF' #!/bin/bash
ABOUTME: Install curated VS Code extensions by category
ABOUTME: Run with category argument: ./install-extensions.sh python
install_base() { # Core productivity code --install-extension esbenp.prettier-vscode code --install-extension dbaeumer.vscode-eslint code --install-extension editorconfig.editorconfig code --install-extension streetsidesoftware.code-spell-checker code --install-extension usernamehw.errorlens code --install-extension gruntfuggly.todo-tree code --install-extension aaron-bond.better-comments code --install-extension christian-kohler.path-intellisense
# Git
code --install-extension eamodio.gitlens
code --install-extension mhutchie.git-graph
# Theme and icons
code --install-extension pkief.material-icon-theme
code --install-extension github.github-vscode-theme
}
install_python() { code --install-extension ms-python.python code --install-extension ms-python.vscode-pylance code --install-extension ms-python.black-formatter code --install-extension charliermarsh.ruff code --install-extension ms-python.debugpy code --install-extension njpwerner.autodocstring code --install-extension littlefoxteam.vscode-python-test-adapter }
install_javascript() { code --install-extension esbenp.prettier-vscode code --install-extension dbaeumer.vscode-eslint code --install-extension dsznajder.es7-react-js-snippets code --install-extension bradlc.vscode-tailwindcss code --install-extension prisma.prisma code --install-extension wallabyjs.quokka-vscode }
install_typescript() { install_javascript code --install-extension ms-vscode.vscode-typescript-next code --install-extension pmneo.tsimporter code --install-extension stringham.move-ts }
install_rust() { code --install-extension rust-lang.rust-analyzer code --install-extension serayuzgur.crates code --install-extension tamasfe.even-better-toml code --install-extension vadimcn.vscode-lldb }
install_go() { code --install-extension golang.go code --install-extension zxh404.vscode-proto3 }
install_docker() { code --install-extension ms-azuretools.vscode-docker code --install-extension ms-vscode-remote.remote-containers code --install-extension ms-kubernetes-tools.vscode-kubernetes-tools code --install-extension redhat.vscode-yaml }
install_web() { code --install-extension ritwickdey.liveserver code --install-extension formulahendry.auto-rename-tag code --install-extension pranaygp.vscode-css-peek code --install-extension zignd.html-css-class-completion code --install-extension ecmel.vscode-html-css }
install_data() { code --install-extension ms-toolsai.jupyter code --install-extension mechatroner.rainbow-csv code --install-extension randomfractalsinc.vscode-data-preview code --install-extension mtxr.sqltools code --install-extension cweijan.vscode-database-client2 }
install_remote() { code --install-extension ms-vscode-remote.remote-ssh code --install-extension ms-vscode-remote.remote-containers code --install-extension ms-vscode-remote.remote-wsl code --install-extension ms-vscode.remote-explorer }
install_ai() { code --install-extension github.copilot code --install-extension github.copilot-chat code --install-extension continue.continue }
Main
case "$1" in base) install_base ;; python) install_base && install_python ;; javascript|js) install_base && install_javascript ;; typescript|ts) install_base && install_typescript ;; rust) install_base && install_rust ;; go) install_base && install_go ;; docker) install_base && install_docker ;; web) install_base && install_web ;; data) install_base && install_data ;; remote) install_remote ;; ai) install_ai ;; all) install_base && install_python && install_typescript && install_docker && install_remote ;; *) echo "Usage: $0 {base|python|javascript|typescript|rust|go|docker|web|data|remote|ai|all}" exit 1 ;; esac
echo "Extensions installed successfully!" EOF chmod +x install-extensions.sh
- Settings Configuration
// settings.json - User settings // Location: ~/.config/Code/User/settings.json (Linux) // ~/Library/Application Support/Code/User/settings.json (macOS) // %APPDATA%\Code\User\settings.json (Windows) { // Editor appearance "editor.fontSize": 14, "editor.fontFamily": "'JetBrains Mono', 'Fira Code', 'SF Mono', Consolas, monospace", "editor.fontLigatures": true, "editor.lineHeight": 1.6, "editor.letterSpacing": 0.5, "editor.cursorBlinking": "smooth", "editor.cursorSmoothCaretAnimation": "on", "editor.smoothScrolling": true,
// Editor behavior
"editor.lineNumbers": "relative",
"editor.rulers": [80, 120],
"editor.wordWrap": "off",
"editor.minimap.enabled": false,
"editor.renderWhitespace": "boundary",
"editor.bracketPairColorization.enabled": true,
"editor.guides.bracketPairs": "active",
"editor.stickyScroll.enabled": true,
"editor.inlineSuggest.enabled": true,
// Code formatting
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
"source.organizeImports": "explicit"
},
// Tab and indentation
"editor.tabSize": 4,
"editor.insertSpaces": true,
"editor.detectIndentation": true,
"editor.trimAutoWhitespace": true,
// Search and navigation
"editor.quickSuggestions": {
"other": true,
"comments": false,
"strings": true
},
"editor.suggestSelection": "first",
"editor.acceptSuggestionOnEnter": "on",
"editor.snippetSuggestions": "top",
// Files
"files.autoSave": "onFocusChange",
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
"files.trimFinalNewlines": true,
"files.exclude": {
"**/.git": true,
"**/.DS_Store": true,
"**/node_modules": true,
"**/__pycache__": true,
"**/.pytest_cache": true,
"**/venv": true,
"**/.venv": true
},
"files.watcherExclude": {
"**/node_modules/**": true,
"**/.git/objects/**": true
},
// Search
"search.exclude": {
"**/node_modules": true,
"**/dist": true,
"**/build": true,
"**/coverage": true,
"**/.next": true
},
"search.useIgnoreFiles": true,
"search.smartCase": true,
// Terminal
"terminal.integrated.fontSize": 13,
"terminal.integrated.fontFamily": "'JetBrains Mono', 'MesloLGS NF', monospace",
"terminal.integrated.cursorStyle": "line",
"terminal.integrated.defaultProfile.osx": "zsh",
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.scrollback": 10000,
// Git
"git.autofetch": true,
"git.confirmSync": false,
"git.enableSmartCommit": true,
"git.openRepositoryInParentFolders": "always",
"gitlens.currentLine.enabled": true,
"gitlens.hovers.currentLine.over": "line",
// Workbench
"workbench.startupEditor": "none",
"workbench.editor.enablePreview": false,
"workbench.editor.tabCloseButton": "right",
"workbench.colorTheme": "GitHub Dark Default",
"workbench.iconTheme": "material-icon-theme",
"workbench.tree.indent": 20,
"workbench.tree.renderIndentGuides": "always",
// Breadcrumbs
"breadcrumbs.enabled": true,
"breadcrumbs.filePath": "on",
// Explorer
"explorer.confirmDelete": false,
"explorer.confirmDragAndDrop": false,
"explorer.compactFolders": false,
"explorer.sortOrder": "type",
// Zen Mode
"zenMode.hideLineNumbers": false,
"zenMode.centerLayout": true,
// Extensions
"errorLens.enabled": true,
"errorLens.enabledDiagnosticLevels": ["error", "warning"],
"todo-tree.general.tags": ["TODO", "FIXME", "BUG", "HACK", "XXX", "NOTE"],
// Telemetry
"telemetry.telemetryLevel": "off"
}
- Language-Specific Settings
// settings.json - Language-specific overrides { // Python "[python]": { "editor.defaultFormatter": "ms-python.black-formatter", "editor.formatOnSave": true, "editor.tabSize": 4, "editor.codeActionsOnSave": { "source.organizeImports": "explicit" } }, "python.analysis.typeCheckingMode": "basic", "python.analysis.autoImportCompletions": true, "python.terminal.activateEnvironment": true, "python.testing.pytestEnabled": true, "python.testing.unittestEnabled": false, "ruff.organizeImports": true,
// JavaScript/TypeScript
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2
},
"[javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2
},
"typescript.preferences.importModuleSpecifier": "relative",
"typescript.updateImportsOnFileMove.enabled": "always",
// JSON
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2
},
// YAML
"[yaml]": {
"editor.defaultFormatter": "redhat.vscode-yaml",
"editor.tabSize": 2,
"editor.autoIndent": "advanced"
},
"yaml.schemas": {
"https://json.schemastore.org/github-workflow.json": ".github/workflows/*.yml"
},
// Markdown
"[markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.wordWrap": "on",
"editor.quickSuggestions": {
"other": true,
"comments": false,
"strings": true
}
},
"markdown.preview.fontSize": 14,
// HTML/CSS
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2
},
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2
},
"[scss]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2
},
// Go
"[go]": {
"editor.defaultFormatter": "golang.go",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "always"
}
},
"go.lintTool": "golangci-lint",
"go.testOnSave": true,
// Rust
"[rust]": {
"editor.defaultFormatter": "rust-lang.rust-analyzer",
"editor.formatOnSave": true
},
"rust-analyzer.checkOnSave.command": "clippy",
// Shell
"[shellscript]": {
"editor.defaultFormatter": "foxundermoon.shell-format",
"editor.tabSize": 4
}
}
- Keybindings Configuration
// keybindings.json // Location: ~/.config/Code/User/keybindings.json (Linux) [ // Navigation { "key": "ctrl+shift+e", "command": "workbench.view.explorer" }, { "key": "ctrl+shift+g", "command": "workbench.view.scm" }, { "key": "ctrl+shift+f", "command": "workbench.view.search" }, { "key": "ctrl+shift+d", "command": "workbench.view.debug" }, { "key": "ctrl+shift+x", "command": "workbench.view.extensions" },
// Terminal
{
"key": "ctrl+`",
"command": "workbench.action.terminal.toggleTerminal"
},
{
"key": "ctrl+shift+`",
"command": "workbench.action.terminal.new"
},
{
"key": "ctrl+shift+c",
"command": "workbench.action.terminal.openNativeConsole"
},
// Editor navigation
{
"key": "ctrl+tab",
"command": "workbench.action.nextEditor"
},
{
"key": "ctrl+shift+tab",
"command": "workbench.action.previousEditor"
},
{
"key": "alt+left",
"command": "workbench.action.navigateBack"
},
{
"key": "alt+right",
"command": "workbench.action.navigateForward"
},
// Line manipulation
{
"key": "alt+up",
"command": "editor.action.moveLinesUpAction",
"when": "editorTextFocus && !editorReadonly"
},
{
"key": "alt+down",
"command": "editor.action.moveLinesDownAction",
"when": "editorTextFocus && !editorReadonly"
},
{
"key": "shift+alt+up",
"command": "editor.action.copyLinesUpAction",
"when": "editorTextFocus && !editorReadonly"
},
{
"key": "shift+alt+down",
"command": "editor.action.copyLinesDownAction",
"when": "editorTextFocus && !editorReadonly"
},
{
"key": "ctrl+shift+k",
"command": "editor.action.deleteLines",
"when": "editorTextFocus && !editorReadonly"
},
// Selection
{
"key": "ctrl+l",
"command": "expandLineSelection",
"when": "editorTextFocus"
},
{
"key": "ctrl+d",
"command": "editor.action.addSelectionToNextFindMatch",
"when": "editorFocus"
},
{
"key": "ctrl+shift+l",
"command": "editor.action.selectHighlights",
"when": "editorFocus"
},
// Multi-cursor
{
"key": "ctrl+alt+up",
"command": "editor.action.insertCursorAbove",
"when": "editorTextFocus"
},
{
"key": "ctrl+alt+down",
"command": "editor.action.insertCursorBelow",
"when": "editorTextFocus"
},
// Code actions
{
"key": "ctrl+.",
"command": "editor.action.quickFix",
"when": "editorHasCodeActionsProvider && editorTextFocus && !editorReadonly"
},
{
"key": "f2",
"command": "editor.action.rename",
"when": "editorHasRenameProvider && editorTextFocus && !editorReadonly"
},
{
"key": "f12",
"command": "editor.action.revealDefinition",
"when": "editorHasDefinitionProvider && editorTextFocus"
},
{
"key": "alt+f12",
"command": "editor.action.peekDefinition",
"when": "editorHasDefinitionProvider && editorTextFocus"
},
{
"key": "shift+f12",
"command": "editor.action.goToReferences",
"when": "editorHasReferenceProvider && editorTextFocus"
},
// Formatting
{
"key": "shift+alt+f",
"command": "editor.action.formatDocument",
"when": "editorTextFocus && !editorReadonly"
},
{
"key": "ctrl+k ctrl+f",
"command": "editor.action.formatSelection",
"when": "editorHasDocumentSelectionFormattingProvider && editorTextFocus && !editorReadonly"
},
// Comments
{
"key": "ctrl+/",
"command": "editor.action.commentLine",
"when": "editorTextFocus && !editorReadonly"
},
{
"key": "shift+alt+a",
"command": "editor.action.blockComment",
"when": "editorTextFocus && !editorReadonly"
},
// Fold/unfold
{
"key": "ctrl+shift+[",
"command": "editor.fold",
"when": "editorTextFocus"
},
{
"key": "ctrl+shift+]",
"command": "editor.unfold",
"when": "editorTextFocus"
},
{
"key": "ctrl+k ctrl+0",
"command": "editor.foldAll"
},
{
"key": "ctrl+k ctrl+j",
"command": "editor.unfoldAll"
},
// Sidebar
{
"key": "ctrl+b",
"command": "workbench.action.toggleSidebarVisibility"
},
{
"key": "ctrl+shift+b",
"command": "workbench.action.toggleAuxiliaryBar"
},
// Panels
{
"key": "ctrl+j",
"command": "workbench.action.togglePanel"
},
// Files
{
"key": "ctrl+n",
"command": "workbench.action.files.newUntitledFile"
},
{
"key": "ctrl+w",
"command": "workbench.action.closeActiveEditor"
},
{
"key": "ctrl+shift+w",
"command": "workbench.action.closeAllEditors"
},
// Git (GitLens)
{
"key": "ctrl+shift+g b",
"command": "gitlens.toggleFileBlame"
},
{
"key": "ctrl+shift+g h",
"command": "gitlens.showQuickFileHistory"
},
// Custom productivity
{
"key": "ctrl+shift+o",
"command": "workbench.action.gotoSymbol"
},
{
"key": "ctrl+t",
"command": "workbench.action.showAllSymbols"
}
]
- Custom Snippets
// snippets/python.json // Location: ~/.config/Code/User/snippets/python.json { "Python Main Block": { "prefix": "main", "body": [ "def main():", " ${1:pass}", "", "", "if name == "main":", " main()" ], "description": "Python main block" }, "Python Class": { "prefix": "class", "body": [ "class ${1:ClassName}:", " """${2:Class description.}"""", "", " def init(self, ${3:args}):", " ${4:pass}", "", " def ${5:method}(self):", " ${6:pass}" ], "description": "Python class definition" }, "Python Dataclass": { "prefix": "dataclass", "body": [ "from dataclasses import dataclass", "", "", "@dataclass", "class ${1:ClassName}:", " """${2:Description.}"""", "", " ${3:field}: ${4:str}" ], "description": "Python dataclass" }, "Python Type Hints": { "prefix": "typed", "body": [ "def ${1:function_name}(", " ${2:param}: ${3:str}", ") -> ${4:None}:", " """${5:Description.}"""", " ${6:pass}" ], "description": "Typed function signature" }, "Python Pytest Test": { "prefix": "test", "body": [ "def test_${1:name}():", " # Arrange", " ${2:pass}", "", " # Act", " ${3:result = None}", "", " # Assert", " assert ${4:result is not None}" ], "description": "Pytest test function" }, "ABOUTME Comment": { "prefix": "aboutme", "body": [ "# ABOUTME: ${1:Brief description of file purpose}", "# ABOUTME: ${2:Additional detail about what the file does}" ], "description": "ABOUTME file header comment" } }
// snippets/typescript.json { "React Functional Component": { "prefix": "rfc", "body": [ "interface ${1:ComponentName}Props {", " ${2:prop}: ${3:string};", "}", "", "export function ${1:ComponentName}({ ${2:prop} }: ${1:ComponentName}Props) {", " return (", " <div>", " ${4:content}", " </div>", " );", "}" ], "description": "React Functional Component with TypeScript" }, "React useState Hook": { "prefix": "usestate", "body": [ "const [${1:state}, set${1/(.*)/${1:/capitalize}/}] = useState<${2:string}>(${3:''});" ], "description": "React useState hook with TypeScript" }, "React useEffect Hook": { "prefix": "useeffect", "body": [ "useEffect(() => {", " ${1:// effect}", "", " return () => {", " ${2:// cleanup}", " };", "}, [${3:dependencies}]);" ], "description": "React useEffect hook" }, "TypeScript Interface": { "prefix": "interface", "body": [ "interface ${1:InterfaceName} {", " ${2:property}: ${3:type};", "}" ], "description": "TypeScript interface" }, "TypeScript Type": { "prefix": "type", "body": [ "type ${1:TypeName} = {", " ${2:property}: ${3:type};", "};" ], "description": "TypeScript type alias" }, "Async Function": { "prefix": "asyncfn", "body": [ "async function ${1:functionName}(${2:params}): Promise<${3:void}> {", " try {", " ${4:// implementation}", " } catch (error) {", " console.error(error);", " throw error;", " }", "}" ], "description": "Async function with error handling" } }
- Workspace Configuration
// .vscode/settings.json - Project-specific settings { // Project-specific formatters "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true,
// Python project
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
"python.testing.pytestPath": "${workspaceFolder}/.venv/bin/pytest",
"python.testing.pytestArgs": ["tests"],
"python.analysis.extraPaths": ["${workspaceFolder}/src"],
// File associations
"files.associations": {
"*.env.*": "dotenv",
"Dockerfile.*": "dockerfile"
},
// Search exclusions
"search.exclude": {
"**/node_modules": true,
"**/.venv": true,
"**/dist": true,
"**/coverage": true
},
// Ruler for this project
"editor.rulers": [88, 120],
// Custom dictionary words
"cSpell.words": [
"pytest",
"asyncio",
"pydantic"
]
}
// .vscode/extensions.json - Recommended extensions { "recommendations": [ "ms-python.python", "ms-python.vscode-pylance", "ms-python.black-formatter", "charliermarsh.ruff", "esbenp.prettier-vscode", "dbaeumer.vscode-eslint", "eamodio.gitlens", "usernamehw.errorlens" ], "unwantedRecommendations": [] }
// .vscode/tasks.json - Build and run tasks { "version": "2.0.0", "tasks": [ { "label": "Run Tests", "type": "shell", "command": "pytest", "args": ["tests/", "-v", "--cov=src"], "group": { "kind": "test", "isDefault": true }, "presentation": { "reveal": "always", "panel": "new" }, "problemMatcher": [] }, { "label": "Lint", "type": "shell", "command": "ruff", "args": ["check", "src/"], "group": "build", "presentation": { "reveal": "silent", "panel": "shared" }, "problemMatcher": { "owner": "ruff", "fileLocation": ["relative", "${workspaceFolder}"], "pattern": { "regexp": "^(.+):(\d+):(\d+): (\w+) (.+)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } } }, { "label": "Format", "type": "shell", "command": "black", "args": ["src/", "tests/"], "group": "build", "presentation": { "reveal": "silent" } }, { "label": "Build Docker", "type": "shell", "command": "docker", "args": ["build", "-t", "${workspaceFolderBasename}:latest", "."], "group": "build", "presentation": { "reveal": "always" } }, { "label": "Start Dev Server", "type": "shell", "command": "python", "args": ["-m", "uvicorn", "src.main:app", "--reload"], "isBackground": true, "problemMatcher": { "pattern": { "regexp": "." }, "background": { "activeOnStart": true, "beginsPattern": "^.Uvicorn running.$", "endsPattern": "^.Application startup complete.$" } } } ] }
// .vscode/launch.json - Debug configurations { "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "debugpy", "request": "launch", "program": "${file}", "console": "integratedTerminal", "cwd": "${workspaceFolder}" }, { "name": "Python: FastAPI", "type": "debugpy", "request": "launch", "module": "uvicorn", "args": ["src.main:app", "--reload", "--port", "8000"], "jinja": true, "justMyCode": true, "env": { "PYTHONPATH": "${workspaceFolder}" } }, { "name": "Python: pytest", "type": "debugpy", "request": "launch", "module": "pytest", "args": ["tests/", "-v", "-s"], "console": "integratedTerminal" }, { "name": "Node: Current File", "type": "node", "request": "launch", "program": "${file}", "console": "integratedTerminal" }, { "name": "Node: npm start", "type": "node", "request": "launch", "runtimeExecutable": "npm", "runtimeArgs": ["run", "dev"], "console": "integratedTerminal" }, { "name": "Attach to Docker", "type": "debugpy", "request": "attach", "connect": { "host": "localhost", "port": 5678 }, "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "/app" } ] } ], "compounds": [ { "name": "Full Stack", "configurations": ["Python: FastAPI", "Node: npm start"] } ] }
- Profile Management
Create profiles for different workflows
Settings -> Profiles -> Create Profile
Export profile
code --profile Python --export-default-profile > python-profile.json
Import profile
code --profile Python --import-profile python-profile.json
Switch profiles via command palette
Cmd/Ctrl+Shift+P -> Profiles: Switch Profile
Profile examples:
- "Python" - Python extensions and settings
- "Web" - JavaScript/TypeScript/React
- "DevOps" - Docker, Kubernetes, YAML
- "Minimal" - Basic editing only
- "Writing" - Markdown, spell check
Integration Examples
Git Workflow Integration
// settings.json - Git integration { "git.autofetch": true, "git.confirmSync": false, "git.enableSmartCommit": true, "git.postCommitCommand": "push", "git.fetchOnPull": true, "git.pruneOnFetch": true,
// GitLens settings
"gitlens.views.repositories.branches.layout": "tree",
"gitlens.views.commits.files.layout": "tree",
"gitlens.codeLens.enabled": true,
"gitlens.codeLens.recentChange.enabled": true,
"gitlens.currentLine.enabled": true,
"gitlens.hovers.currentLine.over": "line",
"gitlens.blame.format": "${author|10} ${date}",
"gitlens.blame.heatmap.enabled": true
}
Remote Development
// settings.json - Remote development { // SSH "remote.SSH.remotePlatform": { "server1": "linux", "server2": "linux" }, "remote.SSH.defaultExtensions": [ "ms-python.python", "ms-python.vscode-pylance" ],
// Containers
"dev.containers.defaultExtensions": [
"ms-python.python",
"eamodio.gitlens"
],
// WSL
"remote.WSL.fileWatcher.polling": true
}
// .devcontainer/devcontainer.json { "name": "Python Dev", "image": "mcr.microsoft.com/devcontainers/python:3.12", "features": { "ghcr.io/devcontainers/features/docker-in-docker:2": {} }, "customizations": { "vscode": { "extensions": [ "ms-python.python", "ms-python.vscode-pylance", "ms-python.black-formatter", "charliermarsh.ruff" ], "settings": { "python.defaultInterpreterPath": "/usr/local/bin/python" } } }, "postCreateCommand": "pip install -e '.[dev]'", "forwardPorts": [8000] }
Best Practices
- Extension Management
Keep extensions minimal
Review periodically
code --list-extensions | wc -l
Disable per-workspace for unused extensions
Settings -> Extensions -> Disable (Workspace)
Use extension packs wisely
Create custom packs for teams
- Performance Optimization
{ // Reduce file watching "files.watcherExclude": { "/node_modules/": true, "/.git/objects/": true, "/venv/": true },
// Reduce search scope
"search.exclude": {
"**/node_modules": true,
"**/dist": true
},
// Disable heavy features if needed
"editor.minimap.enabled": false,
"editor.codeLens": false,
// Limit suggestions
"editor.quickSuggestions": {
"other": true,
"comments": false,
"strings": false
}
}
- Team Consistency
// .vscode/settings.json - Committed to repo { // Consistent formatting "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode",
// Consistent tab settings
"editor.tabSize": 2,
"editor.insertSpaces": true,
// Consistent line endings
"files.eol": "\n"
}
Troubleshooting
Common Issues
Issue: Extensions not loading
Check extension host logs
Help -> Toggle Developer Tools -> Console
Reinstall extension
code --uninstall-extension extension-id code --install-extension extension-id
Reset VS Code
rm -rf ~/.config/Code/CachedData
Issue: Slow startup
Profile startup
code --prof-startup
Disable extensions
code --disable-extensions
Check extension impact
Help -> Startup Performance
Issue: IntelliSense not working
Restart language server
Cmd/Ctrl+Shift+P -> "Restart Extension Host"
Clear workspace cache
rm -rf .vscode/.ropeproject rm -rf pycache
Issue: Settings not applying
Check settings precedence:
1. Workspace settings (.vscode/settings.json)
2. User settings (settings.json)
3. Default settings
View effective settings
Cmd/Ctrl+Shift+P -> "Preferences: Open Settings (JSON)"
Version History
Version Date Changes
1.0.0 2026-01-17 Initial release with comprehensive VS Code configuration
Resources
-
VS Code Documentation
-
VS Code Keybindings Reference
-
Extension Marketplace
-
Snippet Guide
-
Tasks Documentation
-
Debugging Guide
This skill provides production-ready VS Code configurations for maximum developer productivity across multiple languages and frameworks.