sublime text 原生支持按词边界光标跳转与逐词选中:win/linux 用 ctrl+←/→ 和 ctrl+shift+←/→,macos 用 option+←/→ 和 option+shift+←/→;识别 camelcase、下划线、数字字母交界;中文变量名不拆分;整行累加选中用 ctrl+l/cmd+l;移动行用 ctrl+shift+↑/↓(win/linux)或 cmd+shift+↑/↓(macos)。

Ctrl+←/→(Win/Linux)或 Option+←/→(macOS)才是真·单词跳转
Sublime Text 原生就支持按词边界移动光标,不是靠插件,也不需要改配置。Windows/Linux 用 Ctrl+← 和 Ctrl+→,macOS 必须用 Option+← 和 Option+→(不是 Cmd+←,那是系统级跳行首,Sublime 接管不了)。
它识别 camelCase(如 fetchUserData → f → etch → User → Data)、下划线分隔(api_v2_endpoint → api → v2 → endpoint)、数字字母交界(item123name → item → 123 → name)。但纯中文变量名(如 用户名)不会被拆——这是设计限制,改 word_separators 也无效。
- 按了没反应?先检查是否误启列选择模式(
Shift+Ctrl+↑),此时方向键行为完全不同 - 中文输入法活跃时(尤其搜狗、百度五笔),
Ctrl+←常被劫持为中英文切换,切英文输入再试 - macOS 用户要进「系统设置 → 键盘 → 快捷键 → 使命控制」,关掉绑定
Option+←的「将窗口移至左屏幕」类选项 - 光标在单词中间(比如
fetchUserData的tch上),第一次Ctrl+←只跳到该词开头(f),第二次才跳上一词
Ctrl+Shift+←/→(Win/Linux)或 Option+Shift+←/→(macOS)是逐词选中
这不是单纯移动,而是边跳边选:按一次 Ctrl+Shift+→,光标右移到下一个词边界,同时把中间内容选中;再按一次,继续向右扩选下一个词。适合快速删改变量名、函数调用片段。
注意它和普通选中不同——不依赖鼠标拖拽,不受当前缩进或空格干扰,且能准确跨过驼峰大写位置。但如果已有非词级选区(比如只选了几个字符),这个组合键会先清空旧选区再开始逐词扩展。
- 想选中整个
userProfileData再删?光标放开头,连按两次Ctrl+Shift+→即可 - macOS 上别用
Cmd+Shift+→,那是系统级「选到行尾」,Sublime 不响应 - 选中后直接敲字母或
Delete,不用先按Esc取消选中
Ctrl+L 是累加式整行选中,专为行移动准备
Ctrl+L(Win/Linux)或 Cmd+L(macOS)不是「选中当前行」那么简单,它是累加的:第一次按,选中光标所在整行;第二次按,向下扩展选中下一行;第三次,再加一行……比拖鼠标准,也避开了部分选中导致命令失效的问题。
它对「逻辑行」敏感:即使某行被折叠,Ctrl+L 仍能准确命中;已有字符级选区时,它会先清空再整行选中。选好后直接接 Ctrl+Shift+↓,整块下移,不用反复按方向键。
- 光标在第5行,按三次
Ctrl+L,就选中第5、6、7行 - 选中多行后按
Ctrl+Shift+↑,整个块上移,不是逐行交换(swap_line_up那种) - 如果按了没反应,检查是否在折叠区域内部(整行不可见时操作静默失败)
为什么 Ctrl+↑/↓ 没动代码,只滚了屏幕?
Ctrl+↑ 和 Ctrl+↓ 在 Sublime 里默认是「滚动视图」,不是移动行。真正移动整行的是 Ctrl+Shift+↑/Ctrl+Shift+↓(Win/Linux)或 Cmd+Shift+↑/Cmd+Shift+↓(macOS)。很多人误按少了一个 Shift,结果只是页面上下滑,代码纹丝不动。
这组快捷键不依赖选中状态,光标在哪一行,就搬哪一行;选中多行则整块平移;跨行多光标(如 Ctrl+Click 几个散点)时,每个光标所在行独立移动。但它不重排缩进,也不感知语法结构——把一个 4 空格缩进的 if 块移到函数外,缩进照旧,视觉错位是正常表现,不是 bug。
- 按了没反应?优先查三处硬性拦截:中文输入法(尤其 Windows 下搜狗)、Vintage 插件处于 Normal 模式(临时按
i切回 Insert)、系统热键冲突(macOS 的 Mission Control 默认绑了Cmd+↑) - 移动后光标停在新行第 1 列,不会保持原列偏移——这是设计如此,不是异常
- 别急着装插件,先打开
Preferences → Key Bindings,搜索move_line,确认默认绑定没被覆盖











