了解拼写检查器

Visual Studio 中的许多功能都旨在帮助你编写所需代码,从确保代码编译到帮助你设置代码样式均有所涉及。 现在,凭借版本 17.5 中引入的拼写检查器功能,Visual Studio 甚至可以确保拼写准确无误。

拼写检查器实际使用示例的屏幕截图。

拼写检查器可用于任何 C#、C++ 或 Markdown 文件。 启用拼写检查器后,Visual Studio 会将检测到的任何单词标记为拼写错误的单词。 Visual Studio 还会提供备用拼写建议并帮助更正这些词语。 当这些拼写错误为标识符时,该功能甚至会执行上下文重命名,以便代码仍可编译。

可以使用主工具栏上的“切换拼写检查器”按钮或从菜单栏中依次选择“编辑”>“高级”>“切换拼写检查器”命令来关闭或打开拼写检查器。

如何使用?

当插入点出现拼写错误时,快速操作会提供用于修复拼写错误的解决方案。 可以使用键盘快捷方式 Ctrl+. 或 Alt+Enter 显示快速操作。 当上下文菜单出现时,Visual Studio 会显示三个选项,以供拼写问题处理。

如果任意一部字典提供了拼写建议,Visual Studio 都会显示建议。 如果有多部字典都提供建议,Visual Studio 会按字典对各自的建议进行分组。 对于字符串和注释,选择其中一个建议会导致单个就地替换。 对于 C++ 或 C# 文档中的标识符,接受建议会导致重构/重命名,从而更新标识符的所有实例,以确保代码可编译。

该屏幕截图显示了拼写检查器,其中列出了多部字典。

还可以选择忽略拼写问题。 通过选择忽略问题,Visual Studio 会在本地计算机上的 AppData 目录中创建一个 exclusion.dic 文件。 选择忽略某个词语后,拼写检查器会忽略 Visual Studio 所有实例中的这个词语。

工作原理

由于 C#、C++ 和 Markdown 都使用英语作为关键字的语言,因此 Visual Studio 通常使用“英语(美国)”或“en-us”字典进行拼写检查。 Visual Studio 会检查 Windows 实例中所使用的显示语言,如果语言不是“en-us”,也会使用该字典。

注意

C# 和 C++ 还为这些语言的关键字提供了其他字典,可防止将“namespace”或“alloc”等字词标记为拼写错误的单词。

早期用户对此功能的反馈告诉我们,开发人员只想了解自己当前处理的文档中的错误。 为了响应该反馈,拼写检查器仅扫描编辑器中处于活动状态的文档。 为了直接响应此反馈,拼写检查器会扫描打开的文档。

下表显示了拼写检查器在扫描代码文档时查看的一些启发性内容:

代码内容是什么 Visual Studio 检查的内容 为什么?
你好 Hello, hello 始终检查专有名词和普通名词
HelloWorld Hello, hello, World, world 中部大写用于标记字边界
Hello.World Hello, hello, World, world 标点用作字边界
_Hello123 Hello, hello 去除前导或尾随数字或标点符号
Hello2World Hello, hello, World, world 中部数字(如标点符号)用作字边界
btnWorld World, world 忽略三个或以下字符的片段
helloworld Helloworld, helloworld 没有用于标识单词边界的标记

如果 Visual Studio 在它使用的任何字典中找到令牌的匹配项,则认为令牌可以接受,并且会进行扫描。 否则,该令牌被视为拼写错误,Visual Studio 会将其标记为拼写错误。

错误列表中拼写错误示例的屏幕截图。

如何自定义拼写检查器

可以自定义拼写检查器,使其针对协作环境进行优化。 因此,Visual Studio 使用 EditorConfig 文件进行配置,以便你可以控制存储库中的拼写检查器行为。

通过配置 EditorConfig 文件,可以建立你希望所有人都遵循的编码标准,这样就可以保持编码一致性,而其他方法实现这一点可能很难。

下面是可在 EditorConfig 文件中配置的切换的一些示例和用例场景:

  • 列出 Visual Studio 要使用的语言。 在本例中,Visual Studio 仅在检查拼写问题时使用“en-us”和“fr-fr”字典。

    spelling_languages = _language_[,_language_]
    (Example: = en-us,fr-fr)

    注意

    请确保为你所使用的任何语言安装语言包,以防止 Visual Studio 错误地将词语标记为拼写错误。

  • 控制 Visual Studio 应检查的内容。 在本例中,Visual Studio 会检查标识符和注释是否存在拼写错误的词语,但不检查字符串内部。

    spelling_checkable_types = strings,identifiers,comments
    (Example: = identifiers,comments)

  • 控制 Visual Studio 向错误列表中的拼写错误分配的严重性。 在本例中,拼写错误显示为错误。

    spelling_error_severity = error OR warning OR information OR hint
    (Example: = error)

  • 创建自己的排除字典,用于指定你认为拼写正确的单词。 在本例中,首次针对解决方案中的任何文件运行拼写检查器时,Visual Studio 均会在与 .sln 文件相同的目录(对于 C# 项目)或在根目录(对于 C++ 目录)中检查是否存在 exclusion.dic 文件。 如果不存在 exclusion.dic 文件,Visual Studio 会创建一个。 此后,每当用户选择忽略某个词语时,Visual Studio 都会将其添加到此 exclusion.dic 文件。 Visual Studio 会将此 exclusion.dic 文件中出现的任何词语都视为拼写正确的词语。

    spelling_exclusion_path = absolute OR relative path to exclusion dictionary
    (Example: = .\exclusion.dic)

    注意

    Visual Studio 使用 .editorconfig 文件中 spelling_exclusion_path 开关指定的排除字典,如果找不到开关,则使用 %localappdata%\Microsoft\VisualStudio\<Version> 目录中的“exclusion.dic”文件。

  • 控制是否使用特定于语言的排除字典。 如果设置为 false,则不会使用特定于 C++ 或 C# 的排除字典中指定的任何字词。 默认值为 true。

    spelling_use_default_exclusion_dictionary = true OR false
    (Example: = spelling_use_default_exclusion_dictionary = false)

特殊案例处理

Visual Studio 检查代码中拼写错误的方式有一些特殊行为,这些行为不同于为书面文本设计的传统拼写检查器。 其中一些行为包括:

  • 在包含标点符号的字符串(例如“misc.”)中,Visual Studio 不会建议更正,因为标识符中的标点可能会导致代码无法编译。
  • 字符串中的反斜杠将省略后续字符的拼写检查,并将反斜杠和后续字符视为单词分隔符。 例如,在字符串 hello\nworld 中,Visual Studio 首先检测反斜杠。 Visual Studio 将 \n 视为单词分隔符,这会留下“hello”和“world”,会分别对其进行检查。
  • 包含 URL(如 https://...mailto:..)的字符串不会对整个字符串进行拼写检查。