将 editor.wordwrap 设为 "wordwrapcolumn",设置 editor.wordwrapcolumn 为具体值(如 80),并设 editor.wordwrapbreakobtrusive 为 false,即可实现按单词边界换行而非强制拆分。

VSCode 自动换行默认会拆单词,怎么改?
VSCode 默认的 editor.wordWrap 设为 on 或 bounded 时,折行位置只看字符宽度,不管单词边界——所以常看到 transformation 被切成 transfor- 和 mation。这不是 bug,是设计如此;要真正“按词折行”,必须切换到语义化换行模式。
启用 wordWrap 的 wordWrapColumn 模式 + breakWords 关闭
关键不是单纯开/关换行,而是组合控制:先让换行点由列数决定(而非视口宽度),再禁止跨单词截断。VSCode 从 1.85 版本起支持更精细的 editor.wordWrap 配置:
-
editor.wordWrap设为wordWrapColumn(不是on) -
editor.wordWrapColumn设一个具体值,比如80(推荐设为和editor.rulers一致) -
editor.wordWrapBreakBeforeCharacters保持默认(含空格、标点等) -
editor.wordWrapBreakAfterCharacters保持默认 -
最关键一步:把
editor.wordWrapBreakObtrusive设为false(它控制是否允许在单词中间硬切,设 false 才真禁用)
实际效果:超过第 80 列的单词会整体移到下一行,而不是被截断。
为什么 editor.wordWrap: "on" 不行?
因为 "on" 是基于 viewport 宽度动态计算折行点,且内部逻辑强制开启 breakWords 行为,无法关闭。你拖动窗口大小,折行位置乱跳,还照样拆词。哪怕加了
editor.wordWrapBreakBeforeCharacters: " \t"`,也拦不住它在长单词里硬插换行符。 <p>常见误操作:</p>
- 只改
wordWrap 为 <code>on或off—— 无效 - 只调
wordWrapColumn但没改wordWrap模式 —— 不生效 - 以为装了某个“Word Wrap Fix”插件就能解决 —— 大部分插件只是改 UI,不干预底层折行策略
不同语言文件要注意的兼容性细节
某些语言扩展(比如 Python、Markdown)会覆盖编辑器级换行行为。例如:
- Markdown 预览模式下,
wordWrap设置完全不生效,那是浏览器渲染控制的 - Python 扩展有时会注入自己的
editor.wordWrap覆盖逻辑,建议检查设置搜索@ext:ms-python.python wordWrap - 终端内嵌的编辑器(如 GitHub Copilot Chat 的输入框)也不走这个配置
最稳的做法:在用户设置(settings.json)里写死,避免被扩展干扰:
{
"editor.wordWrap": "wordWrapColumn",
"editor.wordWrapColumn": 80,
"editor.wordWrapBreakObtrusive": false
}
换行这事看着小,但一旦涉及长路径、JSON key、URL 或日志行,拆词会导致肉眼定位困难。别信“差不多就行”,差那一个连字符,就多一次来回滚动。











