Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [ ] ~~Unsafe blocks (if any) have justifying comments~~ - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [ ] Tests cover the new/changed behavior - [ ] ~~Performance impact has been considered and is acceptable~~ Release Notes: - Added shell completions generation for CLI with `zed --completions <SHELL>` Co-authored-by: silvanshade <silvanshade@users.noreply.github.com> Co-authored-by: Yara 🏳️⚧️ <git@yara.blue>
259 lines
5.5 KiB
Markdown
259 lines
5.5 KiB
Markdown
---
|
|
title: CLI Reference
|
|
description: "Reference for Zed's command-line interface (CLI), including opening files and directories, integrating with tools, and controlling Zed from scripts."
|
|
---
|
|
|
|
# CLI Reference
|
|
|
|
Use Zed's command-line interface (CLI) to open files and directories, integrate with other tools, and control Zed from scripts.
|
|
|
|
## Installation
|
|
|
|
**macOS:** Run the {#action cli::InstallCliBinary} command from the command palette ({#kb command_palette::Toggle}) to install the `zed` CLI to `/usr/local/bin/zed`.
|
|
|
|
**Linux:** The CLI is included with Zed packages. The binary name may vary by distribution (commonly `zed` or `zeditor`).
|
|
|
|
**Windows:** The CLI is included with Zed. Add Zed's installation directory to your PATH, or use the full path to `zed.exe`.
|
|
|
|
## Usage
|
|
|
|
```sh
|
|
zed [OPTIONS] [PATHS]...
|
|
```
|
|
|
|
## Opening Files and Directories
|
|
|
|
Open a file:
|
|
|
|
```sh
|
|
zed myfile.txt
|
|
```
|
|
|
|
Open a directory as a workspace:
|
|
|
|
```sh
|
|
zed ~/projects/myproject
|
|
```
|
|
|
|
Open multiple files or directories:
|
|
|
|
```sh
|
|
zed file1.txt file2.txt ~/projects/myproject
|
|
```
|
|
|
|
Open a file at a specific line and column:
|
|
|
|
```sh
|
|
zed myfile.txt:42 # Open at line 42
|
|
zed myfile.txt:42:10 # Open at line 42, column 10
|
|
```
|
|
|
|
## Options
|
|
|
|
### `-w`, `--wait`
|
|
|
|
Wait for all opened files to be closed before the CLI exits. When opening a directory, waits until the window is closed.
|
|
|
|
This is useful for integrating Zed with tools that expect an editor to block until editing is complete (e.g., `git commit`):
|
|
|
|
```sh
|
|
export EDITOR="zed --wait"
|
|
git commit # Opens Zed and waits for you to close the commit message file
|
|
```
|
|
|
|
### `-n`, `--new`
|
|
|
|
Open paths in a new workspace window, even if the paths are already open in an existing window:
|
|
|
|
```sh
|
|
zed -n ~/projects/myproject
|
|
```
|
|
|
|
### `-a`, `--add`
|
|
|
|
Add paths to the currently focused workspace instead of opening a new window. When multiple workspace windows are open, files open in the focused window:
|
|
|
|
```sh
|
|
zed -a newfile.txt
|
|
```
|
|
|
|
### `-r`, `--reuse`
|
|
|
|
Reuse an existing window, replacing its current workspace with the new paths:
|
|
|
|
```sh
|
|
zed -r ~/projects/different-project
|
|
```
|
|
|
|
By default (without `-n`, `-a`, or `-r`), directories open in the current window's sidebar. You can change this default with the `cli_default_open_behavior` setting. See [Windows & Projects](../windows-and-projects.md) for more details.
|
|
|
|
### `--diff <OLD_PATH> <NEW_PATH>`
|
|
|
|
Open a diff view comparing two files. Can be specified multiple times:
|
|
|
|
```sh
|
|
zed --diff file1.txt file2.txt
|
|
zed --diff old.rs new.rs --diff old2.rs new2.rs
|
|
```
|
|
|
|
### `--foreground`
|
|
|
|
Run Zed in the foreground, keeping the terminal attached. Useful for debugging:
|
|
|
|
```sh
|
|
zed --foreground
|
|
```
|
|
|
|
### `--user-data-dir <DIR>`
|
|
|
|
Use a custom directory for all user data (database, extensions, logs) instead of the default location:
|
|
|
|
```sh
|
|
zed --user-data-dir ~/.zed-custom
|
|
```
|
|
|
|
Default locations:
|
|
|
|
- **macOS:** `~/Library/Application Support/Zed`
|
|
- **Linux:** `$XDG_DATA_HOME/zed` (typically `~/.local/share/zed`)
|
|
- **Windows:** `%LOCALAPPDATA%\Zed`
|
|
|
|
### `-v`, `--version`
|
|
|
|
Print Zed's version and exit:
|
|
|
|
```sh
|
|
zed --version
|
|
```
|
|
|
|
### `--completions <SHELL>`
|
|
|
|
Generate shell completions for the `zed` CLI:
|
|
|
|
#### Bash
|
|
|
|
Add to `~/.bashrc`:
|
|
|
|
```bash
|
|
eval "$(zed --completions bash)"
|
|
```
|
|
|
|
#### Elvish
|
|
|
|
Add to `~/.config/elvish/rc.elv`:
|
|
|
|
```elvish
|
|
set edit:completion:arg-completer[zed] = { |@args|
|
|
eval (zed --completions elvish | slurp)
|
|
$edit:completion:arg-completer[zed] $@args
|
|
}
|
|
```
|
|
|
|
#### Fish
|
|
|
|
Add to `~/.config/fish/config.fish`:
|
|
|
|
```fish
|
|
zed --completions fish | source
|
|
```
|
|
|
|
#### Nushell
|
|
|
|
Add to `~/.config/nushell/config.nu`:
|
|
|
|
```nu
|
|
mkdir ($nu.data-dir | path join "vendor/autoload")
|
|
^zed --completions nushell | save --force ($nu.data-dir | path join "vendor/autoload/zed.nu")
|
|
```
|
|
|
|
#### Powershell
|
|
|
|
Add to `$PROFILE`:
|
|
|
|
```powershell
|
|
(&zed --completions powershell) | Out-String | Invoke-Expression
|
|
```
|
|
|
|
#### Zsh
|
|
|
|
Add to `~/.zshrc`:
|
|
|
|
```zsh
|
|
eval "$(zed --completions zsh)"
|
|
```
|
|
|
|
### `--uninstall`
|
|
|
|
Uninstall Zed and remove all related files (macOS and Linux only):
|
|
|
|
```sh
|
|
zed --uninstall
|
|
```
|
|
|
|
### `--zed <PATH>`
|
|
|
|
Specify a custom path to the Zed application or binary:
|
|
|
|
```sh
|
|
zed --zed /path/to/Zed.app myfile.txt
|
|
```
|
|
|
|
## Reading from Standard Input
|
|
|
|
Read content from stdin by passing `-` as the path:
|
|
|
|
```sh
|
|
echo "Hello, World!" | zed -
|
|
cat myfile.txt | zed -
|
|
ps aux | zed -
|
|
```
|
|
|
|
This creates a temporary file with the stdin content and opens it in Zed.
|
|
|
|
## URL Handling
|
|
|
|
The CLI can open `zed://`, `file://`, and `ssh://` URLs:
|
|
|
|
```sh
|
|
zed zed://settings
|
|
zed file:///Users/whatever/.zshrc
|
|
zed ssh://me@example.com/abs/path
|
|
zed ssh://me@example.com:/abs/path
|
|
zed ssh://me@example.com/~/project
|
|
zed ssh://me@example.com:~/project
|
|
```
|
|
|
|
## Using Zed as Your Default Editor
|
|
|
|
Set Zed as your default editor for Git and other tools:
|
|
|
|
```sh
|
|
export EDITOR="zed --wait"
|
|
export VISUAL="zed --wait"
|
|
```
|
|
|
|
Add these lines to your shell configuration file (e.g., `~/.bashrc`, `~/.zshrc`).
|
|
|
|
## macOS: Switching Release Channels
|
|
|
|
On macOS, you can launch a specific release channel by passing the channel name as the first argument:
|
|
|
|
```sh
|
|
zed --stable myfile.txt
|
|
zed --preview myfile.txt
|
|
zed --nightly myfile.txt
|
|
```
|
|
|
|
## WSL Integration (Windows)
|
|
|
|
On Windows, the CLI supports opening paths from WSL distributions. This is handled automatically when launching Zed from within WSL.
|
|
|
|
## Exit Codes
|
|
|
|
| Code | Meaning |
|
|
| ---- | --------------------------------- |
|
|
| `0` | Success |
|
|
| `1` | Error (details printed to stderr) |
|
|
|
|
When using `--wait`, the exit code reflects whether the files were saved before closing.
|