多光标列选择需用Alt+鼠标拖拽(Win/Linux)或Option+拖拽(macOS),而非Ctrl+D;该操作实现跨行垂直对齐编辑,适用于CSV、JSON等结构化数据批量修改,起始点须在行首空白处,否则触发普通文本选择。

多光标列选择不是靠 Ctrl+D,而是 Alt+拖拽
很多人误以为多光标就是 Ctrl+D(Windows/Linux)或 Cmd+D(Mac),其实那是「逐个选中相同文本」,属于行内匹配操作;真正能跨行对齐编辑的列选择,必须用 Alt 键(Mac 上是 Option)配合鼠标拖拽。这个功能在批量修改 CSV 字段、对齐 JSON 键值、补全 import 语句前缀时极其高效。
常见错误现象:按住 Ctrl 拖拽,结果只高亮了单行文字;或者用 Ctrl+Shift+L 全选后发现无法垂直对齐——那是因为没进列模式。
- 起始位置必须落在行首空白处(非代码字符区),否则拖拽会变成普通文本选区
- 松开鼠标后,每个光标独立存在,可分别输入、删除或调用
Ctrl+X/Ctrl+V - 如果拖拽后发现光标错位,大概率是当前文件启用了软缩进(
editor.detectIndentation为 true 且实际缩进不统一)
符号跳转 Ctrl+Shift+O 不支持模糊搜索?其实是支持的
Ctrl+Shift+O 默认打开的是当前文件的符号大纲,但很多人不知道它支持类型过滤和子串匹配。比如输入 :method 只显示方法,use 能命中 useState 和 useEffect,甚至 init:constructor 也能定位类构造函数。
容易踩的坑:直接输全名反而找不到——因为符号名可能被语言服务解析为带作用域的标识符(如 MyClass.init),而大纲列表只展示简名。另外,该功能依赖语言服务器启动完成,TS/JS 文件需等右下角状态栏出现「TypeScript Server running」才生效。
- 输入
@可切换为按访问修饰符过滤(如@public) - 输入
#可筛选私有成员(部分语言支持,如 TS 的#privateField) - 如果列表为空,先检查文件是否被识别为对应语言(右下角语言模式是否正确,比如 .js 文件别被当成 plain text)
#region 折叠不生效?检查注释格式和语言支持
// #region 和 // #endregion 是 VSCode 原生支持的折叠标记,但并非所有语言都默认启用。JavaScript/TypeScript/Python/Go 等主流语言开箱即用,但 C++ 或 Rust 需要插件补充,而纯文本文件则完全无效。
典型问题:写了 // #region 却点不动折叠箭头,或折叠后内容消失不见。这不是 bug,而是语言模式未识别该语法。
- 确认右下角语言模式正确(例如 JS 文件显示
JavaScript,而非Plain Text) - 确保注释符号与语言一致:JS/TS 用
//,Python 用#,C# 用//,不能混用 - 嵌套区域必须严格闭合,漏掉
// #endregion会导致后续所有折叠失效
命令面板 Ctrl+Shift+P 能执行带参数的命令?可以,但得知道怎么填
多数人把 Ctrl+Shift+P 当成菜单替代品,其实它支持传参执行。比如运行 Developer: Reload Window 不用确认,直接回车就行;但像 File: Save As 这种命令,呼出后输入路径再回车,就能跳过对话框。
更关键的是,某些命令必须带参数才有效,比如 workbench.action.terminal.sendSequence,需要在命令后加 JSON 字符串:{"text":"ls -la\n"},否则报错「Missing required argument」。
- 输入命令名后按
Tab,可触发参数占位符提示(部分命令支持) - 参数格式必须严格符合文档要求,JSON 字符串里双引号不能省,换行符写成
\n - 不确定参数名?在命令面板里输入命令全名,看下方提示栏是否显示「[argument]」字样
这些功能都不需要装插件,但依赖语言服务就绪、配置项未被覆盖、以及你恰好停在正确的光标位置——VSCode 的“隐藏”不在于藏得多深,而在于它默认把专业级能力交到你手上,只等你用对姿势去触发。


















