Skip to content

dandehoon/vscode-generic-expand-selection

Repository files navigation

Generic Expand Selection

VS Code Marketplace Test

Smartly expand or shrink your code selection, recover from misclicks or accidental cursor moves.

Features

Rules

  • Token Expansion: Expands to character tokens with customizable patterns.
  • Quote Expansion: Expands to content within quotes (", ', `).
  • Scope Expansion: Expands to content within open-close pairs ([], {}, ()).
  • Line Expansion: Expands to full line(s) content.
  • Selection History: Remember previous selections for step-by-step shrinking.

Example

Text: const config = { url: 'https://example.com' };

With cursor on `xamp`, next expansions will be:
→ example
→ example.com
→ https://example.com
→ 'https://example.com'
→ url: 'https://example.com'
→ { url: 'https://example.com' }
→ const config = { url: 'https://example.com' }
→ const config = { url: 'https://example.com' };

Usage

Quick Install

Get it on VS Code Marketplace

Commands & Keybindings

Command Default Keybinding Description
genericExpandSelection.expand Ctrl+E (Win/Linux), Cmd+E (Mac) Expand Selection
genericExpandSelection.shrink Ctrl+Shift+E (Win/Linux), Cmd+Shift+E (Mac) Shrink Selection

Tip

Both commands work with single and multiple cursor selections.

Configuration

You can customize how selection expansion works by configuring settings in your VS Code settings.json.

Example: Common Settings

{
  // Token expansion patterns (global)
  "genericExpandSelection.token.patterns": [
    "[a-zA-Z0-9_-]+", // Alphanumeric, underscores, hyphens
    "[a-zA-Z0-9_\\-.]+", // Identifiers with dots
    "[^\\s[\\]{}()\"'`]+" // Non-whitespace, non-bracket
  ],

  // Language-specific overrides
  "[markdown]": {
    // Disable scope expansion in Markdown files to avoid issues with brackets
    "genericExpandSelection.scope.enabled": false
  },
  "[json]": {
    // Disable token expansion in JSON files to focus on quotes and scopes
    "genericExpandSelection.token.enabled": false
  },
  "[go]": {
    // Match partial key:"value" pairs in Go struct tags
    "genericExpandSelection.token.patterns": ["[a-zA-Z0-9]+:\"[^\"]*\""]
  }
}

Development

# Install dependencies
pnpm install

# Type check and lint (TypeScript and ESLint)
pnpm run check

# Run tests (builds TypeScript, runs esbuild, then executes tests)
pnpm run test

# Watch for changes and rebuild
pnpm run watch

# Build, type check, lint, and package extension as out.vsix
pnpm run build

# Build and install the packaged extension locally (outputs out.vsix and installs it)
pnpm run local

License

MIT License