Skip to content

Zed

常用配置

自动换行

json
{ "soft_wrap": "editor_width" }

TabSize

json
{ "tab_size": 2 }

失焦自动保存

json
{ "autosave": "on_focus_change" }

项目级别的配置

每个项目的配置可能有差异:

  • 不同项目的缩进不一致
  • 有的项目用 ESLint 格式化,有的项目用 prettier

通过在项目根目录创建.zed/settings.json进行配置(也可以Command + Shift + P,选择zed: open local settings快捷创建)

LSP(Language Server Protocol)

一种语言文件 可对应 多个 LSP。

语言服务器可提供的特性:

  • 代码补全
  • 错误检查和诊断
  • 代码导航(转到定义、查找引用)(F12: Go to Definition / Cmd + F12: Go to Type Definition / Shift + F12: Find All References)
  • code actions(重命名、提取方法、source.fixAll
  • 悬停信息
  • 工作区符号搜索
  • Inlay Hints
  • ...

当打开一个文件时,Zed 会自动下载和更新相对应的 LSP。

手动配置某个语言文件关联的 LSP

json
"languages": {
  "PHP": {
    "language_servers": ["intelephense", "!phpactor", "..."]
  }
}
  • intelephense为首要语言服务器
  • phpactor被禁用(!表示禁用)
  • ...表示保留其它默认 LSP 的设置

手动禁用某个语言文件关联的全部 LSP

json
"languages": {
  "Markdown": {
    "enable_language_server": false
  }
}

自定义某个 LSP 的配置

TIP

以下 lsp 的配置中,出现了init_optionssettingsinitialization_options等字段,具体取决于每个 lsp 自身的配置方式。

比如配置 emmet,在zed 文档 - Emmet中,查看对应的 lsp 文档,能清楚看到init_options和其配置项的说明。

json
"lsp": {
  "emmet": {
    "init_options": {
      "includeLanguages": {
        // vue-html应该是指template部分,vue覆盖的更全,就是整个vue文件,如果两个都配上没遇到啥问题,就多多益善吧。
        "vue-html": "html",
        "vue": "html"
      }
    }
  },
  "eslint": {
    "settings": {
      "codeActionOnSave": {
        "rules": ["import/order"]
      }
    }
  },
  "typescript-language-server": {
    "initialization_options": {
      // 点分隔配置是不支持的
      // "preferences.strictNullChecks": true,
      // 只能通过对象嵌套的方式
      "preferences": {
        "strictNullChecks": true
      }
    }
  },
  "rust-analyzer": {
    "initialization_options": {
      "checkOnSave": {
        "command": "clippy"
      }
    }
  },
}

配置语言

在 LSP 一节中,我们已经看到了如何配置某个语言。比如要配置PHP,可以这样:

json
"languages": {
  "PHP": {
    ...
  }
}

完整的配置项如下:

  • tab_size 每个缩进级别的空格数
  • formatter
  • formatter_on_save
  • code_actions_on_format
  • language_servers
  • enable_language_server
  • hard_tabs 使用制表符缩进而不是空格
  • perferred_line_length 建议的最大行长度
  • soft_wrap 如何换行长行代码

formatter 详解

方式 1:指定某个 LSP

json
{
  "formatter": "language_server"
}

方式 2:external (只用 Prettier 推荐这种方式)

WARNING

prettier 配置暂未验证成功,需调试

json
// prettier之所以要加--stdin-filepath,可能不指定文件就会格式这个工程的文件?
// {buffer_path}应该属于zed的变量?表明当前文件路径?不像是系统变量,因为在一个目录运行buffer_path肯定不能确定是哪一个文件。
{
  "formatter": {
    "external": {
      "command": "prettier",
      "arguments": ["--stdin-filepath", "{buffer_path}"]
    }
  }
}
json
// 由于sed命令是直接从标准输入获取内容,而zed默认是将当前缓冲区的文本作为标准输入传,因此不用像prettier那样加--stdin-filepath?
// 以下等同于:sed -e 's/ *$//'
{
  "formatter": {
    "external": {
      "command": "sed",
      "arguments": ["-e", "s/ *$//"]
    }
  }
}

通过command指定命令,argument指定参数或值。可以执行命令行中能运行的任意命令,命令的标准输出(stdout)将会直接写入当前文件中。

方式 3:LSP 提供的 code action (只用 ESLint 推荐这种方式)

json
{
  "formatter": {
    "code_actions": {
      // Use ESLint's --fix:
      "source.fixAll.eslint": true,
      // Organize imports on save:
      "source.organizeImports": true
    }
  }
}

方式四:数组形式结合多个

json
{
  "formatter": [
    {"language_server": {"name": "rust-analyzer"}},
    {"external": {
      "command": "sed",
      "arguments": ["-e", "s/ *$//"]
    }
  ]
}

登录问题

版本:0.149.5+

因为登录才能使用免费的 Zed AI,因此要解决这个问题

需要走代理,

  1. 确保规则模式将zed.dev追加,或是全局模式
  2. 打开 TUN 模式(有些软件没有这个模式)
  3. 修改 zed 配置文件,将proxy字段改为http://127.0.0.1:7897
json
{
  "proxy": "http://127.0.0.1:7897"
}