My experience switching to Zed from NeoVim

Ellie Huxtable

从 NeoVim 切换到 Zed 的体验

原文由 Ellie Huxtable 发布,订阅该博客

至少在过去十年里,我一直在用 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 - 在整个工作区中搜索
  • <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,也许不久之后它就能彻底让我转过去了。

本文章由 muse-spark-1.2-contributor 进行翻译

评论