Sublime Text 双击无法选中 kebab-case 单词,需修改 word_separators 删除其中的 - 字符;建议使用 syntax-specific 设置实现局部生效,避免影响其他语言语法解析。

Sublime Text 双击选中 kebab-case 单词失效?改 word_separators 就行
默认双击只停在 - 上,不会把 user-name-input 当成一个单词选中——因为 Sublime 把连字符当成“分隔符”了。真正要动的是编辑器底层的单词边界定义。
实操建议:
- 打开
Preferences → Settings(左右两栏,改右边用户设置) - 找到或新增
"word_separators"配置项 - 把其中的
-字符删掉(注意:不是删整个字符串,只删这个字符)
比如原值是:"word_separators": "./\()"'-:,.;~!@#$%^&*|+=[]{}`~?",删掉单引号里的 -,变成:"word_separators": "./\()"':,. ;~!@#$%^&*|+=[]{}`~?"(注意空格和标点位置别错乱)
删错了 - 会怎样?这些副作用得提前知道
看起来只是加个连字符支持,但会影响所有基于“单词”的操作逻辑。
常见错误现象:
- 双击
file-name.js会选中整个字符串,但按Ctrl+D重复选中时,可能意外吞掉路径分隔符/或扩展名点号. -
Ctrl+Shift+K(删除整行)不受影响,但Ctrl+Delete(删到下一个单词尾)行为变奇怪——它现在会跨过-继续删 - 部分语法高亮插件依赖
word_separators做 token 切分,删完后css-variable-name可能被当做一个 identifier,而原本是三个 token
所以别全局删——如果你只写前端,主要处理 CSS 类名或 React 组件名,那删 - 是合理的;如果同时写 Python 或 Shell 脚本,my-script.py 这种名字反而会被误判,就得权衡。
想局部生效?用 syntax-specific 设置更安全
不同语言对“什么是单词”理解不同。word_separators 是全局设置,但你可以为特定语法单独覆盖。
使用场景:
- 只让 CSS / SCSS / HTML 文件支持
kebab-case双击选中,其他语言保持默认 - 避免影响 Markdown 里
foo-bar和链接文本的交互逻辑
做法:
- 在对应文件里打开
Preferences → Settings – Syntax Specific - 添加:
"word_separators": "./\()"':,.;~!@#$%^&*|+=[]{}`~?"(即删掉-的版本) - 保存后该类型文件立即生效,且不干扰其他语言
注意:这个设置文件名通常是 CSS.sublime-settings,不是 Preferences.sublime-settings。
word_separators 字符顺序重要吗?别被空格骗了
不重要——Sublime 按字符集合匹配,不是正则,顺序和重复都忽略。但空格是特例。
容易踩的坑:
- 你以为删掉
-就够了,结果复制粘贴时带了不可见的全角空格或 BOM,导致配置不生效 - 误把
(空格)也删了,会导致双击时把hello world当成一个单词——这是最常被忽略的隐形故障点 - 某些主题或插件会重写
word_separators,比如Origami插件就可能覆盖你的设置,遇到异常先关插件排查
验证是否生效:新建无语法的纯文本文件,输入 test-case-123,双击中间任意位置,看是否整段被选中。不是靠感觉,要亲眼确认。

















