前几天看到 JetBrains Fleet 公测,下载下来体验了下,来写一篇测评。
Fleet 这个编辑器在今年年初就开放了内测申请,当时我也提交了,但可能由于自己不使用他们产品的缘故,一直没等到内测资格。
既然公测了,至少也要达到基本可用的地步,但在我这段时间的试用中,发现的问题不少,也有一些影响到了最基础的开发流程。
Fleet 是什么
一句话介绍:Fleet 是 JetBrains 开发的一款轻量级编辑器,和 VS Code 是一类。
VS Code 相信大家很熟悉了,长期位居编辑器排行榜首,前端开发必备神器,我自己也用了两年以上。
JetBrains 官网的介绍是这样的:
官网写着它是一个 IDE,但现在看来,它还不是完全体,暂且叫做编辑器,毕竟它能做的事 VS Code 大多都能做。
官网给出的亮点如下:
- 智能:可以在编辑器模式下快速启动,然后激活智能模式获得代码补全等功能
- 分布式:可以将后端运行在 JetBrains Space 上,也可以跑在自己的远程机器,或者 Docker 中
- 协作:多人协作开发,能看到对方的进度,大家共享一套终端和调试器
- 多语言支持:目前支持 Python / Java / Javascript / Go / HTML 等
我的评价是没有亮点,编辑器模式在 VS Code 中可以通过插件按需启用实现,VS Code 的 Remote 插件带起了远程开发的潮流,Live Share 可以实现多人协作开发,至于多语言支持,用过的都说好,除了安卓开发和 C。
另外,这玩意的正式版是收费的,价格未知。JetBrains 在这个新产品上沿用了其它 IDE 的定价模式,社区版只可用于个人学习和开源项目,而且不支持远程开发等高级功能。
JetBrains 深耕 IDE 产品线,加上公司一般会为员工购买许可证,这倒也不是什么大问题。
说到许可证,这里顺便提醒大家一下,公司买的许可证只能用来做公司的项目,做个人项目需要自己再买一份。
上手
我使用的系统是 Manjaro,运行 Linux 6.0.0 内核,8GB 内存。
Fleet 版本是 1.9.231。
这里的演示项目是 JFetcher,一个简书数据采集服务,总代码量不到一千行。
打开速度略慢于 VS Code,考虑到还在内测阶段,可以接受。
在编辑器模式下的界面是这样的:
这设计风格很 VS Code,不过底栏的配色比 VS Code 默认的蓝条好看。
此时内存占用为 908M,用 VS Code 打开同样的项目,启用所有 Python 相关扩展,内存占用为 227M。
看来浏览器套壳优化好也是相对省资源的,Java 在客户端上跑还是太重了。
接下来我们激活智能模式,点击右上角的闪电图标。
Fleet 成功识别到了项目中的 pyproject.toml
文件,并调用 Poetry 完成了项目依赖的安装,同时开始索引项目目录下的文件和所有第三方库的文件。
内存占用一路上升,最终稳定在 2863MB,同时由于索引更新,CPU 持续满载。
当我打开项目文件夹,发现 .mypy_cache
没有被自动隐藏的时候,就已经想到会发生什么了。
这是 Python 静态类型分析工具 mypy
的缓存目录,存储着整个项目中的类型信息,在我的项目中,有 1640 个文件,以 JSON 格式为主。
看起来 Fleet 也尝试索引了这些文件,但我试着使用文本查找功能,没有找到文件中的内容。
简单看了一下对各种文件类型的支持:
- .py:Python 源代码文件当然是支持的,语法高亮和自动补全正常
- .dockerignore 和 .gitignore:没有高亮(也没什么可高亮的),有基于单词的补全
- .yaml:有高亮,没有任何补全,但有错误提示
- .md:有高亮,不支持预览
- .toml:有高亮,有基于单词的补全,有错误提示
- requirements.txt:啥都没有
- Dockerfile:有高亮,有智能补全,有错误提示,但没有命令的解释
- docker-compose.yml:有高亮,有智能补全,有错误提示,没有命令解释
整体来说,我对 .yaml
文件的补全不满意,对 .md
文件不支持预览感到有些失望,其它文件格式支持尚可。
顺便提一句,在 docker-compose.yml
中,每个 service
的左侧都会出现运行按钮,可以一键运行对应容器,也可以运行所有。
我没有使用 Makefile
的项目,如果大家有,欢迎分享这个格式的支持情况。
关于 Python 的测试
首先,开启智能模式后界面配色没有发生变化,VS Code 语言服务器加载成功之前,方法名等语法要素是白色的,加载后则是主题设置的颜色。
各种常见缓存目录没有自动隐藏,也没有变灰,和普通文件夹无异,这一点是比较不友好的。
明明能检测到全局解释器,却不显示出来,自动搞定了环境配置也没有任何提示,内置终端同样不会自动激活虚拟环境。
代码编辑体验方面,VS Code 可以在自动补全右侧显示出对应函数 / 类的用法,但在 Fleet 上我没有找到这一功能,只有函数名右侧灰色的参数类型提示。
输入代码有可感知的延迟,在激活自动补全时偶尔会出现卡顿,略微影响编辑体验。
Fleet 可以正常识别出函数和类的定义,可以解析文档字符串格式。值得称赞的一点是,Fleet 会自动对过长的参数信息进行换行展示。
转到定义、转到引用的界面和 VS Code 很相似,操作也大同小异。
我不确定 Fleet 的代码格式化功能使用的是哪个格式化工具,但在我使用 black
格式化后的代码上,这一功能并不会带来任何格式上的更改。
我不明白为什么要在每个文件的第一行加入运行按钮,一眼看起来像是运行一行导入语句。写入 Python 文件的常见入口 if __name__ == "__main__":
后,左侧会出现运行按钮,但文件开头的运行按钮依然没有消失。
语法元素全局搜索有一定延迟,且没有缓存。
Git 集成
Fleet 成功识别了 Git 仓库,但并不会像 VS Code 一样,有未提交的文件时在 Git 图标上显示数字,只有文件名右侧的 Badge 提示。
Badge 颜色的选择我认为比 VS Code 好,文件修改是蓝色,而不是 VS Code 上的橙色。
在文件包含错误,并同时拥有版本管理状态时,会优先显示版本管理的 Badge,这导致几乎所有错误都不能在文件列表发现,必须点开文件才能看到。
在编辑器右键,选择 Git > Toggle Git Blame
,可以显示该文件每一行的修改时间和修改者,类似 VS Code 的 GitLens 插件。
但这个功能存在一个严重的体验问题:在点击黄色条试图展开修改历史时,实际触发的是设置断点,展开修改历史其实要点击左侧区域。
而且鼠标悬浮在黄色条上时没有任何视觉反馈。
设置断点的视觉反馈也存在问题,只有鼠标放上去的第一个行号才会有暗色红点的反馈,上下滑动不会有反馈,但点击又能正常操作。
在空行的行号上悬浮鼠标是有反馈的,但空行其实无法设置断点。
另外一点交互逻辑问题在 Git 面板上,修改可以一键 Commit,但不能一键 Revent。
面板中列出了所有未与远程同步的更改,并提供了一键同步选项。
History 标签页提供了 Git 历史的查看和筛选功能,但并不能直观看到分支的操作,也不能快速进行多分支比较。
其它内置功能
文件管理器缺少右键打开终端功能,这一点我表示很不爽。
Show in 命令没有 Ranger,不强求了,毕竟不是为 Linux 专门优化的。
Docker 面板一般般,甚至不支持多选,UI 设计也过于简洁了。
稳定性
在我体验期间,遇到过多次界面卡顿,同时右上角的通知中出现了很多报错:
新产品稳定性一般可以理解,但我体验一个小时 100 条报错有点过分吧。
UI 设计
最大的问题是页面元素冗余。
左上角有个 Fleet Logo,右面有个菜单图标,Logo 本身却没有任何功能。
三个界面控制相关的按钮,分别控制左边栏、右边栏、底栏的展开和折叠,但按钮却全部位于左侧。
这里比较好的解决方案是全屏状态下从左、右、下拖动窗口时触发展开操作。
配色过于单调,大量的白色让我一度怀疑它是否成功解析了语法。
文档字符串与注释颜色相同,个人认为不太合理,沿用绿色会比较好。
标签页的图标已经有足够的表意作用,却还要加上文字说明,面板列表和实际显示的标签页名称存在不一致。
设置不是高频使用的功能,却占据了右上角的位置。
下边栏左侧显示的文件名和标签页名称重复,错误提示却在右侧,很多编程语言都有单行长度的限制或最佳实践,想看个报错数量还要将视线移动到右侧,影响效率。
右下角的当前光标位置不能隐藏,绝大多数人都不会关心自己的光标在第几行第几列。
文件编码和编程语言选择列表很长,完全可以把检测到的和常用的项放在前面,方便快速选择。
以上提到的这些我都没有在设置中找到对应的选项。
总结
标题我本来想写初露锋芒,但这个体验实在不敢恭维。
首先,作为轻量级开发工具,内存占用要降下去,有这个资源占用,就要有对应的功能来支撑,JetBrains 复用了多少旧代码咱也不知道。
对于特定语言的开发者,能用,但是很不好用,缺少语言专属 IDE 的高级功能,与其它编辑器相比又没有充足的可配置性。
Fleet 对标 VS Code,预设快捷键里却没有 VS Code 键位,另外我真的很像要 Vim 键位,体验过程中已经不知道多少次下意识 Esc 了,谢谢。
设置项用上了 JSON,但可定制性远远不够,设置项数量远远达不到驱使用户互相分享配置文件的地步。
JetBrains 你没有开发轻量级编辑器的经验,可以去当 VS Code 贡献者,先学学人家是怎么做编辑器的,用上 LSP,别沉迷于你自研的代码分析引擎。
插件系统赶紧上,不然没人写插件很难扩充生态,但有了插件之后内置的功能很大概率会被抛弃,尤其是 Docker 这种结合不紧密的。
三句话总结,在这东西迭代 20 个功能版本以前,我不会再去尝试;同时,我不建议任何人现在用 Fleet 作为主力开发工具;我认为它无法抢占轻量级编辑器的市场。
So JetBrains, ___ you.