Ctrl+D 是按顺序逐个添加下一个完全相同单词的光标,而非全选所有匹配项;它从当前光标词出发向后线性查找,区分大小写且全字匹配,受 wordSeparators 和语言模式影响。

Ctrl+D 是 VSCode 里最常用也最容易误用的多光标快捷键——它不选“所有相同词”,只按顺序逐个加选当前光标所在位置的下一个匹配项;想一次全选,得换别的组合。
Ctrl+D 到底在做什么?
它不是“查找全部并高亮”,而是“从当前光标词出发,向后找下一个完全相同的单词(区分大小写、全字匹配),并在那里加一个新光标”。每次按一次,就多加一个光标,直到没下一个匹配为止。
常见错误现象:Ctrl+D 按了三次,结果只选中了两个地方,第三个光标没出现——大概率是因为第三个匹配项被跳过了(比如中间夹了个注释、字符串、或大小写不一致)。
使用场景:快速修改函数名、变量重命名局部片段、批量补字段名等需要“逐步确认”的编辑。
- 默认只匹配完整单词(
editor.wordSeparators决定哪些字符算分隔符) - 不跨行搜索,只在当前文件内线性往后找
- 如果光标在空白处或非单词字符上,
Ctrl+D会先自动选中当前单词再开始匹配
怎么一次选中所有相同单词?
用 Ctrl+Shift+L(Windows/Linux)或 Cmd+Shift+L(macOS)——它会直接把当前选中的单词,在整个文档里所有匹配位置都加上光标。
注意:这个操作依赖当前已有选区。如果什么都没选,它会先以光标所在单词为基准;如果已选中一段文本,就以那段文本为搜索目标。
- 比
Ctrl+D更暴力,也更少“意外跳过” - 但无法跳过某些特定匹配(比如只想改变量不改字符串里的同名内容),这时候反而要退回
Ctrl+D手动控制 - 如果文件太大,可能卡顿——VSCode 默认对超长文件(>5000 行)禁用此功能,可通过设置
editor.largeFileOptimizations调整
为什么有时 Ctrl+D 没反应或选错范围?
本质是匹配逻辑被干扰了。VSCode 的“当前词”识别不是简单切空格,而是基于语言语法和编辑器配置。
常见原因:
- 光标停在
user_name中间下划线位置,Ctrl+D会尝试匹配_单独作为“词”,而不是整个标识符 - 当前语言模式未正确识别(比如 .js 文件被当成 plain text),导致
editor.wordSeparators失效 - 开启了
editor.matchBrackets或插件干扰了光标行为(如 Vim 插件启用时,Ctrl+D可能被重映射) - 选区包含空格或换行,VSCode 会放弃“按词匹配”,转而做纯字符串匹配
替代方案:用查找面板 + 多光标更可控
当 Ctrl+D 和 Ctrl+Shift+L 都不够准时,直接用 Ctrl+F 输入目标词 → 按 Alt+Enter(Windows/Linux)或 Cmd+Enter(macOS)——这会在查找面板所有匹配项上加光标。
优势在于你可以提前预览、手动勾选/取消某些匹配项,还能配合正则(比如 \buser\b 确保只匹配完整单词)。
- 查找面板的匹配更稳定,不受
wordSeparators影响 - 支持大小写开关(
Alt+C)、全字开关(Alt+W)、正则开关(Alt+R) - 唯一缺点:不能像
Ctrl+D那样“边看边加”,得先确定好搜索条件
真正容易被忽略的是:VSCode 的“词”定义其实是可配的。如果你总在 get_user_data 里按 Ctrl+D 只选中 user,那不是快捷键坏了,是 editor.wordSeparators 把下划线当分隔符了——改它比换操作习惯更治本。


















