专栏名称: 程序猿
本微信公众号:imkuqin,为程序员提供最新最全的编程学习资料的查询。目前已经开通PHP、C/C++函数库、.NET Framework类库、J2SE API查询功能。
目录
相关文章推荐
程序猿  ·  Vue 3.5 正式版发布,都有哪些变化? ·  4 天前  
程序员的那些事  ·  趣图:请不要打扰工程师 ·  6 天前  
码农翻身  ·  漫画 | 程序员,你千万千万不能喝酒啊! ·  5 天前  
程序猿  ·  Python中33个关键词 ·  1 周前  
程序员小灰  ·  出成绩了!!! ·  1 周前  
51好读  ›  专栏  ›  程序猿

“告别 Neovim!为什么我投奔了刚开源的 Zed 编辑器?”

程序猿  · 公众号  · 程序员  · 2024-09-03 23:48

正文

本文经授权转自公众号CSDN(ID:CSDNnews)

作者 | Steve Simkins,责编 | 苏宓

Zed 是一款专为团队协作设计的代码编辑器,由 Atom 编辑器的原作者主导开发。Zed 的核心目标是为开发者提供一个高效、流畅、且直观的编程环境,特别强调实时协作和团队合作。该编辑器由 Rust 语言编写,并内置了 rust-analyzer,主打“高性能”。自今年 1 月开源以来,Zed 迅速赢得了开发者的青睐,甚至有用户为此放弃了使用多年的 Neovim,转而投入 Zed 的怀抱。

原文链接:https://stevedylan.dev/posts/leaving-neovim-for-zed/


以下为译文:

我认为每个人都有各自喜欢的文本编辑器,以及他们是通过层层筛选才选择出最适合自己的工具。在这里,我将分享我选择编辑器的故事,也希望我的经历和观点能促使其他人在自己的舒适区之外尝试开发工具。你永远不会知道你会用上什么,以及你会有多喜欢它!

我的文本编辑器之旅始于对 Atom 的模糊记忆。当时我正在学习 HTML、CSS、Javascript 的基础知识,老实说,我也说不清自己是怎么把 Atom 作为自己的首个文本编辑器使用的。我只记得我用了几个星期后,就看到其他人持续使用或提到 VSCode,所以我也好奇地试了一下,并用了一段时间。

不过,这种情况并没有持续多久。当时,我妻子需要我的笔记本电脑来做图片编辑工作,所以我就用了我哥哥的旧 Macbook。那时,VSCode 的 Electron 构建开始对电脑性能造成明显影响,此时我也在偶然发现了 Vim。

要知道,在以前的工作中,我是一个键盘极致主义者,在那里我学到了速度=生产力,所以我毫不犹豫地选择了学习它。我从基本动作和 Vim 教程开始学习,我的优势在于我只是兼职学习编程,而不是全职工作。几周内,我就能坚持使用 Vim,用它来编写和学习代码。在修改或优化 Vim 编辑器的配置文件之后,我又发现了 Neovim 编辑器。

在接下来的几年里,我一直坚持使用 Neovim,并爱上了它,我的大部分工作效率都归功于它。我花了无数个小时来配置它,就像我们很多人一样。我最终达到了不怎么调整配置的地步,但这很快就不重要了。

1、发生了什么样的变化?

每隔一段时间,我就会更新 Neovim 中的一个插件,然后惊讶地发现,这会导致原本设置好的东西会坏掉、崩溃,进而我不得不花时间去修复它,而不是去完成工作。这导致我的配置越来越精简,但仍需要配置很多东西要让所有基本功能都能正常工作。我坚持使用 Neovim 是因为它仍然比使用 VSCode 好,同时它也是基于终端的工作流程的关键,这是其他编辑器无法比拟的。

不久前,当我开始处理一些非常庞大的代码库时,我的想法又开始转变了。在工作效率为王的时候,我经常会遇到卡机、屏幕卡住等问题,这些问题让我抓狂。我也试过改用其他终端模拟器,比如 Alacritty 和 Wezterm,但都没什么用。

