Sublime如何设置双击选中单词包含连字符?(自定义词界)

7次阅读

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

Sublime如何设置双击选中单词包含连字符?(自定义词界)

sublime text 怎么改单词边界?

默认双击选中单词时,-(连字符)、_. 等符号都会被当作分隔符,所以 user-name 会拆成 username 两段。这不是 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 TextJavaScript),再打开对应语法的设置:菜单 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 没法自动区分,只能靠你按实际编辑场景权衡。

text=ZqhQzanResources