Ctrl+T(Windows/Linux)或Cmd+T(macOS)是Sublime Text原生调换相邻字符的快捷键,光标需位于两字符之间;无效常见原因包括光标在行首/尾、中文输入法干扰、插件覆盖绑定或光标错位至不可见字符后。

Ctrl+T 是调换相邻字符的原生命令
Sublime Text 原生支持用 Ctrl+T(Windows/Linux)或 Cmd+T(macOS)快速交换光标左侧和右侧的两个字符。这不是插件功能,也不依赖选中范围——只要光标停在两个字符之间(比如 ab|c 中的 | 位置),按一次就变成 acb。
常见错误现象:按了没反应。最常因为:
– 光标在行首或行尾(左边/右边没字符可换)
– 输入法处于中文全角状态,劫持了快捷键
– 某些插件(如 Vintageous、Emacs Pro Essentials)覆盖了默认绑定
– 光标卡在不可见字符(如 BOM 或零宽空格)后面,实际没对齐到有效字符边界
为什么不能用 Ctrl+Shift+↑/↓ 来调换字符?
Ctrl+Shift+↑/↓ 是移动整行的命令,底层调用的是 swap_line_up 和 swap_line_down,它只作用于行级结构,对单个字符无效。试图用它“微调”字符串顺序,结果只会把整行上移或下移,完全偏离目标。
使用场景有限但明确:修正拼写(teh → the)、调整符号顺序(=> 写成 = 后快速修正)、补全 JSON 键名(<code>"name": 误输为 "amne":)。不适用于跨单词或长距离重排——那是 Ctrl+Shift+P 配合正则替换或插件的事。
多光标下 Ctrl+T 怎么行为?
如果你用 Ctrl+MouseClick 或 Ctrl+D 设置了多个光标,每个光标都会独立执行一次字符交换。例如,在三处都停在 a|b 位置,同时按 Ctrl+T,三处都会变成 ba。
但要注意:
– 多光标必须落在合法的字符间隙(不能都在行首)
– 如果某光标右侧是换行符,交换后可能把换行符拉进当前行,造成格式错乱
– 不会自动跳过注释或字符串内部——你在 "he|ll" 里按 Ctrl+T,照样变成 "hlel",得自己判断语境
想批量调换所有 “ab” 为 “ba” 怎么办?
Ctrl+T 是交互式单点操作,没法直接批量。真要批量处理,得走正则:
– Ctrl+H 打开替换面板
– 开启正则模式(.* 图标)
– 查找:(a)(b)
– 替换:$2$1
– 点击 Replace All
注意:这种写法只匹配字面量 ab;如果要泛化成「任意两个相邻字母」,得用 (\w)(\w),但务必确认上下文不会误伤变量名或关键字。别忘了先 Ctrl+Shift+P → Convert Line Endings 统一换行符,否则跨行匹配可能失效。
真正容易被忽略的是:字符交换不感知语法结构。你在 Python 字符串里交换引号位置,Sublime 不会警告你破坏了字符串边界——它只管字节顺序。动手前扫一眼高亮是否还正常,比事后调试快得多。

















