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:
| Option | What shows line numbers |
|---|---|
| Off | Nothing — 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 Views | Everything 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
| Action | Shortcut |
|---|---|
| Increase text size | Cmd++ or Cmd+= |
| Decrease text size | Cmd+- |
| Reset to 13 pt | Cmd+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:
- Drag a tab to the edge of the editor area to create a split.
- Choose horizontal or vertical orientation.
- 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.