VSCode 默认复制当前行快捷键是 Ctrl+Shift+Alt+Down(Win/Linux)或 Cmd+Shift+Alt+Down(macOS),执行 editor.action.copyLinesDownAction 命令,整行(含缩进、换行符)原样复制到下一行,光标移至新行开头。

VSCode 里复制当前行的快捷键是什么
默认就是 Ctrl+Shift+Alt+Down(Windows/Linux)或 Cmd+Shift+Alt+Down(macOS),不用装插件、不改配置就能用。这个操作叫「duplicate line」,不是普通粘贴,它会原样把当前整行(含空格、缩进)插入到下一行,光标自动落到新行开头。
常见错误现象:按了没反应——大概率是系统级快捷键冲突(比如某些输入法、远程桌面工具劫持了 Ctrl+Shift+Alt+Down),或者你当前焦点不在编辑器里(比如弹出了搜索框、终端获得焦点)。
- 确保光标在编辑器文本区域内,哪怕只点一下空白行也行
- 如果键盘有功能键(Fn),可能需要同时按
Fn;Mac 用户注意是否启用了「将 Caps Lock 用作 Ctrl」之类系统设置,会影响组合键识别 - 别和
Ctrl+C→Ctrl+V混淆:后者依赖剪贴板,且会破坏原有选中状态;前者是原子操作,更快更稳
想改快捷键或绑定到其他组合怎么办
VSCode 的快捷键全靠 keybindings.json 驱动,修改它比点菜单快得多。直接打开命令面板(Ctrl+Shift+P),搜「Preferences: Open Keyboard Shortcuts (JSON)」,加一条规则就行。
例如,想把复制行改成 Ctrl+D(和 Sublime 一致),就写:
[
{
"key": "ctrl+d",
"command": "editor.action.copyLinesDownAction",
"when": "editorTextFocus && !editorReadonly"
}
]
注意两个关键点:command 名必须是 editor.action.copyLinesDownAction(不是 duplicate 或 copyLine),when 条件要保留,否则在搜索框、终端里也会触发。
- 如果已有其他命令占用了目标快捷键(比如
Ctrl+D默认是「添加下一个匹配项到多光标」),VSCode 会自动禁用旧绑定,无需手动删 - 改完保存,不用重启,立刻生效;但如果有语法错误,VSCode 会在右下角报红,提示你检查 JSON 格式
- 别用
editor.action.duplicateSelection替代——它只复制选中内容,没选中时啥也不干
复制行但不想带空格/缩进,或者只想复制内容不复制换行
原生「复制当前行」功能不提供选项开关,它永远复制整行(含行首缩进、行尾换行符)。真有这种需求,说明你其实不是要「复制行」,而是想「提取内容」或「构造新行」。
比如处理日志、拼 SQL、写模板字符串时,常需要去掉缩进再复用。这时候更靠谱的做法是:
- 用多光标:先
Ctrl+L选中整行,再Shift+Home退选行首空格,最后Ctrl+C→Ctrl+V - 用正则替换临时清理:选中多行后,打开替换面板(
Ctrl+H),勾选「使用正则」,查找^\s+,替换为空,再复制 - 装个轻量插件如
Copy Without Blank,但它只解决「去空格」,不改变核心行为逻辑
性能上毫无影响——所有这些操作都是内存级,毫秒完成;但要注意,过度依赖快捷键定制反而增加记忆负担,尤其团队协作时,统一用默认键位更省事。
为什么有时候复制行后光标位置不对
这是 VSCode 对「当前行」定义导致的:当光标停在行尾(换行符前),copyLinesDownAction 会把整行 + 换行符一起复制,新行光标落在行首;但如果光标在行首前(比如刚按了 Home),它仍复制整行,但视觉上容易误判光标“跳了”。
本质不是 bug,是设计如此——VSCode 把「行」看作逻辑单位,不是光标所在位置的切片。所以实际使用中:
- 不必纠结光标在哪,只要确认你想复制的是哪一行(看行号或上下文)
- 如果连带复制了不该有的空行,大概率是你当前行本身就是空行,或者上一行末尾多了换行符
- 遇到格式错乱,优先检查文件换行符类型(
CRLFvsLF),右下角状态栏可切换,不同系统混用时容易出这种“看似异常”的表现
最常被忽略的一点:这个功能对折叠代码块无效——如果当前行属于被折叠的区域,它复制的是折叠后的那行(比如 // ... 12 more lines),而不是原始内容。需要先展开再操作。










