为什么我选择从其他 IDE 切换到 Zed
看过 Emacs 之路 这篇文章的话,之前有一段时间一直在使用 Emacs/Doomemacs。
安装
brew install --cask zed
配置
设置(Settings)
完整配置可以查看: dotfiles/zed/settings.json
下面方式方式都可以打开设置界面:
- 快捷键
cmd-,
; 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 |
vimMode | Vim 的模式(启用 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
下面方式方式都可以打开快捷键设置界面:
- 快捷键
cmd-k cmd-s
; 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
问题清单
Problem | Issue | Solution |
---|---|---|
无法自定义设置文件默认语言 | 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"
}