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

25
  • 我正在尝试弄清楚为什么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
  • 如果您安装了Markdown扩展程序,则可以使用CTRL/CMD + SHIFT + POpen preview to the side
  • 您应该会注意到其中一个标题没有呈现出来,如果您在诸如HxD这样的十六进制编辑器中打开文件,您将注意到在#字符之后有一个非断空格而不是常规空格。
  • 可能的原因
    • 在Windows系统中,反引号`字符可以与键盘上的字母组合使用,例如a会产生à。也许是因为使用了反引号导致空格字符变成了不间断空格?但这并不能解释Mac OS上的问题,因为反引号不能与其他字符组合使用。
    4个回答

    25

    谢谢,我会尝试这个扩展。 - David Callanan
    2
    有一个名为 Fix Irregular Whitespace 的扩展,它会在保存时替换这个特定字符(而不是将其突出显示)。 - Carl
    当你说“选项”时,你是指“Shift”吗?我通常按Shift-3键来输入#。这个GitHub问题说Shift-Space会给你一个U+00A0:https://github.com/microsoft/vscode/issues/13239 - msouth
    我确实是指“option”,但应该提到我正在使用GB键盘。 - Dries
    不再需要扩展程序。只需激活“查看”->“外观”->“高亮空格”,请参见https://dev59.com/VV0a5IYBdhLWcg3wmZsX#41398464 - LyteFM
    @LyteFM 我已经在一个 Markdown 文件中测试过了,它并没有像预期的那样突出显示不间断空格。然而,在 JSON 文件中似乎可以工作,需要进行更多的测试。 - Dries

    3

    我刚花了很多时间试图弄清楚为什么我从VScode复制并粘贴的"mv foo bar"命令返回command not found。原来mv和foo之间的空格是一个非断行空格,我只能通过将其粘贴到Unicode文本转换器中才确定。我真的想知道这是为什么,以及是否可以禁用此设置。我正在使用Windows 10,所以我不认为这只是Mac的问题。


    我也在Windows上遇到过这个问题,所以绝对不仅仅是Mac的问题(虽然我已经有一段时间没有注意到它了)。 - David Callanan
    我可以确认在Linux上存在相同的问题。 - BanAnanas
    不是的,它似乎是零宽度空格U+200b,这个扩展程序无法检测到,@Dries提到了这一点。 - BanAnanas
    真是个噩梦!我已经遭受这种问题很长时间了。你知道是谁添加了不间断空格吗?是VScode,或者可能是某个扩展程序吗? 我主要在Markdown文档中遇到了这个问题。 - garciadeblas

    2
    我在从Microsoft Skype或Microsoft OneNote复制粘贴代码时遇到了这个问题多次。这两个程序在粘贴时会将普通空格转换为特殊的Unicode空格。
    顺便说一下,自1.63版本以来,Visual Studio Code会自动突出显示这些特殊空格。

    0

    我也遇到过这个问题,但我确定是无意中仅使用空格键插入了非断行空格。我发现hexdump插件对于诊断问题非常有用。我仍然不知道如何避免它。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接