自定义 zed 快捷键设置,效率翻倍

自定义 Zed 快捷键设置,提升编辑效率。提供 Zed 快捷键配置示例,包括 Vim 模式下的常用操作、文件管理、代码格式化、搜索、重命名、标签页切换、侧边栏控制、AI 助手交互等,并讲解了如何查找和修改 Zed 快捷键。
设置好 zed 的快捷键,可以让我们日常编辑的使用效率翻倍,下面是我的快捷键设置,可以抛砖引玉,让大家有个参考。
如果你之前没有在 zed 中进行过任何快捷键设置,那么可以直接将下面的设置复制粘贴到你的 zed 配置文件中,体验一下这套快捷键好不好用,不好用的,自己再调整一下,修改修改。
设置方式是先通过 ctrl + shift + p 打开命令面板 (mac 电脑是 command + shift + p),然后输入 keymap
,选择 zed: open keymap
,然后将下面的设置复制粘贴到弹出的编辑器中。
简单讲解一下这里的配置是怎么回事,为什么有效,首先我们要知道,zed 编辑器中其实有不同的区域,例如编辑区域/vim 模式/侧边栏/文件树/git 面板等等,这些区域可以被称为是不同的上下文 (context),在不同的上下文中,我们都会有一个关注的焦点,例如在编辑区域中,我们关注的是光标的位置,而在侧边栏文件树中,焦点就是当前选中的那个文件。
我们设置快捷键的目的,就是为了可以快速切换不同上下文或不同焦点,例如我想在编辑区域切换到文件树面板,或者我想切换到上一个文件标签页,这些都可以通过快捷键做到。
下面的配置文件,其实是一个 json 数组,其中的每一个对象,是一个单独的上下文。
其中的 context 字段,就是指明这是哪种情况的上下文,例如 "context": "Editor && (vim_mode == normal || vim_mode == visual) && !VimWaiting && !menu"
,这一句的意思是,当处于编辑区域,且 vim 模式为普通模式或可视模式,且没有等待输入,且没有菜单打开时,这个上下文就生效了。
而 bindings 字段是一个对象,就是我们自定义的快捷键,可以定义多个快捷键,键值对形式,键是我们定义的快捷键,值是 zed 提供的命令。只要我们正确设置了,那么只要我们按下正确的快捷键,对应的 zed 命令就会生效。
单个字母的快捷键,表示在此上下文中,只需要一个按键就可生效,例如 a
。
两个字母的快捷键,中间用空格隔开的,表示要先按第一个字母,再按第二个字母,例如 a b
表示先按 a
,再按 b
。时间间隔最长为两秒,并且并不是只能有两个键,也可以三个四个甚至更多,但为了按着方便,还是越少越好。
两个字母的快捷键,中间用短横线 -
相连的,表示是组合键,需要一起按,例如 ctrl-a
。
你可能会说,键的问题都好说,规则我都明白了,但是对应的 zed 命令你是怎么知道的呢?有文档吗?
不一定有文档,但也不是没有办法,有两种方法,一种是去看 zed 的源码,有个模块中列出了所有可用的 zed 命令,我们可以看这些命令的名字,猜测它大约可能的作用,猜两次基本就能猜对了。
另一个办法是通过命令面板打开 zed: open default keymap
,这里会显示 zed 默认的快捷键设置,当你想修改某些快捷键的时候,就可以看看原来的快捷键对应的命令是什么,在这里找到,复制下来,粘贴到你自己的配置文件中。注意不要修改默认的快捷键,当然,你也修改不了,这个文件是只读的,但 zed 运行的时候,你自己定义的快捷键其实会覆盖默认的快捷键。
好的,这就是我总结出的一些经验,下面是我的配置文件,你应该可以看得懂了,我也加了一些注释,希望对大家有用。
[
{
"context": "Editor && (vim_mode == normal || vim_mode == visual) && !VimWaiting && !menu",
"bindings": {
// put key-bindings here if you want them to work in normal & visual mode
// 跳到行尾
"g l": "vim::EndOfLine",
// 跳到行首
"g h": "vim::FirstNonWhitespace",
// ge 文档底部
"g e": "vim::EndOfDocument"
}
},
{
"context": "Editor && vim_mode == normal && !VimWaiting && !menu",
"bindings": {
// put key-bindings here if you want them to work only in normal mode
// gb 回到上一个位置
"g b": "pane::GoBack",
// gr 转到引用
"g r": "editor::FindAllReferences",
// gi 转到实现
"g i": "editor::GoToImplementation",
// 格式化
"space f m": "editor::Format",
// 全局搜索
"space f w": "pane::DeploySearch",
// 文件名搜索
"space f f": "file_finder::Toggle",
// 重命名
"space r": "editor::Rename",
// 保存
"space w": "workspace::Save",
// 关闭当前页
"space c": "pane::CloseActiveItem",
// 关闭所有页
"space g c": "pane::CloseAllItems",
// 退出
"space q": "workspace::CloseWindow",
// 上一个标签页
"H": "pane::ActivatePreviousItem",
// 下一个标签页
"L": "pane::ActivateNextItem",
// 聚焦到文件树
"space e": "project_panel::ToggleFocus",
// 打开 Git Panel
"space g": "git_panel::ToggleFocus",
// 切换左侧栏展开关闭状态
"space b": "workspace::ToggleLeftDock",
// 切换到 AI Chat 栏
"space i": "assistant::ToggleFocus",
// 快速修复 | 代码动作
"space .": "editor::ToggleCodeActions"
}
},
{
"context": "Editor && vim_mode == visual && !VimWaiting && !menu",
"bindings": {
// visual, visual line & visual block modes
}
},
{
"context": "Editor && vim_mode == insert && !menu",
"bindings": {
// put key-bindings here if you want them to work in insert mode
// e.g.
// "j j": "vim::NormalBefore" // remap jj in insert mode to escape.
}
},
{
// netrw compatibility
"context": "ProjectPanel && not_editing",
"bindings": {
// 新建文件
"a": "project_panel::NewFile",
// 新建文件夹
"A": "project_panel::NewDirectory",
// 重命名
"r": "project_panel::Rename",
// 放到回收站
"d": "project_panel::Trash",
// 删除
"D": "project_panel::Delete",
// 复制
"y": "project_panel::Copy",
// 剪切
"x": "project_panel::Cut",
// 粘贴
"p": "project_panel::Paste",
// 在文件管理器中显示
"O": "project_panel::RevealInFileManager"
}
},
{
"context": "Editor && (showing_code_actions || showing_completions)",
"bindings": {
// 使用 tab 键切换代码建议
"shift-tab": "editor::ContextMenuPrevious",
"tab": "editor::ContextMenuNext"
}
},
{
"context": "Terminal",
"bindings": {
// 打开 / 关闭终端
"ctrl-`": "workspace::ToggleBottomDock"
}
},
{
"context": "ConversationEditor > Editor",
"bindings": {
// 给 AI 助手发送消息
"alt-enter": "assistant::Assist"
}
},
{
"context": "GitPanel && ChangesList",
"use_key_equivalents": true,
"bindings": {
"o": "menu::Confirm",
"c": "git_panel::FocusEditor"
}
},
{
"context": "GitPanel > Editor",
"use_key_equivalents": true,
"bindings": {
"escape": "git_panel::FocusChanges"
}
}
]
评论
发表评论
加载评论中...