前言
进入 AI 编程时代后,我的主力 IDE 已经换成了 VSCode 了,特别最近全部开发环境都切换到远程开发,就更加依赖 VSCode 的功能。
在 VSCode 里经常会遇到编辑 markdown 的场景,但是默认情况下,就算开启自动换行,VSCode 的 markdown 还是还超出编辑器范围几列才会自动换行。
我研究了半天,结合 ChatGPT 帮忙排查,最终才解决。
本文简单记录一下。
结论
先说结论。
VS Code 一个已有的 wrapping 问题:默认的 editor.wrappingStrategy 是 simple,对 中文/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
程序设计实验室
微信公众号