โ† Back to DevBytes

Sublime Text Refactoring: Complete Guide

Introduction to Sublime Text Refactoring

Refactoring is the process of restructuring existing code without changing its external behavior. While many developers associate refactoring with heavyweight IDEs like IntelliJ or Visual Studio, Sublime Text โ€” with its lightning-fast performance and extensible plugin ecosystem โ€” is more than capable of handling sophisticated refactoring workflows. This guide walks you through everything from built-in features to advanced plugin-powered refactoring techniques.

What Is Code Refactoring?

Code refactoring involves modifying the internal structure of code to improve readability, maintainability, and performance while preserving functionality. Common refactoring operations include renaming variables, extracting functions, inlining code, moving blocks between files, and simplifying conditional logic.

Why Refactor in Sublime Text?

Sublime Text offers several advantages for refactoring:

Built-in Refactoring Features

Multi-Cursor Editing

The cornerstone of refactoring in Sublime Text is multi-cursor editing. You can place multiple cursors and edit several locations at once, which is invaluable for renaming variables or updating repeated patterns.

// Select next occurrence:    Ctrl+D  (Cmd+D on Mac)
// Select all occurrences:   Alt+F3  (Ctrl+Cmd+G on Mac)
// Add cursor above/below:   Ctrl+Alt+Up/Down
// Split selection into lines: Ctrl+Shift+L

For example, consider this JavaScript function:

function calculateTotal(price, tax, discount) {
  let total = price + (price * tax);
  total = total - discount;
  return total;
}

If you want to rename total to finalAmount, place your cursor on total, press Ctrl+D repeatedly to select each occurrence, then type the new name. All instances update simultaneously.

Goto Anything for Cross-File Refactoring

Press Ctrl+P to open Goto Anything. This lets you jump between files instantly, which is essential when refactoring code spread across multiple modules.

// Search by filename:        Ctrl+P, then type "user"
// Search symbol in file:     Ctrl+P, then type "user@validate"
// Search line number:        Ctrl+P, then type ":42"
// Search across project:     Ctrl+Shift+F (Find in Files)

Find and Replace with Regular Expressions

For complex refactoring, regex-based find and replace is indispensable. Press Ctrl+H to open the replace panel and toggle regex mode with Alt+R.

Suppose you want to convert var declarations to const across a file:

// Find:    var\s+(\w+)\s*=\s*
// Replace: const $1 = 

This transforms:

var apiKey = "12345";
var timeout = 5000;

Into:

const apiKey = "12345";
const timeout = 5000;

Column Selection and Block Editing

Hold Shift while dragging the middle mouse button, or use Ctrl+Alt+Up/Down to select a column block. This is perfect for refactoring aligned data structures or configuration files.

Essential Refactoring Packages

While built-in features are powerful, installing the right packages transforms Sublime Text into a serious refactoring tool. Install Package Control first (Ctrl+Shift+P โ†’ "Install Package Control"), then add the following packages.

LSP (Language Server Protocol)

The LSP package brings IDE-grade refactoring to Sublime Text by connecting to language servers. It supports rename symbols, go to definition, find references, and code actions.

// Install via Package Control:
// 1. Ctrl+Shift+P
// 2. "Package Control: Install Package"
// 3. Search for "LSP"
// 4. Install a language server, e.g., "LSP-typescript"

Once configured, right-click a symbol and choose LSP: Rename to perform a project-wide rename that respects scope and type information.

SublimeCodeIntel

This package provides intelligent code completion and jump-to-symbol functionality. While less powerful than LSP for refactoring, it is useful for older languages or when a language server is unavailable.

BracketHighlighter

When refactoring nested logic, matching brackets, tags, and quotes is critical. BracketHighlighter visually indicates the opening and closing pairs surrounding your cursor, reducing errors during structural changes.

Alignment

The Alignment package aligns assignments and variable declarations into clean columns. Select the lines and press Ctrl+Alt+A.

