前言

进入 AI 编程时代后,我的主力 IDE 已经换成了 VSCode 了,特别最近全部开发环境都切换到远程开发,就更加依赖 VSCode 的功能。

在 VSCode 里经常会遇到编辑 markdown 的场景,但是默认情况下,就算开启自动换行,VSCode 的 markdown 还是还超出编辑器范围几列才会自动换行。

我研究了半天,结合 ChatGPT 帮忙排查,最终才解决。

本文简单记录一下。

结论

先说结论。

VS Code 一个已有的 wrapping 问题:默认的 editor.wrappingStrategysimple,对 中文/CJK、非标准字符宽度、某些等宽中文字体 可能计算不准。

对应的 issue: monospaced Chinese fonts 下 simple 模式自动换行位置错误

解决方法就是把 editor.wrappingStrategy 切换到 advanced

完整的配置是这样的,直接把这一段加入 user settings json 里就行

"[markdown]": {
    "diffEditor.ignoreTrimWhitespace": true,
    "editor.scrollBeyondLastColumn": 0, // 允许编辑器在最后一列之外,再额外横向滚动 N 列。
    "editor.minimap.enabled": false,
    "editor.wrappingStrategy": "advanced", // 默认的 editor.wrappingStrategy 是 simple,对 中文/CJK、非标准字符宽度、某些等宽中文字体 可能计算不准。VS Code 甚至有一个几乎完全对应的 issue:“monospaced Chinese fonts 下 simple 模式自动换行位置错误”,切换到 advanced 后换行位置正常
    "editor.wordWrap": "on", // 一直开启换行
},

我这里同时还把 minimap 关掉,避免遮挡右侧的文本。

实现效果截图:

image-20260905155918809

折腾过程

一开始我是在设置界面里开启 word wrap 和设置了 word wrap column,

但是 markdown 的一行仍然太长,经常要拖动横向滚动条,非常影响体验。

image-20260905160018859

这时候尝试的配置是:

"[markdown]": {
  "editor.wordWrap": "bounded",
  "editor.wordWrapColumn": 80,
  "editor.wrappingIndent": "same"
}

bounded 而不是 on ,它的逻辑是:

  • 编辑器窗口不足 80 列 → 按窗口宽度自动折行
  • 编辑器窗口很宽 → 最多显示到 80 列就折行
  • 因此 Markdown 不会出现“一句话横跨整个 4K 屏幕”的情况
  • 正常文本基本不再需要横向滚动

但是这时候还是不行,80 columns 还是太大了,改成 70 才有点效果。

而且因为中文字体判定的问题,实际换行的位置和编辑器宽度不一致。

而且这也不是我要的效果,我要的是缩小这个编辑器宽度时,跟着宽度自动wrap,而不是固定一个值。

这个功能要设置 "editor.wordWrap": "on" 才会生效。

折腾了之后还是不行,在大模型爷爷的帮助下,才找到之前那个 GitHub issue,最终才解决😂

附录:VSCode的设置覆盖优先级

VSCode 有四层配置

设置 作用范围 典型用途
默认设置 VS Code / 扩展自带默认值 只拿来查看,通常不修改
用户设置 VS Code 全局配置 字体、主题、编辑习惯等
远程设置 SSH: hostname 只在连接这台远程机时生效 Linux shell、远端工具链、特殊编辑设置
工作区设置 当前项目 项目专用 formatter、lint、语言配置等

优先级从高到低是:Workspace > Remote > User > Default