我从 NeoVim 切换到 Zed 的体验
我使用 Vim/NeoVim 已经至少十年了。当年我的工作流越来越偏向终端,于是从 Sublime Text 转了过来。
这些年里,我尝试过许许多多的编辑器——但最后总是回到 Vim。VSCode 挺不错,但它的 Vim 模拟总差那么一点意思。我经常被自己绊住,体验非常别扭。我还觉得这个编辑器有点过于拥挤——我只希望它别来烦我,让我安心编辑文本就好!
我也试过 emacs(准确说是 evil)、helix 等等。
但到目前为止,Zed 是最让我动心的。我去年试过一次,当时感觉它还略显粗糙——而且那时它还不是开源的。
我是从 Atuin 开始接触的,这是一个 Rust 项目。所有工具链都自动配置好了,我完全不需要做任何配置。真不错!
设置
Zed 开箱即用就相当不错,不过我还是想改一些东西。
以下是我的全部配置:
{
"theme": "Gruvbox Dark Soft",
"vim_mode": true,
"buffer_font_size": 12,
"ui_font_size": 14,
"buffer_font_family": "FiraCode Nerd Font",
"relative_line_numbers": true,
"terminal": {
"line_height": "standard"
},
"lsp": {
// Specify the LSP name as a key here.
"rust-analyzer": {
//These initialization options are merged into Zed's defaults
"initialization_options": {
"checkOnSave": {
"command": "clippy"
}
}
}
}
}除了显而易见的主题/字体设置之外,我发现终端的行高默认值有点奇怪。它似乎比应有的高度略高,导致某些 TUI 显示起来不太对劲。把它设为 "standard" 就解决了这个问题。
我还对 Rust 的 lsp 配置做了一些调整。
按键绑定
接下来我改的是 Vim 绑定。它们开箱即用已经相当标准,但我有几个核心的自定义绑定,是保持高效所必需的。
jj- 我把 jj 重映射为 esc,这样手指可以一直停在本位行上<leader>w- 保存当前缓冲区<leader>s t- 在整个工作区中 grep<leader>f- 搜索文件
据我所知,Zed 并没有 leader 键的概念。没关系!我可以直接硬编码这些绑定。
我的配置如下:
[
{
"context": "Editor && vim_mode == insert && !menu",
"bindings": {
"j j": "vim::NormalBefore"
}
},
{
"context": "Editor && vim_mode == normal && !menu",
"bindings": {
"space w": "workspace::Save",
"space s t": "workspace::NewSearch",
"space f": "file_finder::Toggle"
}
}
]我觉得键位映射允许以表达式形式指定上下文这一点非常酷。比起 inoremap 之类的写法,可读性好太多了。
你可以在默认键位绑定中找到其他操作(cmd-shift-p,搜索 default keybindings)。
编辑体验
我发现 Zed 用起来非常舒服。一切都如丝般顺滑,你能真切感受到他们在性能上下了很大功夫。界面非常简洁,有点让我想起 Sublime。
他们的UI 框架是用 Rust 写的,希望很快能看到更多应用采用它!
会一直用下去吗?
暂时还不会。但已经很接近了!我用它的时间比之前尝试过的任何其他编辑器都要长,但在一个内置终端的编辑器里工作——而不是在一个带编辑器的终端里——我仍然觉得有些不习惯。不过这完全是我自己的问题,与 Zed 无关。
除此之外,Vim 模拟还有几个缺口。我很重度地使用标记(marks),而它还没有实现——这让我频频碰壁。另外,我的 jj 绑定时不时会失灵——也许是我按得太快了。不过我没法轻易复现这个问题,它只是偶尔发生。
我想我会继续关注 Zed,也许不久之后它就能彻底把我转化过来了。
随机一篇博客