vscode 默认支持不选中直接复制整行:光标置于任意位置,按 ctrl+c(windows/linux)或 cmd+c(macos)即可,前提是启用 "editor.emptyselectionclipboard": true 且无扩展干扰。

不用选中就能复制整行,VSCode 原生支持,但默认快捷键容易被忽略或覆盖。
复制当前行(不选中、不移动光标)
VSCode 的 editor.action.copyLinesDownAction 是“向下复制一行”,但真正符合“克隆整行”的是 editor.action.copyLinesUpAction 或更直接的 editor.action.clipboardCopyAction 配合行操作逻辑——其实最稳的方式是用原生命令 editor.action.copyLinesDownAction 的反向理解:它本质是“在当前行下方插入一个副本”,而复制行为由编辑器隐式触发。但用户要的只是“把这行内容塞进剪贴板”,不是粘贴。
正确做法是触发「行级复制命令」:
-
Ctrl+Shift+K(Windows/Linux)或Cmd+Shift+K(macOS)执行editor.action.deleteLine?不对,这是删行 - 真正对应“复制整行”的是:保持光标在任意位置(无需选中),按
Ctrl+C(Windows/Linux)或Cmd+C(macOS)——只要没选中文本,VSCode 会自动以行为单位复制 - 验证方式:把光标放在空行中间,按
Ctrl+C,再Ctrl+V,会粘贴出一整行空行
为什么有时候 Ctrl+C 不复制整行?
常见于以下几种情况,本质是 VSCode 检测到了“隐式选中”或扩展干扰:
- 光标紧邻上/下行有未折叠的代码块(如
if块末尾),某些语言扩展(如 Python Pylance)会激活“语义选择”,导致Ctrl+C复制的是语句而非行 - 安装了
Bracket Pair Colorizer或Auto Rename Tag等扩展,它们劫持了焦点或 selection API,破坏了默认行复制逻辑 - 设置了
"editor.emptySelectionClipboard": false(默认为true),关掉后,无选中时Ctrl+C就不会触发行复制 - 终端面板(Terminal)获得焦点时,
Ctrl+C会被解释为中断信号,不是复制
想克隆多行?别拖选,用列操作+快捷键
批量处理连续多行时,手动拖选易错且低效。推荐用“行号锚定”方式:
- 将光标移到起始行任意位置,按
Shift+Alt+↓(Windows/Linux)或Shift+Option+↓(macOS)可向下逐行扩展选中(此时是行选择模式,非字符选择) - 选中后按
Ctrl+C,粘贴即得完整多行副本 - 如果只想克隆但不移动光标,可用
Ctrl+Shift+Alt+↓(Windows/Linux)触发editor.action.insertLineAfter,再配合Shift+↑选中刚插入的空行,最后Ctrl+V——但这绕远了,不如直接用Ctrl+C+Ctrl+V更可靠
自定义快捷键让“复制整行”更明确
如果你经常混淆、或团队协作需统一行为,可以显式绑定一个专属快捷键:
打开键盘快捷键设置(Ctrl+K Ctrl+S),搜索 copy line,找到命令 editor.action.clipboardCopyAction,右键“添加键绑定”,设为例如 Ctrl+Alt+C。注意:这个命令本身不区分是否选中,它依赖当前 selection 状态;所以必须配合 "editor.emptySelectionClipboard": true 才能确保无选中时复制整行。
真正干净的方案是绑定 editor.action.copyLinesDownAction 并禁用其粘贴副作用——但它本质是“复制并插入”,不是纯复制。所以除非你真需要“克隆并就地插入”,否则别用它替代 Ctrl+C。
最简路径就是信任默认行为:不选中 → Ctrl+C → 整行入剪贴板。唯一要检查的,是你的 settings.json 里没关掉 "editor.emptySelectionClipboard",也没被某个扩展悄悄覆盖了 Ctrl+C 的 commandId。











