sublime text没有稳定可用的划词翻译插件,因其依赖不可靠的on_selection_modified事件监听,且同步http请求导致卡顿;应改用trans命令行工具+build system实现选中即译。

Sublime Text 没有稳定可用的划词翻译插件,强行安装只会卡顿、乱码或返回空结果;真要翻译,必须绕过插件,用 trans 命令行工具 + Build System 实现选中即译。
为什么所有划词翻译插件都失效了
不是你装错了,是底层机制决定了它们必然崩:Sublime Text 不暴露系统级划词事件,插件只能靠轮询 on_selection_modified 猜用户有没有选中——但 Ctrl+Shift+Right 快速选词、刚切视图就划词、甚至只点一下光标,这个事件压根不触发。更别说:
- HTTP 请求走的是 Python 3.3 同步阻塞式
urllib.request,一调 API 编辑器就假死几秒 - 注释识别靠正则硬匹配,
//后面整行都发出去,连/* ... */外的代码都可能被误吞 - 遇到 emoji 或全角标点,直接抛
UnicodeDecodeError - 连续请求很快触发 Google/Bing 返回
429 Too Many Requests,后续全白屏
怎么配一个真正能用的翻译 Build System
核心是把选中文本交给外部命令,不卡主线程、不乱码、不被限流。关键配置项必须写对:
-
shell_cmd中必须用${selected_text}(Sublime 内置变量),且必须先选中文字再按Ctrl+B -
-brief去掉音标/词性等冗余输出,避免粘贴回编辑器时带干扰字符 -
-e google显式指定引擎,防 fallback 到失效接口导致空响应 -
selector设为comment,让Ctrl+B只在注释区域生效,杜绝误翻代码 - 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()——它对 "funcName中文注释" 这种串会返回整块,但你要的只是“中文注释”四字。实际得手动分块:
- 用正则
r'[a-zA-Z]+|[\u4e00-\u9fff]+|\d+'把选区粗分为语言块列表 - 结合
view.sel()[0].begin()光标位置,反向找最近一块作为目标词 - 若选区首字符是 ASCII 字母、末字符是中文(如
"init初始化"),大概率是跨语言误选,应自动收缩至首个连续汉字段 - 禁用
view.expand_to_scope('string'),它会在字符串内吞掉引号和转义符,导致翻译结果带多余符号
Build System 翻译后怎么把结果粘贴回来
Sublime 的 Build System 默认只显示输出,不自动粘贴。想实现“选中→Ctrl+B→结果覆盖原选区”,得加一层包装脚本:
- Linux/macOS:写个 shell 脚本,用
trans获取结果后,通过pbcopy(macOS)或xclip(Linux)写入剪贴板,再在 Sublime 里手动Ctrl+V - Windows(WSL):同理用
wsl.exe -e bash -c 'trans ... | clip.exe',确保clip.exe可被调用 - 更进一步可写 Python 插件监听
exec完成事件,用view.replace()直接替换选区,但需注意线程安全——必须用sublime.set_timeout回主线程操作视图
最简路径仍是手动粘贴:快、稳、不依赖额外逻辑,且避免因异步时机错乱导致替换错位——这点容易被忽略,但恰恰是多数“自动回填”方案失败的根源。