这时,Zed 又进入了我的视线。几个月前我就听说过它,当时还试过,但因为它不是一个终端工作流,所以我就没有坚持使用。不过,它自诩速度很快,我决定再试一次。两个月后,我开始每天都使用它。在使用它的过程中,我感觉这是一次奇妙的体验,我觉得自己再也回不去了。

2、我使用 Zed 的经验

我最终为什么会选择 Zed,可以在接下来的文章里看一下我的经验,以及我是如何让它为我所用的。

它就是好用

到目前为止,我使用 Zed 的最大感受之一就是“一切都很好用”。IDE 或文本编辑器的很多功能都被人们认为是理所当然的,直到他们不得不在 Neovim 这样的低级软件中进行各种设置,才发现事实并非如此。

LSP(语言服务器协议)当然是其中之一。如果你对它不熟悉,它就是在你编写代码时经常跳出提示或错误的根源,它也会让你在语言层面上深入了解你的 repo。在 Neovim 中设置 LSP 是一项繁重的工作,有时要找出它可能出现问题的原因会比较困难。不过,它确实给了你更多的控制权和进行大量定制的选择。

现在有了 Zed,LSP 就能正常工作。你可以通过配置来编辑某些内容,但整体而言,它只是开箱即用。已经有了“显示定义”、“转到定义”甚至代码操作等按键绑定。唯一的缺点是,在扩展程序之外,你无法使用自己机器上安装的 LSP,但由于支持的语言非常多,我还没有遇到过这个问题。

另一个与 LSP 相关的部分是代码补全。这是指你在输入一些代码时,会得到自动补全的建议,从而快速补全代码的其余部分。LSP 通常具有很好的自动补全功能,因为它们了解该语言中使用的模式。需要说明的是,我们还没有讨论 Copilot,这只是针对代码片段和 LSP 的补全。再说一次,Zed 的自动补全功能是开箱即用的,而 Neovim 则不同,后者需要多个插件才能正常工作。

最后是 Git 集成。在 Neovim 中通常需要多个插件才能实现的功能,在 Zed 中也能立即实现,包括切换 Git Blame、查看差异和显示已编辑行状态的边线符号等功能。

如果非要做一个粗略的比较,那就类似于 Linux 和苹果。Linux 可以让你对每一个软件和硬件进行更多的控制,但代价是要花费时间去配置。苹果给你的控制权会少一些,但运行起来可能会更流畅。

运行速度

当然,我选择 Zed 的最大原因之一就是它的速度。

它的运行速度非常快,能处理较大的代码库,而且到目前为止我还没有遇到过任何延迟问题。通常情况下,我不会推荐用 Rust 来构建大多数东西,但这款应用让我不得不重新考虑。用 Rust 编写的开发工具实在是太多了,这也许是 Rust 最大的优势之一。Zed 的团队在这款应用上确实做得很出色,它确实是一件艺术品。

我能否通过调整配置让 neovim 更快?也许可以,但到头来浪费的时间更多,而我本可以用来编写代码,提高工作效率。对于像我这样的生产力狂人来说,我自己心里有一个微妙的衡量标准,即平衡我花在自动化任务上的时间与没有自动化任务所需的时间。在这种情况下,如果有一个像 Zed 这样的工具就能很好地完成任务,那么所带来的好处就不值得付出代价。

Vim 模式

在我使用 Neovim 的过程中,我遇到了其他一些对 Neovim 充满抱怨的用户,他们发现自己花了太多时间来解决 Neovim 中的问题,以至于他们转而使用 VSCode。当然,我自己也有过这样的时候,我怀疑自己是否错过了什么。这时候我的电脑速度快多了,所以我想再试一次。当然,我下载了 Vim 插件,因为无论使用哪种文本编辑器,Vim 键绑定都值得学习。然而,没过一两周,我又回到了 Neovim。

