sublime text无稳定划词翻译插件,因不支持系统级划词事件,on_selection_modified常不触发;可靠方案是用trans命令行工具+build system,配置需含${selected_text}、-brief、-e google及selector:"comment",windows须用wsl。

Sublime Text 没有稳定可用的划词翻译插件,所有依赖 on_selection_modified + 同步 HTTP 请求的插件(如 SublimeText-Translate)在 ST4 下必然卡顿、乱码或返回空结果;真正能用的方案是绕过插件,用 trans 命令行工具 + Build System 实现选中即译。
为什么 on_selection_modified 监听不到划词?
这不是你配置错了,而是 Sublime Text 根本不暴露系统级划词事件,插件只能靠轮询猜——但很多场景下它压根不触发:
- 用
Ctrl+Shift+Right快速选词(Windows 默认行为),on_selection_modified不会触发 - 刚切到新视图就划词,
view.sel()返回空选区,因为渲染还没完成 - 仅点击光标(没真正选中),
len(view.sel()) > 0为真但view.sel()[0].empty()也为真,必须双重校验
强行监听这个事件写插件,90% 的“不触发”问题都源于没加 sublime.set_timeout(lambda: ..., 50) 延迟读取,或漏了 on_post_text_command 补监听 move 类命令。
trans + Build System 怎么配才不翻车?
Build System 是目前唯一快、稳、不卡主线程的方案,但几个关键参数错一个就白配:
-
shell_cmd中必须用${selected_text},不是$file或硬编码文本;没选中文字就按Ctrl+B,命令直接静默失败 -
-brief必须带上,否则返回带音标、词性、例句的长文本,粘贴回编辑器会污染注释格式 -
-e google显式指定引擎,避免 fallback 到已失效的 Bing/DeepL 接口导致空响应 -
selector设为"comment",让Ctrl+B只在//或/* */区域生效,否则可能把整段if (x > 0) { ... }当注释发出去 - Windows 用户必须用 WSL(如 Ubuntu 22.04+)跑
trans,原生cmd或powershell对 UTF-8 换行处理不可靠,中文必丢字
配置文件 Translate.sublime-build 正确内容如下:
{"shell_cmd":"trans -brief -e google -s auto -t zh : '${selected_text}'", "selector":"comment", "file_regex":"^.*$"}
中英文混合注释怎么精准取词?
别信 view.word()——它对 "init初始化" 这种串返回整块,但你要的只是“初始化”三字。实际得手动分块再定位:
- 用正则
r'[a-zA-Z]+|[\u4e00-\u9fff]+|\d+'把选区粗分为语言块列表,比如["init", "初始化"] - 结合
view.sel()[0].begin()光标位置,反向找起始位置最接近的那一块作为目标词 - 若选区首字符是 ASCII 字母、末字符是中文(如
"func注释"),大概率是跨语言误选,应自动收缩至首个连续汉字段 - 禁用
view.expand_to_scope('string'),它会在字符串内吞掉引号和转义符,导致翻译结果带多余符号
Build System 翻译后怎么把结果粘贴回编辑器?
Build System 默认只输出到面板,不自动替换选区——这是最容易被忽略的点。你得自己写个插件或用第三方工具桥接,但更简单的是:把 trans 输出重定向到剪贴板,再手动 Ctrl+V。
Linux/macOS 可改用:
{"shell_cmd":"trans -brief -e google -s auto -t zh : '${selected_text}' | xclip -selection clipboard -i", "selector":"comment"}
Windows(WSL)对应:
{"shell_cmd":"trans -brief -e google -s auto -t zh : '${selected_text}' | clip.exe", "selector":"comment"}
注意:clip.exe 在 WSL 中需启用 Windows 子系统互操作(默认开启),且不能用 wslpath 转换路径——clip.exe 只认 Windows 路径,而 trans 输出是纯文本流,直接管道即可。
复杂点在于:Build System 不提供“执行完自动替换选区”的原生能力,所有“自动粘贴回”方案都要额外监听 on_build_finished 或用 sublime.set_timeout 轮询剪贴板,极易因时序错乱导致粘贴到错误位置。真要自动化,不如接受“选中→Ctrl+B→Ctrl+V”这一步手动操作——它比任何自动方案都可靠。











