sublime text 中拖拽默认移动,按住 ctrl(windows/linux)或 cmd(macos)可改为复制,但仅限同一文件内且必须在行首左侧空白区触发;该操作不进入系统剪贴板,也无法通过设置禁用移动或设为默认复制。

拖拽文本默认是移动,怎么改成复制?
Sublime Text 原生不提供“拖拽即复制”的全局开关,但你可以在拖拽时按住 Ctrl(Windows/Linux)或 Cmd(macOS)实现复制——不是设置出来的,是触发式行为。松手后,原位置文本保留,目标位置插入副本。
- 必须在**行首左侧空白区**(行号右侧、代码左边的灰白区域)触发拖拽,鼠标变成小手图标 ✋ 后再按住
Ctrl/Cmd拖动,否则会变成文本选择或光标跳转 - 如果拖拽过程中没按住
Ctrl/Cmd,松手就是移动;一旦按下,松手即复制,无需额外确认 - 这个行为和系统剪贴板无关——复制的内容不会进入系统剪贴板,不能粘贴到外部程序,仅限 Sublime 内部文件
- 跨文件拖拽不支持,即使按住
Ctrl也无效;只在同一文件内生效
为什么按了 Ctrl/Cmd 还是移动不是复制?
常见原因是触发位置错误或状态干扰:
- 光标不在行首左侧空白区:比如停在代码中间、行尾空格、折叠箭头附近,此时拖拽会被识别为文本选择或列模式操作
- 已处于列选择模式(状态栏显示
Column Select):Ctrl+拖拽会尝试添加列光标,而非复制行 - 输入法或系统快捷键劫持:
Ctrl+拖拽可能被搜狗、微软拼音等输入法拦截为中英文切换,切到英文状态再试 -
drag_text被设为false(极罕见):检查Preferences → Settings用户配置里是否有该字段,有则删掉或设为true
想让所有拖拽都默认复制,能关掉移动吗?
不能。Sublime 没有“禁用拖拽移动”或“设为默认复制”的配置项。它的拖拽逻辑是硬编码的:不按修饰键 = 移动,按 Ctrl/Cmd = 复制。强行绕过这个机制需要插件干预,但目前无稳定插件支持全局覆盖该行为——所有已知插件(如 DragSelect、MoveLines)都尊重原生拖拽语义,只增强定位能力,不改变移动/复制的触发逻辑。
真正容易被忽略的是:这个复制行为不进系统剪贴板,也不触发 on_post_text_command 等事件,所以没法用插件监听或拦截。它纯粹是 UI 层的即时操作,快但不可编程。











