ctrl+shift+l后需立即按ctrl+home(win)或cmd+home(mac)将光标移至每行最左端,再输入//或#;否则默认停在行尾,导致注释加错位置。

Ctrl+Shift+L 后光标默认在行尾,不是行首
想在每行开头加 // 或 #,很多人按完 Ctrl+Shift+L 就直接输入,结果字符全加在行尾。这是因为该快捷键把光标放在每行换行符前——也就是物理行尾,而非行首。
必须立刻补一个定位动作:Home(Windows/Linux)或 Cmd+←(macOS)。但注意:Home 默认停在第一个非空字符处(比如缩进后),不是绝对行首;更稳的是 Ctrl+Home(Win)或 Cmd+Home(Mac),它会跳到每行最左端,哪怕前面全是空格或 Tab。
- 别先
Ctrl+A再按Home:那只会把光标移到第一行开头,其余行不动 - 如果代码混用 Tab 和空格缩进,
Home行为不一致,建议先运行Ctrl+Shift+P→ 输入Convert Indent to Spaces统一缩进 - Vintage 模式(Vim 插件)下
Ctrl+Shift+L可能被重映射失效,需关闭模式或手动改键位
正则替换加注释比多光标更稳,尤其要跳过已有注释
纯多光标做不到“只给非空行加”或“跳过已带 // 的行”,这时候必须用正则。打开 Ctrl+H,勾选 .*(启用正则),然后:
查找栏填:^(?!\s*//).* —— 匹配“开头不是空白+//”的行
替换栏填:// —— 注意末尾空格,避免粘连
- 空行会被
^匹配,但上面的先行断言(?!\s*//)会排除已注释行和纯空行 - 混合换行符(
\r\n和\n共存)会导致部分行漏匹配,操作前先Ctrl+Shift+P→Set Line Endings: Unix - 文件带 BOM 时,
^可能匹配不到首行开头,可File → Save with Encoding → UTF-8去除 BOM
Ctrl+D 无法跨行匹配?它只认当前光标所在词的字面全匹配
想在多个变量名前统一加 console.log(,但按 Ctrl+D 总是跳过目标?因为 Ctrl+D 不是“搜变量名”,而是从当前光标位置出发,找下一个完全相同的字符串片段——包括大小写、边界空格、引号,甚至注释里的同名文本。
- 光标停在
user_id中间(比如us|er_id),可能只取到er_id,后续全错;务必双击选中整个词再按Ctrl+D - 不会匹配
user_id_list或USER_ID,因大小写和边界不一致 - 想跳过某处(比如
// user_id),按Ctrl+K再按Ctrl+D - 需要子串匹配(如在
username_input里也命中user),得先手动双击选中user,再按Ctrl+D
列选择(Alt+拖拽)不适合行首注释,只适合固定列对齐插入
列选择是竖着拉矩形区域,在每行同一列位置插入光标。它看起来直观,但只要缩进不统一(比如混用 Tab 和空格),光标就会错位,插在缩进中间而非行首。
例如:你拖出的列位置是第 4 列,但某行用 Tab 缩进(占 4 字符宽),另一行用 4 个空格,视觉对齐但字符位置不同 → 光标实际落在不同列,注释前缀错位。
- 列选择本质是“列对齐插入”,不是“行首插入”;误用会导致前缀插在缩进中间,像语法错误
- 它不能跨文件使用,只作用于当前视图
- 列选择状态下无法用
Ctrl+D,必须先按Esc取消列选才能切回多光标模式
Ctrl+Shift+L 就完事了,其实后面那个 Ctrl+Home 才决定成败。











