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补全的时候,心里总算踏实一点。

相关文章
|
5月前
|
IDE Go 开发工具
Zed IDE 的这个插件终于能像 GoLand 一样调试go项目了!
Zed IDE正挑战VS Code,其Go调试插件zed-go-debug以Rust重写,实现GoLand级体验:自动识别调试任务、智能查找dlv、一键诊断、原生快捷键、远程/进程附加调试,让调试真正“懂你意图”,专注逻辑而非配置。(239字)
435 1
|
22天前
|
人工智能 监控 IDE
Jetbrains 正式官宣:全新AI IDE正式发布!
JetBrains AIR 是全球首个AI原生IDE,定位为“智能体调度台”而非AI供应商。它不内置模型,而是通过ACP协议统一管理Codex、Copilot等第三方智能体,支持多任务并行、实时会话监控、一键子任务与Worktree开发,强调确定性、可审查性与开发者主权。(239字)
174 1
|
4月前
|
人工智能 API C++
Claude Code 2.1.163 新特性:c to copy
Claude Code 新增「c to copy」快捷键:按 `c` 即可将 AI 的原始 Markdown 答案(含代码块、标题、列表等格式)一键复制,粘贴至 Notion/Obsidian/GitHub 等平台自动渲染。省去手动排版,守护心流,小功能见真功夫。(239字)
874 122
|
22天前
|
安全 网络安全 C++
不用Remte-SSH,VSCode也能用这个方式远程开发
VS Code Remote Tunnels 让你无需公网IP、端口映射或SSH,即可通过浏览器(vscode.dev)安全访问本地电脑的完整开发环境——终端、调试、扩展全在本地运行,仅需GitHub登录,即开即用,真正实现“ anywhere coding”。
|
22天前
|
Web App开发 程序员 C++
VSCode高效新特性:支持mac原生窗口,窗口切换的痛点瞬间消失
Mac用户必看!VS Code开启`window.nativeTabs: true`后,标签页彻底原生化:支持拖拽分离/合并、三指上推归组、双指滑动切换,菜单栏与标签分离更符合macOS设计哲学。虽略增垂直空间,但体验丝滑如Safari。
|
23天前
|
JSON Shell 数据格式
DSH plugin 怎么写工具插件:defineTool 参数与输出声明、execute 契约与 UI 卡片渲染
DeepSeek Harness(DSH)工具插件开发:用 inject tools 加 defineTool 注册模型可调用的工具,声明 parameters 与 output.schema,在 execute 里返回唯一 canonical 值并遵守 exec.signal,再用卡片呈现界面。
191 0
|
4月前
|
人工智能 开发工具 开发者
VS Code 用了 5 年的功能,Zed 1.6刚做出来就直接封神了
Zed编辑器v1.6推出提交历史分栏Diff切换功能:支持单栏流式与左右分栏双模式自由切换,直观对比代码变更,无需外接工具;深度集成Git面板,提升审查效率、降低理解成本,强化一站式开发体验。(239字)
456 1
|
4月前
|
测试技术 数据安全/隐私保护
当我们谈代码的可维护性到底在谈说什么
这是一篇关于代码可维护性的深度实践指南:从“祖传屎山”的痛悟出发,用真实案例诠释命名、模块化、可测试性、一致性和简洁性五大核心;融合静态分析、自动化、Code Review等落地方法,揭示可维护性本质——不是追求完美,而是对时间、同事与未来的温柔负责。(239字)
335 1
|
5月前
|
IDE 前端开发 开发工具
Google 的 IDE 演进小史
本文回顾Google IDE演进史:从工程师各用所爱(Vim/Emacs/IntelliJ/VS Code),到因超大规模代码库(google3)催生云端IDE Cider,再升级为融合VS Code前端的Cider V。其核心不是统一工具,而是以云化语言服务重构开发体验,将IDE升维为连接代码库、构建、审查与AI的工程杠杆。
420 0
Google 的 IDE 演进小史
|
5月前
|
人工智能 IDE Shell
Zed IDE这个终端新功能,治好了我的窗口切换焦虑
Zed IDE近期发布多项重磅更新,尤其新增“New Center Terminal”功能,让终端可直接在编辑区并排打开,告别拖拽拼图式操作。本文详解其双终端模式、心流提升逻辑及开源协作精神,并展望AI驱动的智能终端未来。(239字)
493 2