### Navigating diagnostics
These commands navigate diagnostics.
| Command | Description |
| ------------------------ | ------------------------------ |
| `:cn[ext]` or `:ln[ext]` | Go to the next diagnostic |
| `:cp[rev]` or `:lp[rev]` | Go to the previous diagnostics |
| `:cc` or `:ll` | Open the errors page |
### Git
These commands interact with the version control system git.
| Command | Description |
| --------------- | ------------------------------------------------------- |
| `:dif[fupdate]` | View the diff under the cursor (`d o` in normal mode) |
| `:rev[ert]` | Revert the diff under the cursor (`d p` in normal mode) |
### Jump
These commands jump to specific positions in the file.
| Command | Description |
| ------------------- | ----------------------------------- |
| `:<number>` | Jump to a line number |
| `:$` | Jump to the end of the file |
| `:/foo` and `:?foo` | Jump to next/prev line matching foo |
### Replacement
This command replaces text. It emulates the substitute command in vim. The substitute command uses regular expressions, and Zed uses a slightly different syntax than vim. You can learn more about Zed's syntax below, [in the regex differences section](#regex-differences). Zed will replace only the first occurrence of the search pattern in the current line. To replace all matches append the `g` flag.
| Command | Description |
| ----------------------- | --------------------------------- |
| `:[range]s/foo/bar/[g]` | Replace instances of foo with bar |
### Editing
These commands help you edit text.
| Command | Description |
| ----------------- | ------------------------------------------------------- |
| `:j[oin]` | Join the current line |
| `:d[elete][l][p]` | Delete the current line |
| `:s[ort] [i]` | Sort the current selection (with i, case-insensitively) |
| `:y[ank]` | Yank (copy) the current selection or line |
### Set
These commands modify editor options locally for the current buffer.
| Command | Description |
| ------------------------------- | --------------------------------------------------------------------------------------------- |
| `:se[t] [no]wrap` | Lines longer than the width of the window will wrap and displaying continues on the next line |
| `:se[t] [no]nu[mber]` | Print the line number in front of each line |
| `:se[t] [no]r[elative]nu[mber]` | Changes the displayed number to be relative to the cursor |
### Command mnemonics
As any Zed command is available, you may find that it's helpful to remember mnemonics that run the correct command. For example:
- `:diffs` for "toggle all hunk diffs"
- `:cpp` for "copy path to file"
- `:crp` for "copy relative path"
- `:reveal` for "reveal in finder"
- `:zlog` for "open zed log"
- `:clank` for "cancel language server work"
## Customizing key bindings
In this section, we'll learn how to customize the key bindings of Zed's vim mode. You'll learn:
- How to select the correct context for your new key bindings.
- Useful contexts for vim mode key bindings.
- Common key bindings to customize for extra productivity.
### Selecting the correct context
Zed's key bindings are evaluated only when the `"context"` property matches your location in the editor. For example, if you add key bindings to the `"Editor"` context, they will only work when you're editing a file. If you add key bindings to the `"Workspace"` context, they will work everywhere in Zed. Here's an example of a key binding that saves when you're editing a file: