VSCode中Alt/Option拖拽默认是移动而非复制,仅当editor.dragAndDrop设为true时才启用,且复制需按住Alt/Option并显示+号光标;该功能与语言模式强相关,不依赖剪贴板,且与Alt+↑/↓等快捷键逻辑完全独立。

VSCode 里按住 Alt(Windows/Linux)或 Option(macOS)拖动文本,默认是移动,不是复制;想复制必须加修饰键,且该行为和语言模式、设置开关强耦合,不打开 editor.dragAndDrop 就根本用不了。
Alt 拖拽 = 移动,不是复制
VSCode 默认拖拽选中文本就是剪切 + 粘贴,不走剪贴板,Alt 在这里只是“确认拖拽”的触发键,不是“复制键”。常见误解是以为像浏览器或 Word 那样按住 Alt 就能复制——实际不是。
- Windows/Linux:鼠标按住选中文本 → 直接拖,松手即移动;按住
Alt再拖,指针带+号,松手才复制 - macOS:必须按
Option,不是Cmd(网上很多教程写错,实测Cmd无效) - 这个
Alt/Option复制只对编辑器内文本有效,对侧边栏文件、外部拖入文件完全不起作用
editor.dragAndDrop 必须设为 true 才能拖
该功能默认关闭,对应配置项是 editor.dragAndDrop,值为 false。不开它,连拖动选中文本都不行——不是“拖不动”,而是根本没注册拖拽事件。
- 设为
true后,编辑器内才能拖代码块;但副作用是:外部文件拖进编辑器内容区会自动插入路径(比如拖一个utils.js进来,变成./utils.js) - 设为
false后,外部文件拖入触发系统级打开(等效双击),但编辑器内文本也彻底不能拖了——没有中间态 - 若只想在 Markdown 里保留插入路径,其他语言禁用,得用语言专属配置:
"[markdown]": { "editor.dragAndDrop": true },并显式关闭其他语言(如"[javascript]": { "editor.dragAndDrop": false })
Alt+↑/↓ 和 Shift+Alt+↓ 是另一套逻辑
别把拖拽和快捷键混为一谈。Alt+↑ 是移动整行,Shift+Alt+↓ 是复制整行,它们和鼠标拖拽无关,也不依赖 editor.dragAndDrop 设置。
-
Alt+↑/↓(Windows/Linux)或Option+↑/↓(macOS):移动当前行,光标无需选中文本,停在任意位置即可生效 -
Shift+Alt+↓(Windows/Linux)或Shift+Option+↓(macOS):向下复制当前行,原行不动,新行插入下方,光标自动落到新行开头 - 一旦有选区,这些快捷键就退化为操作选区,不再识别“当前行”——这是最常踩的坑
- 输入法劫持高发:搜狗、微软拼音常把
Alt+↓绑定为中英文切换,切英文输入法再试
真正容易被忽略的是:拖拽复制和快捷键复制走的是两套底层机制,前者依赖编辑器 drag/drop 事件流,后者调用 editor.action.copyLinesDownAction 命令;改快捷键、关插件、切输入法,都救不了 editor.dragAndDrop: false 下的拖拽失效——它根本没启动。


















