sublime text无法使用划词翻译插件,因其不支持系统级划词事件,on_selection_modified监听不可靠;唯一稳定方案是trans命令行工具+build system,需严格配置${selected_text}、-brief、-e google及selector为"comment",windows用户必须用wsl运行。

别配划词翻译插件——它们在 Sublime Text 里注定失效,不是你配置错,是底层机制不支持。 真正能用、稳定、不卡顿的方案只有一个:用 trans 命令行工具 + Build System,绕过插件运行时限制。
为什么 on_selection_modified 监听不到划词动作
Sublime Text 不暴露系统级划词事件,插件只能靠 on_selection_modified 猜用户是否选中了文字。但这个事件在常见场景下根本不会触发:
- 用
Ctrl+Shift+Right快速选词(Windows 默认)→ 事件不发,必须额外监听on_post_text_command并过滤"move"类命令 - 刚切到新视图就划词 →
on_activated中读view.sel()总是空,得用sublime.set_timeout(lambda: ..., 50)延迟读取 - 仅光标定位(没真选中)→ 必须双重校验:
len(view.sel()) > 0 and not view.sel()[0].empty() - 选区跨行或含换行符 →
view.word()会返回空或错位,不能直接用
Build System 配置必须写对的三个关键项
新建 Translate.sublime-build 文件,内容必须严格匹配以下逻辑,否则翻译结果乱码、为空或粘贴失败:
-
shell_cmd中必须用${selected_text}(Sublime 内置变量),且不能加引号包裹整个表达式;-brief必须带上,否则返回带音标/词性的长文本,粘贴回编辑器会污染格式 -
-e google必须显式指定引擎,否则 fallback 到 Bing 或失效接口,返回空字符串 -
selector设为"comment",确保Ctrl+B只在注释区域生效;设成"source"或留空,会把整段函数体当文本发出去
Windows 用户最容易踩的 UTF-8 陷阱
别在 cmd 或 PowerShell 里硬跑 trans——它们对 UTF-8 换行和 BOM 处理不可靠,中文必丢字或变问号:
- 必须用 WSL(如 Ubuntu 22.04+),在 WSL 中装
translate-shell:sudo apt install translate-shell - Build System 的
shell_cmd要指向 WSL 路径,例如:"shell_cmd":"wsl trans -brief -e google -s auto -t zh : '${selected_text}'" - 确认 WSL 默认 locale 是
zh_CN.UTF-8,否则trans解析中文输入会失败
中英文混合注释怎么精准取词
别信 view.word()——它对 "init初始化" 这种串返回整块,但你要的只是“初始化”三字:
- 用正则
r'[a-zA-Z]+|[\u4e00-\u9fff]+|\d+'对选区粗分语言块 - 结合
view.sel()[0].begin()光标位置,反向找起始最接近的那一块 - 若选区首字符是 ASCII 字母、末字符是中文(如
"funcName中文说明"),自动收缩至首个连续汉字段 - 禁用
view.expand_to_scope('string')和view.expand_to_scope('comment'),它们会吞掉引号、换行、空格,导致翻译结果带干扰符号
最易被忽略的一点:trans 的 -brief 和 -e google 不是可选项,缺一就可能返回带格式长文本,或者 fallback 到已失效的备用引擎。另外,Build System 不会自动把翻译结果粘贴回来——它只输出到 Sublime 底部面板,你得手动复制再 Ctrl+V 回去。如果真要自动粘贴,就得写一个 TextCommand 包裹 trans 输出并调用 view.replace(),但这已超出 Build System 能力范围。











