Files
zed/docs/src/terminal.md
T
Katie GeerandClaude Opus 4.6 ed9150f6c9 docs: SEO content improvements for AI section (#49128)
## Summary

- **Add category-claiming keywords** to 4 key AI doc intros (overview,
agent panel, edit prediction, configuration) so Google associates these
pages with "AI code editor" search terms
- **Expand AI overview into a pillar page** with substantive feature
summaries and a "How Zed approaches AI" differentiation section (open
source, native performance, multi-model, external agents, privacy)
- **Improve internal linking** across 11 files to strengthen the AI
topic cluster

## Internal linking changes

**Inbound links (non-AI docs → AI section):**
- `editing-code.md` → AI overview
- `terminal.md` → Inline Assistant + Agent Panel
- `configuring-zed.md` → AI Configuration
- `remote-development.md` → AI overview

**Fix orphans within AI section:**
- `billing.md` linked to subscription + plans (was orphaned with zero
internal links)
- `tools.md`, `rules.md`, `llm-providers.md`, `tool-permissions.md`,
`models.md` all now cross-link to related AI pages

**Outbound:**
- `overview.md` → `zed.dev/ai` and `getting-started.md`

## Test plan

- [ ] `mdbook build docs` succeeds
- [ ] Spot-check links resolve correctly in built output
- [ ] Review overview.md content for docs voice fit

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 13:05:57 -08:00

377 lines
9.3 KiB
Markdown

---
title: Built-in Terminal - Zed
description: Zed's integrated terminal with multiple instances, custom shells, and deep editor integration.
---
# Terminal
Zed includes a built-in terminal emulator that supports multiple terminal instances, custom shells, and deep integration with the editor.
## Opening Terminals
| Action | macOS | Linux/Windows |
| ----------------------- | --------------- | --------------- |
| Toggle terminal panel | `` Ctrl+` `` | `` Ctrl+` `` |
| Open new terminal | `Ctrl+~` | `Ctrl+~` |
| Open terminal in center | Command palette | Command palette |
You can also open a terminal from the command palette with `terminal panel: toggle` or `workspace: new terminal`.
### Terminal Panel vs Center Terminal
Terminals can open in two locations:
- **Terminal Panel** — Docked at the bottom (default), left, or right of the workspace. Toggle with `` Ctrl+` ``.
- **Center Pane** — Opens as a regular tab alongside your files. Use `workspace: new center terminal` from the command palette.
## Working with Multiple Terminals
Create additional terminals with `Cmd+N` (macOS) or `Ctrl+N` (Linux/Windows) while focused in the terminal panel. Each terminal appears as a tab in the panel.
Split terminals horizontally with `Cmd+D` (macOS) or `Ctrl+Shift+5` (Linux/Windows).
## Configuring the Shell
By default, Zed uses your system's default shell (from `/etc/passwd` on Unix systems). To use a different shell:
```json [settings]
{
"terminal": {
"shell": {
"program": "/bin/zsh"
}
}
}
```
To pass arguments to your shell:
```json [settings]
{
"terminal": {
"shell": {
"with_arguments": {
"program": "/bin/bash",
"args": ["--login"]
}
}
}
}
```
## Working Directory
Control where new terminals start:
| Value | Behavior |
| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| `"current_file_directory"` | Uses the current file's directory, falling back to the project directory, then the first project in the workspace |
| `"current_project_directory"` | Uses the current file's project directory (default) |
| `"first_project_directory"` | Uses the first project in your workspace |
| `"always_home"` | Always starts in your home directory |
| `{ "always": { "directory": "~/projects" } }` | Always starts in a specific directory |
```json [settings]
{
"terminal": {
"working_directory": "first_project_directory"
}
}
```
## Environment Variables
Add environment variables to all terminal sessions:
```json [settings]
{
"terminal": {
"env": {
"EDITOR": "zed --wait",
"MY_VAR": "value"
}
}
}
```
> **Tip:** Use `:` to separate multiple values in a single variable: `"PATH": "/custom/path:$PATH"`
### Python Virtual Environment Detection
Zed can automatically activate Python virtual environments when opening a terminal. By default, it searches for `.env`, `env`, `.venv`, and `venv` directories:
```json [settings]
{
"terminal": {
"detect_venv": {
"on": {
"directories": [".venv", "venv"],
"activate_script": "default"
}
}
}
}
```
The `activate_script` option supports `"default"`, `"csh"`, `"fish"`, and `"nushell"`.
To disable virtual environment detection:
```json [settings]
{
"terminal": {
"detect_venv": "off"
}
}
```
## Fonts and Appearance
The terminal can use different fonts from the editor:
```json [settings]
{
"terminal": {
"font_family": "JetBrains Mono",
"font_size": 14,
"font_features": {
"calt": false
},
"line_height": "comfortable"
}
}
```
Line height options:
- `"comfortable"` — 1.618 ratio, good for reading (default)
- `"standard"` — 1.3 ratio, better for TUI applications with box-drawing characters
- `{ "custom": 1.5 }` — Custom ratio
### Cursor
Configure cursor appearance:
```json [settings]
{
"terminal": {
"cursor_shape": "bar",
"blinking": "on"
}
}
```
Cursor shapes: `"block"`, `"bar"`, `"underline"`, `"hollow"`
Blinking options: `"off"`, `"terminal_controlled"` (default), `"on"`
### Minimum Contrast
Zed adjusts terminal colors to maintain readability. The default value of `45` ensures text remains visible. Set to `0` to disable contrast adjustment and use exact theme colors:
```json [settings]
{
"terminal": {
"minimum_contrast": 0
}
}
```
## Scrolling
Navigate terminal history with these keybindings:
| Action | macOS | Linux/Windows |
| ---------------- | ------------------------------ | ---------------- |
| Scroll page up | `Shift+PageUp` or `Cmd+Up` | `Shift+PageUp` |
| Scroll page down | `Shift+PageDown` or `Cmd+Down` | `Shift+PageDown` |
| Scroll line up | `Shift+Up` | `Shift+Up` |
| Scroll line down | `Shift+Down` | `Shift+Down` |
| Scroll to top | `Shift+Home` or `Cmd+Home` | `Shift+Home` |
| Scroll to bottom | `Shift+End` or `Cmd+End` | `Shift+End` |
Adjust scroll speed with:
```json [settings]
{
"terminal": {
"scroll_multiplier": 3.0
}
}
```
## Copy and Paste
| Action | macOS | Linux/Windows |
| ------ | ------- | -------------- |
| Copy | `Cmd+C` | `Ctrl+Shift+C` |
| Paste | `Cmd+V` | `Ctrl+Shift+V` |
### Copy on Select
Automatically copy selected text to the clipboard:
```json [settings]
{
"terminal": {
"copy_on_select": true
}
}
```
### Keep Selection After Copy
By default, text stays selected after copying. To clear the selection:
```json [settings]
{
"terminal": {
"keep_selection_on_copy": false
}
}
```
## Search
Search terminal content with `Cmd+F` (macOS) or `Ctrl+Shift+F` (Linux/Windows). This opens the same search bar used in the editor.
## Vi Mode
Toggle vi-style navigation in the terminal with `Ctrl+Shift+Space`. This allows you to navigate and select text using vi keybindings.
## Clear Terminal
Clear the terminal screen:
- macOS: `Cmd+K`
- Linux/Windows: `Ctrl+Shift+L`
## Option as Meta (macOS)
For Emacs users or applications that use Meta key combinations, enable Option as Meta:
```json [settings]
{
"terminal": {
"option_as_meta": true
}
}
```
This reinterprets the Option key as Meta, allowing sequences like `Alt+X` to work correctly.
## Alternate Scroll Mode
When enabled, mouse scroll events are converted to arrow key presses in applications like `vim` or `less`:
```json [settings]
{
"terminal": {
"alternate_scroll": "on"
}
}
```
## Path Hyperlinks
Zed detects file paths in terminal output and makes them clickable. `Cmd+Click` (macOS) or `Ctrl+Click` (Linux/Windows) opens the file in Zed, jumping to the line number if one is detected.
Common formats recognized:
- `src/main.rs:42` — Opens at line 42
- `src/main.rs:42:10` — Opens at line 42, column 10
- `File "script.py", line 10` — Python tracebacks
## Panel Configuration
### Dock Position
```json [settings]
{
"terminal": {
"dock": "bottom"
}
}
```
Options: `"bottom"` (default), `"left"`, `"right"`
### Default Size
```json [settings]
{
"terminal": {
"default_width": 640,
"default_height": 320
}
}
```
### Terminal Button
Hide the terminal button in the status bar:
```json [settings]
{
"terminal": {
"button": false
}
}
```
### Toolbar
Show the terminal title in a breadcrumb toolbar:
```json [settings]
{
"terminal": {
"toolbar": {
"breadcrumbs": true
}
}
}
```
The title can be set by your shell using the escape sequence `\e]2;Title\007`.
## Integration with Tasks
The terminal integrates with Zed's [task system](./tasks.md). When you run a task, it executes in the terminal. Rerun the last task from a terminal with:
- macOS: `Cmd+Alt+R`
- Linux/Windows: `Ctrl+Shift+R` or `Alt+T`
## AI Assistance
Get help with terminal commands using the [Inline Assistant](./ai/inline-assistant.md):
- macOS: `Ctrl+Enter`
- Linux/Windows: `Ctrl+Enter` or `Ctrl+I`
This opens the Inline Assistant to help explain errors, suggest commands, or troubleshoot issues. AI agents in the [Agent Panel](./ai/agent-panel.md) can also run terminal commands as part of their workflow.
## Sending Text and Keystrokes
For advanced keybinding customization, you can send raw text or keystrokes to the terminal:
```json [keymap]
{
"context": "Terminal",
"bindings": {
"alt-left": ["terminal::SendText", "\u001bb"],
"ctrl-c": ["terminal::SendKeystroke", "ctrl-c"]
}
}
```
## All Terminal Settings
For the complete list of terminal settings, see the [Terminal section in All Settings](./reference/all-settings.md#terminal).
## What's Next
- [Tasks](./tasks.md) — Run commands and scripts from Zed
- [REPL](./repl.md) — Interactive code execution
- [CLI Reference](./reference/cli.md) — Command-line interface for opening files in Zed