sublime text 修改单词边界需调整 word_separators 设置,删去其中的“-”可使 user-name 被整体选中;须在 preferences → settings – user 中修改,避免改动默认设置或误删其他分隔符(如 .),并注意语法专属设置优先级更高。

Sublime Text 怎么改单词边界?
默认双击选中单词时,-(连字符)、_、. 等符号都会被当作分隔符,所以 user-name 会拆成 user 和 name 两段。这不是 bug,是 Sublime 按 ASCII 字符分类预设的「词界」行为,得手动改配置。
关键在 word_separators 设置项——它定义哪些字符 *不参与* 单词构成。删掉其中的 -,双击就能跨连字符选中整个 user-name。
- 修改位置:菜单 Preferences → Settings – User,在右侧 JSON 中添加或覆盖
"word_separators" - 不要直接改默认设置(Settings – Default),那会被升级覆盖
- 值必须是字符串,每个要排除的符号单独写,不能用正则或范围表示法
- 原始默认值长这样:
".,;:!?()[]{}"'`-\|/\_~@#$%^&*+=",注意反斜杠要转义
怎么安全删掉连字符但保留其他分隔符?
别全删 word_separators,否则 foo.bar(baz) 也会被当一个“词”选中,失去语义区分。只剔除明确需要粘连的符号更稳妥。
比如只想让连字符不打断单词,就从默认字符串里去掉 -,其他照旧:
{
"word_separators": "./\()"'-:,.;!?[]{}|_~@#$%^&*+=<>`"
}
注意这里 - 被移走了,且因它在字符串中间,不用额外转义;如果放开头或结尾才需加反斜杠。
- 改完保存,无需重启,双击立刻生效
- 如果误删太多(比如把
.也去掉了),会导致类名、属性访问出问题,比如obj.method变成一整块 - 不同语言插件可能覆盖该设置(如某些 JavaScript 插件会重设),优先检查是否被插件干扰
为什么改了没反应?常见失效场景
最常踩的坑不是配置错,而是作用域没对上。Sublime 的设置有层级:全局、语法专属、项目专属。双击行为走的是当前视图的语法模式设置。
- 确认当前文件右下角显示的语法(如 Plain Text 或 JavaScript),再打开对应语法的设置:菜单 Preferences → Settings – Syntax Specific
- 如果用了
Project.sublime-project,项目级设置会覆盖用户级,检查其中是否有settings块重复定义了word_separators - 部分插件(如
BracketHighlighter或旧版Emmet)会劫持鼠标事件,临时禁用插件验证是否冲突 - macOS 上如果启用了「使用系统光标行为」,也可能影响双击逻辑,可尝试关闭对比
连字符之外还想粘连其他符号?
比如处理 CSS 类名 bg-red-500 或 Python 的 __dunder__,可以继续从 word_separators 里移除对应字符:
- 想让下划线也粘连:删掉
_(但注意这会让snake_case变成一整块,Python 用户慎用) - 想让点号粘连(如
foo.bar.baz):删掉.,但会丧失对对象链的基本识别能力 - 想只对特定语法生效(如只在 CSS 文件里粘连
-):用 Settings – Syntax Specific,并确保文件关联正确(.css 文件不能被识别为 Plain Text)
真正难的不是加几个字符,而是判断哪些符号在什么上下文里该“粘”,哪些该“断”。比如 HTTPServer 里的大驼峰和 http-server 里的短横线,语义完全不同——Sublime 没法自动区分,只能靠你按实际编辑场景权衡。










