# Zed Config

> Configure Zed editor settings, keybindings, language servers, themes, and AI agents. Use when modifying Zed configuration, adding keybindings, setting up language servers, or configuring external agen

- Skill: `majiayu000/zed-config-2` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add majiayu000/zed-config-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/zed-config-2/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/majiayu000/zed-config-2

---


---
name: zed-config
description: Configure Zed editor settings, keybindings, language servers, themes, and AI agents. Use when modifying Zed configuration, adding keybindings, setting up language servers, or configuring external agents like Claude Code. Keywords: zed, editor, settings, keybindings, keymap, LSP, language server, theme, agent, configure
allowed-tools: Read, Edit, Bash(cat:*), Bash(jq:*)
---

# Zed Editor Configuration Skill

Manages Zed editor configuration through `settings.json` and `keymap.json` files.

## Important Context

This dotfiles repository has **symlinked** the global Zed configuration:
- Configuration location: `config/zed/`
- Symlinked to: `~/.config/zed/`
- **All changes are applied globally** to the Zed installation

Configuration files:
- `config/zed/settings.json` - Main editor settings
- `config/zed/keymap.json` - Custom keybindings

## Configuration Categories

### 1. Editor Appearance & Behavior

**Theme Configuration:**
```json
{
  "theme": {
    "mode": "system",           // "system", "light", or "dark"
    "light": "One Light",
    "dark": "Zedokai"
  },
  "icon_theme": "Catppuccin Frappé"
}
```

**Font Settings:**
```json
{
  "ui_font_size": 14,
  "buffer_font_size": 14.0,
  "buffer_font_weight": 430.0
}
```

**Editor Behavior:**
```json
{
  "preferred_line_length": 120,
  "soft_wrap": "preferred_line_length",
  "autosave": {
    "after_delay": {
      "milliseconds": 200
    }
  },
  "show_completions_on_input": true
}
```

### 2. Terminal Configuration

```json
{
  "terminal": {
    "shell": {
      "program": "fish"        // Shell program (fish, zsh, bash)
    }
  }
}
```

### 3. Language Server Protocol (LSP)

**Structure:** Use nested objects (not dot-delimited strings)

**Deno:**
```json
{
  "lsp": {
    "deno": {
      "settings": {
        "deno": {
          "enable": true
        }
      }
    }
  }
}
```

**Rust Analyzer:**
```json
{
  "lsp": {
    "rust-analyzer": {
      "initialization_options": {
        "inlayHints": {
          "maxLength": null,
          "lifetimeElisionHints": {
            "enable": "skip_trivial",
            "useParameterNames": true
          }
        }
      },
      "binary": {
        "ignore_system_version": false
      },
      "enable_lsp_tasks": true
    }
  }
}
```

**Python (Ruff):**
```json
{
  "lsp": {
    "ruff": {
      "initialization_options": {
        "settings": {}
      }
    }
  }
}
```

### 4. Language-Specific Settings

Configure per-language overrides in the `languages` object:

```json
{
  "languages": {
    "Python": {
      "language_servers": ["ty", "ruff"],
      "format_on_save": "on",
      "formatter": [
        {
          "language_server": {
            "name": "ruff"
          }
        }
      ]
    },
    "TypeScript": {
      "language_servers": ["deno", "!typescript-language-server", "!vtsls", "!eslint"],
      "formatter": "language_server"
    },
    "TSX": {
      "language_servers": ["deno", "!typescript-language-server", "!vtsls", "!eslint"],
      "formatter": "language_server"
    }
  }
}
```

**Language server prioritization:**
- List servers in order of preference
- Prefix with `!` to disable (e.g., `"!typescript-language-server"`)
- Use `"..."` to expand remaining registered servers

**Available options per language:**
- `tab_size`: Indentation spaces
- `formatter`: Code formatting tool
- `format_on_save`: `"on"`, `"off"`, or `"language_server"`
- `enable_language_server`: Toggle LSP
- `hard_tabs`: Use tabs instead of spaces
- `preferred_line_length`: Max line width
- `soft_wrap`: Line wrapping behavior

### 5. AI Agent Configuration

**Agent Settings:**
```json
{
  "agent": {
    "always_allow_tool_actions": true,
    "use_modifier_to_send": true,
    "play_sound_when_agent_done": true,
    "default_profile": "write",
    "default_model": {
      "provider": "google",
      "model": "gemini-2.5-pro-exp-03-25"
    }
  }
}
```

**External Agents (Claude Code, Gemini CLI):**
```json
{
  "agent_servers": {
    "claude": {
      "env": {
        "CLAUDE_CODE_EXECUTABLE": "/path/to/custom-executable"
      }
    },
    "custom-agent": {
      "command": "node",
      "args": ["~/projects/agent/index.js", "--acp"],
      "env": {}
    }
  }
}
```

**Edit Predictions:**
```json
{
  "show_edit_predictions": false,
  "edit_predictions": {
    "mode": "eager",              // "eager" or "manual"
    "enabled_in_text_threads": false
  }
}
```

### 6. Keybindings Configuration

**File:** `config/zed/keymap.json`

**Structure:** JSON array of binding objects with optional contexts

```json
[
  {
    "context": "Editor",          // Optional: "Editor", "Terminal", "Workspace"
    "bindings": {
      "cmd-k": "assistant::InlineAssist",
      "cmd-t": "workspace::NewTerminal",
      "cmd-1": "workspace::ToggleLeftDock"
    }
  }
]
```

