禁用gpu渲染并调高行高可解决windows terminal光标错位与字体重叠:设"experimental.gpurendering": false、"lineheight": 1.25,确保字体声明完整且term为xterm-256color。
windows terminal 中光标错位、字体重叠、图标显示为方块、中文间距异常,通常不是字体本身的问题,而是渲染机制与配置协同失效的结果。核心在于光标定位逻辑和字体栅格化过程脱节,尤其在高 dpi 屏幕或混合缩放环境下更明显。
关掉硬件加速,让光标与文字同步
Windows Terminal 默认启用 GPU 渲染,但部分显卡驱动(尤其是 Intel 核显 + Windows 混合缩放)会把光标绘制和字体渲染交给不同管线,导致“按键瞬间光标漂移、松手才归位”或“退格跳行”。最直接有效的办法是禁用 GPU 加速:
- 打开设置(Ctrl + ,),点击左下角「打开 JSON 文件」
- 在
"profiles": {"defaults": {}}区块内添加:"experimental.gpuRendering": false - 保存后**必须完全关闭并重启 Windows Terminal**,仅刷新标签页无效
调高行高,避免等宽字体上下挤压
默认行高(line height)太小会让 Cascadia Code、Fira Code 等带连字或 Powerline 符号的字体底部被裁切,视觉上像字母重叠、下划线压住下一行,甚至影响光标垂直居中。
- 在
"defaults"下添加:"lineHeight": 1.25(1.2~1.35 均可,1.25 在 1080p/4K 屏上普适性最好) - 若使用 Nerd Font(如 CaskaydiaCove NF),建议设为
1.3,否则箭头、分支符号常被截断 - 注意:该值是倍数,非像素;它独立于
fontSize,不改变字号只调节行间距
确保字体声明完整且系统已安装
只写 "Cascadia Code" 不够——Windows Terminal 不会自动 fallback 或下载字体。如果字体未正确注册到系统,就会退回到不支持 Unicode 全角对齐的默认字体(如点阵 Lucida Console),直接引发光标偏移和中文断行。
- 字体名必须与系统内嵌名称严格一致(区分大小写),推荐写法:
"fontFace": "Cascadia Code PL"或"CaskaydiaCove NF" - 安装后,在 PowerShell 中运行
Get-Font | Where-Object {$_.Name -eq "CaskaydiaCove NF"}验证是否注册成功(需先安装PSWriteHTML模块或用第三方工具) - 若用中文,务必在
fontFace后加回退链,例如:"fontFace": "CaskaydiaCove NF, Microsoft YaHei Mono, monospace"
检查 TERM 环境变量与终端模拟器匹配
当你通过 Windows Terminal 连接 WSL、Docker 或 SSH 远程主机时,实际控制光标行为的是远端 shell 的 TERM 类型。如果它被设成 screen 或旧版 xterm,ncurses 就可能误译光标移动指令,造成本地光标位置和远端 shell 实际光标完全错位。
- 在终端里执行:
echo $TERM,正常应输出xterm-256color - 若输出
screen或linux,需在远端 shell 配置文件(如~/.bashrc)中加入:export TERM=xterm-256color - WSL 用户还可检查
/etc/wsl.conf是否有干扰项,必要时添加:[interop]<br>appendWindowsPath=false
避免 PATH 冲突影响环境变量继承