Before:

const name = "Alice";
const age = 30;
const isActive = true;

After:

const name     = "Alice";
const age      = 30;
const isActive = true;

Common Refactoring Workflows

Extracting a Function

Extracting a function is one of the most frequent refactoring tasks. Here is a manual workflow in Sublime Text:

Example โ€” before refactoring:

function processOrder(order) {
  let subtotal = 0;
  for (let item of order.items) {
    subtotal += item.price * item.quantity;
  }
  let tax = subtotal * 0.08;
  let total = subtotal + tax;
  console.log("Order total:", total);
}

After extracting the calculation logic:

function calculateSubtotal(items) {
  let subtotal = 0;
  for (let item of items) {
    subtotal += item.price * item.quantity;
  }
  return subtotal;
}

function calculateTotal(subtotal, taxRate) {
  return subtotal + (subtotal * taxRate);
}

function processOrder(order) {
  const subtotal = calculateSubtotal(order.items);
  const total = calculateTotal(subtotal, 0.08);
  console.log("Order total:", total);
}

Renaming Symbols Project-Wide

With LSP installed, renaming a symbol across the entire project is safe and scope-aware. Without LSP, use Find in Files (Ctrl+Shift+F) with word boundaries:

// Find:    \boldUserName\b
// Replace: oldUsername
// Where:   *.js, *.ts

The \b word boundary prevents partial matches inside other identifiers like oldUserNameField.

Inlining a Variable

Inlining replaces a variable reference with its value. Select the assignment, copy the value, then use multi-cursor to replace each usage.

Before:

const taxRate = 0.08;
const tax = subtotal * taxRate;

After:

const tax = subtotal * 0.08;

Moving Code Between Files

When a file grows too large, split it into modules:

Example split:

// utils/math.js
export function calculateSubtotal(items) {
  return items.reduce((sum, item) => sum + item.price * item.quantity, 0);
}

export function calculateTotal(subtotal, taxRate) {
  return subtotal + subtotal * taxRate;
}

// order.js
import { calculateSubtotal, calculateTotal } from "./utils/math.js";

Advanced Techniques

Snippets for Repeated Patterns

Create custom snippets to insert refactored patterns quickly. Go to Tools โ†’ Developer โ†’ New Snippet.

<snippet>
  <content><![CDATA[
const ${1:name} = (${2:params}) => {
  ${3:// body}
};
]]></content>
  <tabTrigger>arrowfn</tabTrigger>
  <scope>source.js</scope>
</snippet>

Type arrowfn and press Tab to expand the template, then tab through the placeholders.

Macros for Repetitive Refactoring

Record a macro with Ctrl+Q to start recording and Ctrl+Q again to stop. Save it under Packages/User and bind it to a shortcut. Macros are ideal for repetitive transformations like converting callback patterns to promises.

Using Build Systems for Validation

After refactoring, validate your code with a build system. Create a .sublime-build file:

{
  "cmd": ["node", "$file"],
  "selector": "source.js",
  "shell": true
}

Press Ctrl+B to run the current file and catch errors introduced during refactoring.

Best Practices

Recommended Package List

Conclusion

Sublime Text may not be a full IDE out of the box, but its combination of speed, multi-cursor editing, regex search, and a vibrant plugin ecosystem makes it a highly effective refactoring environment. By mastering built-in features like Find in Files and multi-cursor selection, installing powerful packages such as LSP and Alignment, and following disciplined refactoring practices, you can transform messy codebases into clean, maintainable code without ever leaving your favorite editor. The key is to refactor incrementally, test often, and let Sublime Text's agility work in your favor.

๐Ÿ›  Tools from DevBytes

Inventory Tracker Pro โ€” Excel inventory system, low-stock alerts ยท $19
AI Dev Kit for Mac โ€” local AI dev environment templates ยท $9.99
KeyMapper for Mac โ€” custom keyboard shortcut toolkit ยท $7.99

โ† Back to all articles