VSCode Snippets: Type Less, Code More

Custom snippets save keystrokes and enforce patterns. Here's how to make them.

Why Snippets

How many times have you typed:

import React, { useState, useEffect } from 'react';

function ComponentName() {
  return (
    <div>
      
    </div>
  );
}

export default ComponentName;

With a snippet: type `rfc`, hit Tab, done.

Built-in Snippets

VS Code has snippets for many languages. Type `for` in JavaScript and see suggestions.

But custom snippets are where it gets good.

Creating Snippets

1. `Cmd+Shift+P` → "Preferences: Configure User Snippets" 2. Choose a language (or global) 3. Add your snippets

Snippet Syntax

{
  "React Function Component": {
    "prefix": "rfc",
    "body": [
      "function ${1:ComponentName}() {",
      "  return (",
      "    <div>",
      "      $0",
      "    </div>",
      "  );",
      "}",
      "",
      "export default ${1:ComponentName};"
    ],
    "description": "React function component"
  }
}
  • `prefix`: What you type to trigger
  • `body`: Lines of the snippet
  • `$1`, `$2`: Tab stops with placeholders
  • `$0`: Final cursor position
  • `${1:default}`: Tab stop with default value

My JavaScript Snippets

{
  "Console Log": {
    "prefix": "cl",
    "body": "console.log('$1:', $1);$0"
  },
  
  "Arrow Function": {
    "prefix": "af",
    "body": "const ${1:name} = ($2) => {$0};"
  },
  
  "Async Function": {
    "prefix": "afn",
    "body": [
      "async function ${1:name}($2) {",
      "  $0",
      "}"
    ]
  },
  
  "Try Catch": {
    "prefix": "tc",
    "body": [
      "try {",
      "  $1",
      "} catch (error) {",
      "  console.error(error);",
      "  $0",
      "}"
    ]
  }
}

React Snippets

{
  "useState": {
    "prefix": "us",
    "body": "const [${1:state}, set${1/(.*)/${1:/capitalize}/}] = useState($2);$0"
  },
  
  "useEffect": {
    "prefix": "ue",
    "body": [
      "useEffect(() => {",
      "  $1",
      "}, [$2]);$0"
    ]
  },
  
  "React Component with Props": {
    "prefix": "rfcp",
    "body": [
      "interface ${1:Component}Props {",
      "  $2",
      "}",
      "",
      "function ${1:Component}({ $3 }: ${1:Component}Props) {",
      "  return (",
      "    <div>",
      "      $0",
      "    </div>",
      "  );",
      "}",
      "",
      "export default ${1:Component};"
    ]
  }
}

Advanced: Transforms

{
  "useState with capitalize": {
    "prefix": "ust",
    "body": "const [${1:value}, set${1/(.*)/${1:/capitalize}/}] = useState($2);"
  }
}

Type `ust`, enter `count`, get:

const [count, setCount] = useState();

Tips

1. **Keep them short** - `cl` not `consolelog` 2. **Use transforms** - Auto-capitalize, etc. 3. **Tab stops matter** - Order them logically 4. **Don't overdo it** - Too many snippets = memory overhead

Snippets compound. Minutes saved per day = hours saved per year.

Back to Journal