当我再次考虑使用 Zed 时,我读到了一篇关于 Zed 内置的自定义 Vim 模式的博文(https://registerspill.thorstenball.com/p/from-vim-to-zed)。这不是一个第三方插件,而是 Zed 开发人员的心血结晶。他们明确表示,他们并不打算把所有东西都移植到 Zed 上,但他们已经出色地完成了对重要内容的支持,使编辑器拥有了 S 级体验。

我可能会在本篇文章中进一步讨论这个问题,但在 Zed 中为 Vim 模式设置键绑定的方式非常棒。这种结构允许典型的 VScode 风格配置,但能将按键绑定范围扩大到 Vim 模式,这对 Neovim 用户来说是一个巨大的优势。例如,我可以在正常模式下使用引导键,并获得诸如space d查看诊断或space t打开全窗口终端之类的功能。许多 Vim 用户都会喜欢这种模式,我希望能有更多相关文档加以说明,因为我在学习过程中,也不得不自己摸索出其中的一些方法。

除了按键绑定外,Vim motions 中的其他所有功能你都可以在这里找到,当然还有一些不常用的功能会在新版本中慢慢添加进来。其中一些采用了独特的方法,使用 Zed 的一些内置功能来替代 Vim 通常使用的功能,例如搜索和替换。一般情况下,你必须使用 Vim 命令来搜索一个词并替换它,这些命令仍能实现你所期望的功能,但在进行全项目搜索时,它会显示 Zed 的多缓冲区视图。你可以使用 Vim 模式,但它仍然是 Zed 及其独特的功能集。

AI

说到 AI 功能,我认为 Zed 提供了一些很棒的内置工具。我要说明的是,我并不是文本编辑器中 AI 功能的忠实用户,因此与 Cursor 相比,你可能需要寻找一些我无法谈论的东西。话虽如此,它确实内置了 Copilot,这可能是大多数人想知道的。

Zed 还有一个助手面板,你可以通过 API 访问多个人工智能模型,包括 OpenAI、Ollama 和 Anthropic。只需几行配置即可开始使用。

我认为一个特别好的功能是内联助手,你可以在其中选择几行代码,然后使用 ctrl+Enter 键通过前面提到的 AI 辅助配置触发对代码的请求。如果你喜欢这样的结果,就可以确认并继续编码。

Zed ≠ Neovim

到目前为止,你可能已经知道我是 Zed 的超级粉丝了,但我要说的是,它并不能 1:1 地取代 Neovim。Neovim 的特别之处在于它是原生终端。每当我需要编辑一个应用程序的配置文件,或者只是在终端中快速编辑一些内容时,没有什么比使用 Neovim 更方便的了。像这样为每个文件打开 Zed 会很累,但对于长期会话或项目来说,它是完美的选择。如果把它比作摩托车,那么 Neovim 就是我的越野车,而 Zed 就是我的巡洋舰。

3、让 Zed 为 Neovim 用户工作

虽然 Zed 无法真正替代 Neovim,但有很多小配置确实有助于改善体验,让 Neovim/Vim 用户感到熟悉。

Vim 模式和快捷键绑定

第一个就是在 Zed 上也能体验到 Vim Mode。Zed 开发者文档里面有一个很棒的“Vim Mode”页面(https://zed.dev/docs/vim),其中一个称为“vim 模式”的 vim 模拟层,这个文档旨在描述其工作原理以及如何充分利用它。

对于我个人而言,我最喜欢的就是前面提到的基于 Vim 模式的按键绑定功能。下面是一些例子:

[  {    "context": "Editor && VimControl && !VimWaiting && !menu",    "bindings": {      "space b": "editor::ToggleGitBlame",      "shift-k": "editor::Hover",      "space l f": "editor::Format",      "space d": "diagnostics::Deploy",      "space f f": "file_finder::Toggle",      "space o": "tab_switcher::Toggle",      "space e": "workspace::ToggleLeftDock",      "space /": "workspace::NewSearch",      "n": "search::SelectNextMatch",      "shift-n": "search::SelectPrevMatch",      "space t": "workspace::NewCenterTerminal",      "g b": "editor::ToggleComments",      "+ +": "workspace::Save",      "space c": "pane::CloseActiveItem"    }  },  {    "context": "Editor && vim_mode == visual && !VimWaiting && !VimObject",    "bindings": {      "shift-j": "editor::MoveLineDown",      "shift-k": "editor::MoveLineUp"    }  },]

其中大部分都不言自明,但关键在于第一组是“正常”模式,而下一组是“可视化”模式。他们还在文档中提供了一些小的改进或快捷方式,比如这组快捷键绑定,可以让你切换窗口,与大多数人设置 Neovim 的方式类似。

[  {    "context": "Dock || Terminal || Editor",    "bindings": {      "ctrl-h": ["workspace::ActivatePaneInDirection", "Left"],      "ctrl-l": ["workspace::ActivatePaneInDirection", "Right"],      "ctrl-k": ["workspace::ActivatePaneInDirection", "Up"],      "ctrl-j": ["workspace::ActivatePaneInDirection", "Down"]    }  },]

对于任何试图从 Vim/Neovim 迁移到 Zed 的人,我还建议他们查看默认的 Vim 键盘映射(https://github.com/zed-industries/zed/blob/340a1d145ed15e39a4a27afc5a189851308fb91d/assets/keymaps/vim.json#L4),这里有可以让你了解哪些功能受支持以及你可能需要调整哪些功能!

减少 UI

Zed 已经拥有相当不错的简约用户界面,但我更喜欢与 Neovim 设置更接近的界面。幸好 Zed 提供了这些选项,如禁用标签栏、滚动条、缩小工具栏和相对行号等。

{  "cursor_blink": false,  "relative_line_numbers": true,  "scrollbar": {    "show": "never"  },  "vertical_scroll_margin": 0,  "tab_bar": {    "show": false  },  "toolbar": {      "breadcrumbs": true,      "quick_actions": false  },}

插件替换

由于我不使用标签栏,所以我希望能有类似 Telescope 的功能来在缓冲区或文件间导航。幸运的是,有一个选项可以实现这一点!这个按键绑定将显示当前打开的所有缓冲区,它与文件查找器是分开的。

{  "context": "Editor && VimControl && !VimWaiting && !menu",  "bindings": {    "space o": "tab_switcher::Toggle",  }}

说到 Telescope,一个重要的替代功能就是项目范围内的搜索。虽然 Zed 没有模糊查找功能,但项目搜索功能非常出色。它可以在多缓冲区视图中显示所有结果,这非常巧妙,而且允许你在该视图和缓冲区本身之间轻松切换。

终端切换功能与 VSCode 非常相似,但还有其他一些隐藏方法可以获得更好的终端体验。其中之一是将底部终端切换为全屏的快捷方式,但更好的方法是在主编辑视图中将终端作为缓冲区打开。

{  "context": "Editor && VimControl && !VimWaiting && !menu",  "bindings": {    "space t": "workspace::NewCenterTerminal",  }}

我必须放弃的一件大事是 Tmux 和切换项目。虽然 Zed 并非完美的替代品,但它的“切换项目”功能非常好用,让切换上下文变得非常容易。只是你无法获得与 Tmux 完全相同的控制和布局设置。

{  "context": "Workspace",  "bindings": {    "cmd-k": [      "projects::OpenRecent",      {        "create_new_window": false      }    ]  }}

4、你应该使用 Zed 吗?

如果你还在犹豫是否要使用 Zed,我认为至少值得试用几天。

根据我目前的经验来看,它是一款独一无二、功能强大的文本编辑器。但归根结底,只要能提高你的工作效率,无论是 VS Code、Jetbrains,还是 EMacs,都一款好的文本编辑器。最后,我想说,日常也不要太固执而拒绝尝试新事物。

本文转自公众号“CSDN”,ID:CSDNnews

---END---