DA
DealiAxy
2026年09月05日

解决 VSCode 的自动换行问题

VSCode 的 Markdown 自动换行看似简单,中文字体一上场就开始装死。问题根源是 `simple` 策略计算失准,改用 `advanced`,再配合 `wordWrap: on`,终于不用拖横向滚动条欣赏长句了。

未分类
2377
8 分钟阅读
更新于 09-05

前言

进入 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 关掉,避免遮挡右侧的文本。

实现效果截图:

图片准备加载中...

折腾过程

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

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

图片准备加载中...

这时候尝试的配置是:

"[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