VSCode插入“不间断空格”而不是常规空格

Posted

技术标签:

【中文标题】VSCode插入“不间断空格”而不是常规空格【英文标题】:VSCode inserting "non-breaking spaces" instead of regular spaces 【发布时间】:2021-09-23 08:40:14 【问题描述】:

我试图弄清楚为什么 VSCode 有时会决定随机插入“不间断空格”U+00A0 而不是常规空格,以及如何阻止这种情况发生?

这是导致问题的不同类型的空格字符,如我之前的问题GitHub markdown not rendering and git detecting changes when no changes中所见@

这在 Mac OS 和 Windows 上都发生在我身上,其他人也遇到过这个问题。虽然这个问题是关于 VSCode 的,但是在线 GitHub markdown 编辑器上也有这个问题。

我该如何解决这个问题?

复制步骤

在 VSCode 中编辑一个 markdown .md 文件一段时间。

放入很多标题,例如# my heading## my sub-heading

如果你有降价扩展,你可以CTRL/CMD + SHIFT + POpen preview to the side

您最终应该会注意到其中一个标题没有呈现,如果您在 HxD 等十六进制编辑器中打开文件,您会注意到在 @ 之后有一个不间断空格而不是常规空格987654329@ 字符。

可能的原因

Windows 上的反引号` 字符可以与键盘上的字母组合,例如a,结果为à。也许使用反引号导致空格字符变成不间断空格?然而,这并不能解释 Mac OS 上的问题,因为反引号不能与其他字符组合。

【问题讨论】:

【参考方案1】:

我在 Mac OS 上也有很多这样的情况,但事实证明,在使用修饰键后键入 space 时,我仍然稍微按住 option 键(或者可能是键盘上的 shift)输入#

我已经安装了https://marketplace.visualstudio.com/items?itemName=viktorzetterstrom.non-breaking-space-highlighter&s-s-r=false#overview 以便及早发现我的错误。

【讨论】:

谢谢我试试扩展 有一个名为 Fix Irregular Whitespace 的扩展程序在保存时替换了这个特定字符(而不是突出显示它)。 当您说“选项”时,您的意思是“转移”吗?我通常按​​ shift-3 键入 #。这个 GitHub 问题说 shift-space 给你一个 U+00A0:github.com/microsoft/vscode/issues/13239 我的意思是 option 但应该提到我使用的是 GB 键盘。【参考方案2】:

我花了很多时间试图弄清楚为什么我从 VScode 复制和粘贴的“mv foo bar”命令返回 command not found。原来 mv 和 foo 之间的空间是一个不间断的空间,我只是通过将它粘贴到一个 unicode 文本转换器来确定它。我真的很想知道为什么会这样,如果它是我可以禁用的设置。我使用的是 Windows 10,所以我认为这不仅仅是 Mac 问题。

【讨论】:

我在 Windows 上也遇到过这个问题,所以绝对不仅仅是 mac 问题(虽然我有一段时间没有注意到)。 我可以在 Linux 上确认同样的问题 不,它似乎是零宽度空间 U+200b,@Dries 提到的扩展名没有检测到它 真是一场噩梦!我从很久以前就受过这种痛苦。你知道谁添加了非中断空间吗?是 VScode,也许是扩展?我主要通过 Markdown 文档体验过这一点。【参考方案3】:

我也遇到过这种情况,但我确定我无意中仅使用空格键插入了不间断空格。我发现hexdump plugin 对诊断问题很有用。我仍然不知道如何避免它。

【讨论】:

以上是关于VSCode插入“不间断空格”而不是常规空格的主要内容,如果未能解决你的问题,请参考以下文章

将不间断空格转换为 Ruby 中的空格

如何在 JSF 页面中插入不间断空格字符?

Apache POI 异常空白(已解决:\u00A0 不间断空格)

UITextField 将不间断空格转换为空格?

术语:制表符是不间断空格吗?

MySQL全文搜索、整理和不间断空格