为什么我选择从其他 IDE 切换到 Zed

|800 看过 Emacs 之路 这篇文章的话,之前有一段时间一直在使用 Emacs/Doomemacs。

安装

brew install --cask zed

配置

设置(Settings)

完整配置可以查看: dotfiles/zed/settings.json

下面方式方式都可以打开设置界面:

  1. 快捷键 cmd-,
  2. cmd-shift-p > 输入 zed: open settings

基本设置

{
  // Zed 原生支持 Vim 模式
  "vim_mode": true,
  "file_scan_exclusions": [
    "**/.git",
    "**/.svn",
    "**/.hg",
    "**/CVS",
    "**/.DS_Store",
    "**/Thumbs.db",
    "**/.classpath",
    "**/.settings",
    "**/vendor",
    "**/.tmp*"
  ],
}

UI

{
  "theme": "Dracula",
  "buffer_font_size": 26,
  "buffer_font_family": "CodeNewRoman Nerd Font Mono",
  "ui_font_size": 22,
  "ui_font_family": "CodeNewRoman Nerd Font Mono",
  "cursor_blink": false,
  "tabs": {
    // 在标签页展示 git 状态
    "git_status": true
  },
  "preferred_line_length": 120,
  "soft_wrap": "preferred_line_length",
}

语言相关(Lang, LSP)

{
  "languages": {
    "Go": {
      "format_on_save": "language_server",
    },
    "Rust": {
      "format_on_save": "language_server",
    },
    "JSON": {
      "format_on_save": "language_server",
    }
  }
}
 

快捷键(Keymaps)

Zed 的快捷键配置(Key bindings - Zed)以 json/json5 作为配置格式,形式如下:

[
  {
    "context": "Workspace",
    "bindings": {
    }
  }
]
  • context

1)上下文条件,只有在满足特定的上下文条件下,对应的快捷键绑定才会生效; 2)类型可以是字符串、对象、数组;描述上下文条件,包括模式、状态、焦点等;

常见的 context 条件值:

条件描述示例
editorState编辑器状态normal, insert
fileType当前文件类型text, markdown, go, rust
focus当前焦点在哪个界面元素上editor, sidebar, search
workspace工作区或指定项目环境default, projectA
mode编辑器模式insert, virsual
vimModeVim 的模式(启用 Vim 时)insert, virsual
hasSelection是否选中文本true, false
isDirty文件是否未保存true, false
  • bindings

bindings 顾名思义,指定的快捷键;类型可以是字符串、对象、数组;

示例:

[
  {
    "bindings": {
      "cmd-k cmd-s": "zed::OpenKeymap",
      "cmd-1": ["workspace::ActivatePane", 0],
      "cmd-;": [
        "editor::ToggleComments",
        {
          "advance_downwards": false
        }
      ]
    }
  }
]

完整配置可以查看: dotfiles/zed/keymap.json

下面方式方式都可以打开快捷键设置界面:

  1. 快捷键 cmd-k cmd-s
  2. cmd-shift-p > 输入 zed: open keymap

默认快捷键我会以表格形式呈现,自定义按键使用 json 配置,方便区分和直接复制粘贴使用。

核心

快捷键描述命令
cmd-,打开设置界面zed::OpenSettings
cmd-shift-p打开命令面板command_palette::Toggle
cmd-k cmd-s打开快捷键配置界面zed::OpenKeymap
[
  {
    "bindings": {
      // 切换面板
      "ctrl-x o": "workspace::ActivateNextPane",
      // 取消指令
      "ctrl-g": "menu::Cancel",
    }
  }
]

Workspace(工作空间)

[
  {
    "context": "Workspace",
    "bindings": {
      "cmd-r": "file_finder::Toggle"
    }
  }
]

Pane

快捷键描述
cmd-shift-e焦点切换侧边栏-编辑区

Editor

File/Lang

问题清单

ProblemIssueSolution
无法自定义设置文件默认语言Default language setting?设置文件的默认语言
设置代理(无法拉取依赖)Add basic proxy settings设置代理
无法移除部分默认快捷键How to remove a default keybinding?

解决方案

设置文件的默认语言

{
  "file_types": {
    "Shell Script": [
      ".aliases"
    ]
  }
}

设置代理

{
  "proxy": "http://127.0.0.1:1087"
}