按Insert键光标变方块是VSCode内置覆盖模式触发机制:首次按下使editor.overtype为true,强制光标呈block状;再按一次切回false,恢复editor.cursorStyle设定值(如"line"),该行为由Monaco底层控制,与键盘布局无关。

光标突然变方块或不闪烁,90% 是 editor.cursorBlinking 或 editor.cursorStyle 配错,不是插件或主题问题。
为什么按 Insert 键光标就变方块?
这是 VSCode 内置的覆盖模式(overwrite)触发机制,和 editor.overtype 设置强绑定:
- 按一次
Insert键 →editor.overtype切为true→ 光标强制变成block形态(无论editor.cursorStyle设成啥) - 再按一次 → 切回
false→ 光标恢复你配置的editor.cursorStyle值(如"line") - 该行为由 Monaco 编辑器底层控制,和键盘布局、输入法、Caps Lock 无关,但某些机械键盘固件异常时可能误发 Insert 信号
验证方法:打开任意纯文本文件(如 test.txt),按 Insert 看是否瞬切;若切换正常,说明不是配置损坏,而是被手动触发了模式切换。
editor.cursorBlinking 设成 "solid" 就不闪,但别误以为“生效”
editor.cursorBlinking 的合法值只有 "blink"、"smooth"、"phase"、"expand"、"solid" —— 注意没有 "off"(旧版会静默忽略,新版已移除支持):
-
"solid"= 常亮无动画,视觉上就是“不闪”,但它仍占用光标渲染通道,和"block"搭配时在深色主题下容易“融进背景” -
"blink"是默认值,节奏固定,不可调速;想更柔和就换"phase"(扫描式)或"smooth"(淡入淡出),但 macOS +editor.smoothScrolling: true容易卡顿,建议关掉前者 - 设成
"false"、false、"OFF"或漏引号(如solid)都会导致 VSCode 回退到默认"blink",表面看“好像没改”,其实是配置无效
终端光标和编辑器光标完全独立
改了 editor.cursorStyle 发现终端里还是方块?正常。VSCode 终端光标走另一套配置:
- 必须显式设置
terminal.integrated.cursorStyle(可选"block"、"line"、"underline";"line-thin"等不支持) -
terminal.integrated.cursorBlinking默认是false,不手动开就永远不闪——这不是 bug,是设计 - 终端光标颜色无法单独设,它直接取 shell 的前景色;如果看不清,优先调大
terminal.integrated.fontSize(至少 14)或换对比度高的终端主题
光标太细/太粗/颜色不对,别碰主题文件
所有样式微调都靠三个原生配置项,不需要插件或 CSS 注入:
- 粗细:用
editor.cursorWidth,整数 1–20,2是高分屏下最稳起点,3在等宽字体中依然干净;该值对"block"无效 - 颜色:必须走
workbench.colorCustomizations下的editorCursor.foreground,写错格式(如漏#、RGBA 位数错)会导致整个 colorCustomizations 失效,光标退回默认色 - 形状:只认 6 个字符串值:
"block"、"line"、"underline"、"line-thin"、"block-outline"、"underline-thin";版本兼容性要查清(如"block-outline"需 ≥1.79)
最容易被忽略的是工作区设置(.vscode/settings.json)会覆盖用户级配置,且 Vim 插件等会强行接管 editor.cursorStyle —— 调不动时先禁用插件、关掉终端面板、新建空白文件测试。











