Code Editor

Plain text, code, and config files open in a monospaced editor with language-aware syntax highlighting.

Supported languages

Swift, JavaScript, TypeScript, Python, R, Ruby, Go, Rust, C, C++, Objective-C, Java, Kotlin, SQL, HTML, CSS, YAML, TOML, JSON, Shell, and framework extensions (JSX, TSX, Vue, Svelte, and more).

Plain-text extensions (.txt, .log, .env, .cfg, .ini, .conf) open in the text editor with save and autosave.

Features

  • Language-aware syntax highlighting
  • Find and replace with Cmd+F
  • Minimum contrast enforcement for token readability
  • Autosave with unsaved indicator
  • Detects external file changes and reloads from disk while preserving your selection and scroll position

JSON editor

JSON and JSONC files get a dedicated editor with formatting and validation features.

Line numbers

Code, source, and plain-text editors show line numbers in a gutter by default. Change this in App Settings > Appearance > Line Numbers > Show line numbers:

OptionWhat shows line numbers
OffNothing — the gutter and the Git diff number columns are hidden
Source Editors (default)Code, source, and plain-text editors, plus Git diff old/new columns
All Text ViewsEverything above, plus rich Markdown and LaTeX Edit mode

The gutter numbers lines in the file, not lines on screen. A long line that wraps keeps one number on its first row; the continuation rows stay blank. The line containing the caret is highlighted in your theme’s accent color, and the other numbers use a muted color. The gutter widens as the file grows past 99, 999, and so on, and it updates immediately when you change the setting or the theme.

Comment indicators have their own lane to the left of the numbers, so they never overlap. See File Comments.

Text size

ActionShortcut
Increase text sizeCmd++ or Cmd+=
Decrease text sizeCmd+-
Reset to 13 ptCmd+0

The same commands are in the View menu as Increase Text Size, Decrease Text Size, and Reset Text Size. Text size is global: editor text, the line-number gutter, terminals, and app chrome all scale together. To set an exact size, use the Text size slider in App Settings > Appearance > Typography.

Performance

Syntax highlighting is disabled beyond 180,000 characters. The file remains fully editable as plain text.

Split panes

You can divide the content viewer into up to 4 independent panes:

  1. Drag a tab to the edge of the editor area to create a split.
  2. Choose horizontal or vertical orientation.
  3. Each pane has its own tabs and scroll position.

Tabs

  • Single-click a file in the explorer to open a preview tab (replaced when you click another file).
  • Double-click to open a persistent tab that stays open.
  • Tabs show the owning project’s color.
  • Tabs can hold files, browsers, terminals, VibeCast, Vibe Lanes, Todos, and ACP panes.

A single click selects a tab and updates its content. Switching directly between two files or two browser tabs does not require a second click or leave the previous tab’s content visible.

Filtering tabs by project

Use the content viewer’s scope control to choose which tabs appear:

  • Focused Project — shows file and browser tabs owned by the focused project. Terminals, VibeCast, Vibe Lanes, Todos, and ACP panes remain visible.
  • All Projects — shows every tab in the pane.

If Focused Project hides the selected tab, CrispyVibe selects an available visible tab. If the filter leaves no visible tabs, it preserves your selection until you switch scope or project.