Zed 自动补全的坑终于填上了

简介: Zed修复了LSP补全逻辑缺陷:此前因LSP未提供textEdit时,Zed会错误替换光标后整词,导致代码被“背刺”。现改为以光标位置为编辑边界,尊重用户lsp_insert_mode配置,补全更精准可靠。(239字)

不知道你有没有在Zed写代码的时候,被自动补全背刺过。

明明光标停在函数参数中间,手按Tab选中补全项,结果眼前的代码直接被改得面目全非。上一秒还好好的函数调用,下一秒原有变量名直接消失,留下一段语法不对的代码,自己还要回退撤销,重新敲一遍。这不是手速的问题,是编辑器的补全逻辑悄悄自作主张了。

这个坑的根源来自LSP协议本身。有些语言服务返回的补全项只有insertText和label,并不附带textEdit,也就是没有明确告诉编辑器应该插入还是替换哪一段文字。

按照LSP文档的说法,insertText交由客户端自行解释。这下难题就丢给Zed这边了。在本次修复之前,Zed会自作聪明地向后查找光标后面的单词,直接把整个现有单词当作待替换区间。

举个例子来说:

test(value1, ˇvalue2)

光标就在逗号后面、value2前面。LSP返回补全value2=,没有给出编辑范围。旧版Zed直接判定后面整个value2是要被替换掉的内容。一按Tab,直接变成:

test(value1, value2=)

原有value2直接不见了。很多人以为是LSP服务出bug,反复排查后端配置,殊不知是Zed本地推断编辑区间的逻辑闯了祸。

更让人头疼的是,此时你的completions.lsp_insert_mode设置直接形同虚设。不管你配置的是插入模式还是替换后缀模式,这一类缺失edit‑range的补全会直接无视该配置,强制走替换逻辑。用户的设置完全不起作用,相当于你的偏好被编辑器硬覆盖了。

这次 zed终于修好了这个bug。核心改动思路很简单:当LSP没有给出编辑范围的时候,不再盲目的往后吃掉后面完整单词;推断的编辑区间终止于光标位置。

这么一改之后,completions.lsp_insert_mode终于可以生效了。

在这里插入图片描述

拿默认配置replace_suffix举例。value2并不是value2=的后缀,编辑器就选择插入,最终结果:

test(value1, value2=value2)

看到这里有人会疑惑,怎么没有直接覆盖?这恰恰就是这套逻辑的本意。是否吃掉光标之后的文字,现在由后缀校验规则说了算;校验现在改用原始LSP的label,不再拿菜单上美化过后的显示文字或者filterText去做判断。

往后遇到LSP服务偷懒、不返回textEdit的补全项,编辑器不再擅自做主删除后面的标识符。补全行为回归用户配置。

不要小看这一处修复。日常写Go、Rust以外的第三方LSP时,不少语言服务器都习惯只返回insertText。之前在Zed写这类项目,时不时就要跟乱删代码的补全斗智斗勇。现在这一块终于理顺,以后按Tab补全的时候,心里总算踏实一点。

相关文章
|
1天前
|
Web App开发 程序员 C++
VSCode高效新特性:支持mac原生窗口,窗口切换的痛点瞬间消失
Mac用户必看!VS Code开启`window.nativeTabs: true`后,标签页彻底原生化:支持拖拽分离/合并、三指上推归组、双指滑动切换,菜单栏与标签分离更符合macOS设计哲学。虽略增垂直空间,但体验丝滑如Safari。
|
1天前
|
安全 网络安全 C++
不用Remte-SSH,VSCode也能用这个方式远程开发
VS Code Remote Tunnels 让你无需公网IP、端口映射或SSH,即可通过浏览器(vscode.dev)安全访问本地电脑的完整开发环境——终端、调试、扩展全在本地运行,仅需GitHub登录,即开即用,真正实现“ anywhere coding”。
|
4月前
|
人工智能 开发工具 开发者
VS Code 用了 5 年的功能,Zed 1.6刚做出来就直接封神了
Zed编辑器v1.6推出提交历史分栏Diff切换功能:支持单栏流式与左右分栏双模式自由切换,直观对比代码变更,无需外接工具;深度集成Git面板,提升审查效率、降低理解成本,强化一站式开发体验。(239字)
418 1
|
3月前
|
人工智能 数据可视化 安全
Claude Code /config`完全指南:AI 编程调教术
Claude Code 的 `/config` 是其核心交互式设置面板,一键呼出即可管理模型、上下文、权限、编辑器、输出等全部配置。支持 Tab 导航、实时搜索、多层级配置文件,并新增 `--help` 快捷键与更直觉的 Enter/Space 切换逻辑,让 AI 编程体验真正个性化、高效化。(239字)
576 0
|
4月前
|
人工智能 前端开发 Shell
用完Zed之后,我发现了VS Code 和Zed的一个重大区别
作者尝试Zed等轻量编辑器后,发现VS Code真正的优势在于“工作流连续性”:自动恢复终端历史、工作目录、分屏布局与命令上下文,极大降低心智负担。这并非功能堆砌,而是将终端深度融入开发环境的状态管理——轻快易用与环境记忆之间,开发者终需权衡。(239字)
362 0
|
4月前
|
测试技术 数据安全/隐私保护
当我们谈代码的可维护性到底在谈说什么
这是一篇关于代码可维护性的深度实践指南:从“祖传屎山”的痛悟出发,用真实案例诠释命名、模块化、可测试性、一致性和简洁性五大核心;融合静态分析、自动化、Code Review等落地方法,揭示可维护性本质——不是追求完美,而是对时间、同事与未来的温柔负责。(239字)
311 1
|
5月前
|
IDE 前端开发 开发工具
Google 的 IDE 演进小史
本文回顾Google IDE演进史:从工程师各用所爱(Vim/Emacs/IntelliJ/VS Code),到因超大规模代码库(google3)催生云端IDE Cider,再升级为融合VS Code前端的Cider V。其核心不是统一工具,而是以云化语言服务重构开发体验,将IDE升维为连接代码库、构建、审查与AI的工程杠杆。
390 0
Google 的 IDE 演进小史
|
5月前
|
人工智能 Rust 开发工具
Zed 1.0正式发布:VS Code慌了?
Zed 1.0正式发布!这款用Rust打造、GPU加速的“游戏引擎级”编辑器,告别Electron瓶颈,实现毫秒级响应;原生集成AI多Agent协作,支持DeltaDB字符级同步。它不是VS Code替代品,而是对编辑器本质的重新定义——性能即自由,人机协作为常态。(239字)
441 1
|
5月前
|
人工智能 IDE Shell
Zed IDE这个终端新功能,治好了我的窗口切换焦虑
Zed IDE近期发布多项重磅更新,尤其新增“New Center Terminal”功能,让终端可直接在编辑区并排打开,告别拖拽拼图式操作。本文详解其双终端模式、心流提升逻辑及开源协作精神,并展望AI驱动的智能终端未来。(239字)
475 2
|
5月前
|
IDE Go 开发工具
Zed IDE 的这个插件终于能像 GoLand 一样调试go项目了!
Zed IDE正挑战VS Code,其Go调试插件zed-go-debug以Rust重写,实现GoLand级体验:自动识别调试任务、智能查找dlv、一键诊断、原生快捷键、远程/进程附加调试,让调试真正“懂你意图”,专注逻辑而非配置。(239字)
401 1

热门文章

最新文章