**Key Syntax:**
- **Modifiers:** `cmd-`, `ctrl-`, `alt-`, `shift-`, `fn-`
- **Sequences:** Space-separated (e.g., `"cmd-k cmd-s"`)
- **Platform-agnostic:** Use `secondary-` to adapt to platform

**Common Actions:**
- `workspace::ToggleBottomDock` - Toggle bottom panel
- `workspace::NewTerminal` - Open new terminal
- `workspace::ToggleLeftDock` - Toggle file explorer
- `workspace::ToggleRightDock` - Toggle right panel
- `assistant::InlineAssist` - Inline AI assist
- `file_finder::Toggle` - Open file finder
- `task::Spawn` - Run task
- `pane::ActivatePreviousItem` / `pane::ActivateNextItem` - Navigate tabs
- `["agent::NewExternalAgentThread", { "agent": "claude_code" }]` - Open agent with args

**Context Options:**
- `"Editor"` - Any editor pane
- `"Editor && mode == full"` - Main code editors only
- `"Terminal"` - Terminal panes
- `"!Editor && !Terminal"` - Everywhere except editors/terminals

**Disable Binding:**
```json
{
  "context": "Workspace",
  "bindings": {
    "cmd-r": null              // Disables cmd-r
  }
}
```

### 7. SSH Connections

Configure remote development environments:

```json
{
  "ssh_connections": [
    {
      "host": "betty",
      "projects": [
        {
          "paths": ["/home/user/Development/project"]
        }
      ]
    }
  ]
}
```

### 8. Tabs Configuration

```json
{
  "tabs": {
    "git_status": true,         // Show git status colors
    "file_icons": true          // Show file type icons
  }
}
```

## Workflow Instructions

### Reading Current Configuration

**Always start by reading the current config:**
```
Read config/zed/settings.json
Read config/zed/keymap.json
```

### Modifying Settings

**Use Edit tool for precise changes:**
1. Read the current configuration
2. Identify the exact JSON to modify
3. Use Edit to replace the specific section
4. Preserve formatting and comments

**Example - Add new language server:**
```json
// Before:
{
  "lsp": {
    "deno": { ... }
  }
}

// After:
{
  "lsp": {
    "deno": { ... },
    "gopls": {
      "initialization_options": {
        "usePlaceholders": true
      }
    }
  }
}
```

### Adding Keybindings

**Append to the bindings object:**
```json
// Existing:
{
  "bindings": {
    "cmd-t": "workspace::NewTerminal"
  }
}

// Add new binding:
{
  "bindings": {
    "cmd-t": "workspace::NewTerminal",
    "cmd-r": "editor::Rename"
  }
}
```

### Validating Configuration

After modifications:
1. Check JSON syntax is valid (preserve trailing commas in objects/arrays)
2. Ensure comments use `//` format
3. Verify nested structure (especially for `lsp` and `languages`)

## Common Configuration Tasks

### Add New Language Server

1. Read current `lsp` section
2. Add server configuration under `lsp` key
3. Optionally add language-specific settings under `languages`

### Change Theme

```json
{
  "theme": {
    "mode": "dark",
    "dark": "Tokyo Night"
  }
}
```

### Configure Formatter

```json
{
  "languages": {
    "JavaScript": {
      "formatter": {
        "external": {
          "command": "prettier",
          "arguments": ["--stdin-filepath", "{buffer_path}"]
        }
      },
      "format_on_save": "on"
    }
  }
}
```

### Add Custom Keybinding for External Agent

```json
{
  "bindings": {
    "cmd-3": ["agent::NewExternalAgentThread", { "agent": "claude_code" }]
  }
}
```

## Best Practices

1. **Read before editing** - Always read current config to understand structure
2. **Preserve comments** - Keep existing `//` comments intact
3. **Use nested objects** - For LSP, use `{ "lsp": { "server": { "settings": {} } } }`
4. **Test incrementally** - Make one change at a time
5. **Check Zed docs** - Reference official docs for available options
6. **Language-specific overrides** - Use `languages` object to override global settings
7. **Context-aware keybindings** - Use `context` to scope shortcuts appropriately

## Troubleshooting

**Invalid JSON:** Zed supports extended JSON with `//` comments but requires valid structure

**LSP not working:**
- Check `enable_language_server` setting
- Verify `initialization_options` structure
- Ensure language server binary is installed

**Keybinding conflicts:**
- Check base keymap setting (`"base_keymap": "JetBrains"`)
- Use `null` to disable conflicting default bindings
- Test in relevant context (Editor vs Terminal vs Workspace)

**Changes not applying:**
- Configuration is symlinked from `config/zed/` to `~/.config/zed/`
- Changes take effect immediately in Zed (no restart needed for most settings)
- Some LSP changes require server restart

## Quick Reference

**Current Configuration Files:**
- Settings: `config/zed/settings.json`
- Keybindings: `config/zed/keymap.json`
- Conversations: `config/zed/conversations/`
- Custom Prompts: `config/zed/prompts/`
- Themes: `config/zed/themes/`

**Current Base Keymap:** JetBrains

**Current Languages Configured:**
- Python (ty, ruff LSP, format on save)
- TypeScript (Deno LSP, disable default TS servers)
- TSX (Deno LSP, disable default TS servers)

**Current LSP Servers:**
- Deno (enabled)
- Rust Analyzer (inlay hints, analyzer target dir)
- Ruff (Python)

