Visual Studio Code 的拼写检查器
一个适用于代码和文档的基本拼写检查器。
这个拼写检查器的目标是帮助捕获常见的拼写错误,同时保持误报数量低。
支持进一步开发
功能
加载 TypeScript、JavaScript、文本等文件。字典文件中不存在的单词将有波浪下划线。
示例
建议
要查看建议列表:
将光标放在单词上后,以下任何操作都应显示建议列表:
- 点击左侧边距的 💡 (灯泡)。
快速修复
编辑器操作命令:- Mac:
⌘
+.
或Cmd
+.
- PC:
Ctrl
+.
- Mac:
安装
打开 VS Code,按 F1
并输入 ext
,选择安装并输入 code-spell-checker
,按回车键并重新加载窗口以启用。
支持的语言
- 英语(美国)
- 英语(英国)- 通过将
"cSpell.language": "en"
改为"cSpell.language": "en-GB"
启用
附加字典
语言字典
- 古希腊语 - VS Code 的古希腊语字典扩展。
- 阿拉伯语 - VS Code 的阿拉伯语字典扩展。
- 澳大利亚英语 - VS Code 的澳大利亚英语字典扩展。
- 奥地利德语 - VS Code 的奥地利德语字典扩展。
- 巴斯克语 - VS Code 的巴斯克语字典扩展。
- 英国英语 - VS Code 的英国英语字典扩展。
- 保加利亚语 - VS Code 的保加利亚语字典扩展。
- 加拿大英语 - VS Code 的加拿大英语字典扩展。
- 加泰罗尼亚语 - VS Code 的加泰罗尼亚语字典扩展。
- 克罗地亚语 - VS Code 的克罗地亚语字典扩展。
- 捷克语 - VS Code 的捷克语字典扩展。
- 丹麦语 - VS Code 的丹麦语字典扩展。
- 荷兰语 - VS Code 的荷兰语字典扩展。
- 世界语 - VS Code 的世界语字典扩展。
- 爱沙尼亚语 - VS Code 的爱沙尼亚语字典扩展。
- 芬兰语 - VS Code 的芬兰语字典扩展。
- 法语 - VS Code 的法语字典扩展。
- 法语改革90 - VS Code 的法语改革90字典扩展。
- 德语 - VS Code 的德语字典扩展。
- 希腊语 - VS Code 的希腊语字典扩展。
- 希伯来语 - VS Code 的希伯来语字典扩展。
- 匈牙利语 - VS Code 的匈牙利语字典扩展。
- 印度尼西亚语 - VS Code 的印度尼西亚语字典扩展。
- 意大利语 - VS Code 的意大利语字典扩展。
- 拉丁语 - VS Code 的拉丁语字典扩展。
- 拉脱维亚语 - VS Code 的拉脱维亚语字典扩展。
- 立陶宛语 - VS Code 的立陶宛语字典扩展。
- 挪威博克马尔语 - VS Code 的挪威博克马尔语字典扩展。
- 波斯语 - VS Code 的波斯语字典扩展。
- 波兰语 - VS Code 的波兰语字典扩展。
- 葡萄牙语 - VS Code 的葡萄牙语字典扩展。
- 巴西葡萄牙语 - VS Code 的巴西葡萄牙语字典扩展。
- 罗马尼亚语 - VS Code 的罗马尼亚语字典扩展。
- 俄语 - VS Code 的俄语字典扩展。
- 塞尔维亚语 - VS Code 的塞尔维亚语字典扩展。
- 斯洛伐克语 - VS Code 的斯洛伐克语字典扩展。
- 斯洛文尼亚语 - VS Code 的斯洛文尼亚语字典扩展。
- 西班牙语 - Code Spell Checker 的西班牙语附加组件
- 瑞典语 - VS Code 的瑞典语字典扩展。
- 瑞士德语 - VS Code 的瑞士德语字典扩展。
- 土耳其语 - VS Code 的土耳其语字典扩展。
- 乌克兰语 - VS Code 的乌克兰语字典扩展。
- 越南语 - VS Code 的越南语字典扩展。
技术字典
启用的文件类型
- AsciiDoc
- C, C++
- C#
- css, less, scss
- Dart
- Elixir
- Go
- Html
- Java
- JavaScript
- JSON / JSONC
- LaTeX
- Markdown
- PHP
- PowerShell
- Pug / Jade
- Python
- reStructuredText
- Ruby
- Rust
- Scala
- Text
- TypeScript
- YAML
- SQL
启用 / 禁用文件类型
要启用或禁用某个文件类型的拼写检查:
- 点击状态栏中的拼写检查器状态:
- 在信息界面上,点击复选框。
如何处理驼峰命名
概念很简单,在检查驼峰命名的单词之前,先将其拆分。
- camelCase -> camel case
- HTMLInput -> html input -- 注意
I
与Input
相关联,而不是与HTML
相关联 - snake_case_words -> snake case words
- camel2snake -> camel snake -- (忽略数字 2)
全大写单词的特殊情况
有一些特殊情况可以帮助处理全大写单词的常见拼写实践。
尾部的 s
、ing
、ies
、es
、ed
与前一个单词保持在一起。
- CURLs -> curls -- 尾部的
s
- CURLedRequest -> curled request -- 尾部的
ed
注意事项
- 此拼写检查器不区分大小写。它无法捕获像 english 这样应为 English 的错误。
- 拼写检查器使用本地词典。它不会向您的机器外发送任何内容。
- 字典中的单词可能存在错误。
- 有些单词可能缺失。
- 只检查长度超过 3 个字符的单词。"jsj
cSpell:enable
spell-checker: enable
spellchecker: enable
JavaScript 示例
// cSpell:disable
const wackyWord = ['zaallano', 'wooorrdd', 'zzooommmmmmmm'];
/* cSpell:enable */
// 不支持嵌套的禁用/启用
// spell-checker:disable
// 现在已禁用。
var liep = 1;
/* cspell:disable */
// 仍然处于禁用状态
// cSpell:enable
// 现在已启用
const str = 'goededag'; // <- 将被标记为错误。
// spell-checker:enable <- 不起作用
// cSPELL:DISABLE <-- 同样有效。
// 如果没有 enable,拼写检查将在文件末尾之前一直保持禁用状态。
const str = 'goedemorgen'; // <- 不会被标记为错误。
Markdown 示例
<!--- cSpell:disable --->
此文本不会被检查。
<!--- cSpell:enable --->
此文本会被检查。
忽略
忽略允许您指定文档中要忽略的单词列表。
// cSpell:ignore zaallano, wooorrdd
// cSpell:ignore zzooommmmmmmm
const wackyWord = ['zaallano', 'wooorrdd', 'zzooommmmmmmm'];
**注意:**用 ignore
定义的单词将在整个文件中被忽略。
单词
单词列表允许您添加被视为正确并将用作建议的单词。
// cSpell:words woorxs sweeetbeat
const companyName = 'woorxs sweeetbeat';
**注意:**用 words
定义的单词将在整个文件中使用。
启用/禁用复合词
在某些编程语言中,将单词粘合在一起是很常见的。
// cSpell:enableCompoundWords
char * errormessage; // 使用 cSpell:enableCompoundWords 后是可以的
int errornumber; // 也是可以的。
**注意:**复合词检查无法在同一文件中开启/关闭。 文件中的最后一个设置决定了整个文件的值。
排除和包含要检查的文本
默认情况下,整个文档都会进行拼写检查。
上面的 cSpell:disable
/cSpell:enable
允许您屏蔽文档的某些部分。
ignoreRegExp
和 includeRegExp
让您能够忽略或包含文本模式。
如果没有给出标志,默认会添加 gim
标志。
拼写检查器按以下方式工作:
- 查找所有匹配
includeRegExp
的文本 - 移除任何匹配
excludeRegExp
的文本 - 检查剩余的文本。
排除示例
// cSpell:ignoreRegExp 0x[0-9a-f]+ -- 将忽略 C 风格的十六进制数
// cSpell:ignoreRegExp /0x[0-9A-F]+/g -- 将忽略大写的 C 风格十六进制数。
// cSpell:ignoreRegExp g{5} h{5} -- 只会匹配 ggggg,但不会匹配 hhhhh 或 'ggggg hhhhh'
// cSpell:ignoreRegExp g{5}|h{5} -- 会匹配 ggggg 和 hhhhh
// cSpell:ignoreRegExp /g{5} h{5}/ -- 会匹配 'ggggg hhhhh'
/* cSpell:ignoreRegExp /n{5}/ -- 由于结束注释的原因,不会按预期工作 -> */
/*
cSpell:ignoreRegExp /q{5}/ -- 会正常匹配 qqqqq,但不会匹配 QQQQQ
*/
// cSpell:ignoreRegExp /[^\s]{40,}/ -- 将忽略没有空格的长字符串。
// cSpell:ignoreRegExp Email -- 这将忽略类似电子邮件的模式 -- 参见预定义的正则表达式
var encodedImage = 'HR+cPzr7XGAOJNurPL0G8I2kU0UhKcqFssoKvFTR7z0T3VJfK37vS025uKroHfJ9nA6WWbHZ/ASn...';
var email1 = 'emailaddress@myfancynewcompany.com';
var email2 = '<emailaddress@myfancynewcompany.com>';
**注意:**ignoreRegExp 和 includeRegExp 适用于整个文件。它们不会启动和停止。
包含示例
通常你不需要使用 includeRegExp
。但如果你在混合使用不同的语言,它可能会很有帮助。
# cSpell:includeRegExp #.*
# cSpell:includeRegExp /(["]{3}|[']{3})[^\1]*?\1/g
# 只有注释和块字符串会被检查拼写。
def sum_it(self, seq):
"""这会被检查拼写"""
variabele = 0
alinea = '这不会被检查'
for num in seq:
# 'value' 的本地状态会在迭代之间保留
variabele += num
yield variabele
预定义的正则表达式
排除模式
Urls
1 -- 匹配 URLHexValues
-- 匹配常见的十六进制格式,如#aaa
、0xfeef
、\u0134
EscapeCharacters
1 -- 匹配特殊字符:\n
、\t
等Base64
1 -- 匹配长度超过 40 个字符的 base64 文本块。Email
-- 匹配大多数电子邮件地址。
包含模式
Everything
1 -- 默认情况下,我们匹配整个文档并移除排除项。string
-- 这匹配常见的字符串格式,如 '...'、"..." 和 `...`CStyleComment
-- 这些是 C 风格的注释 /* */ 和 //PhpHereDoc
-- 这匹配 PHPHereDoc 字符串。
1. 这些模式是每个文件默认包含/排除列表的一部分。
自定义
拼写检查器配置可以通过 VS Code 首选项或 cspell.json
配置文件控制。
优先顺序:
- 工作区文件夹
cspell.json
- 工作区文件夹
.vscode/cspell.json
- VS Code 首选项
cSpell
部分。
将单词添加到工作区字典
你可以选择将自己的单词添加到工作区字典中。最简单的方法是将光标放在你想要添加的单词上,当灯泡出现时,按 Ctrl+.
(Windows)/ Cmd+.
(Mac)。你会看到建议列表和添加单词的选项。
你也可以输入想要添加到字典的单词:F1
add word
-- 选择 Add Word to Dictionary
并输入你想添加的单词。
cspell.json
添加到字典的单词会被放置在 工作区 文件夹的 cspell.json
文件中。
注意,cspell.json
中的设置会覆盖 VS Code 的 settings.json
中的等效 cSpell 设置。
示例 cspell.json 文件
// cSpell 设置
{
// 设置文件的版本。始终为 0.2
"version": "0.2",
// language - 当前活动的拼写语言
"language": "en",
// words - 始终被视为正确的单词列表
"words": [
"mkdirp",
"tsmerge",
"githubusercontent",
"streetsidesoftware",
"vsmarketplacebadge",
"visualstudio"
],
// flagWords - 始终被视为不正确的单词列表
// 这对于侮辱性词语和常见的拼写错误很有用。
// 例如 "hte" 应该是 "the"
"flagWords": [
"hte"
]
}
VS Code 配置设置
//-------- Code Spell Checker 配置 --------
// 拼写检查时使用的语言区域。默认支持 "en"、"en-US" 和 "en-GB"。
"cSpell.language": "en",
// 控制每个文档的最大拼写错误数。
"cSpell.maxNumberOfProblems": 100,
// 控制显示的建议数量。
"cSpell.numSuggestions": 8,
// 在与字典比对之前,单词的最小长度。
"cSpell.minWordLength": 4,
// 指定要进行拼写检查的文件类型。
"cSpell.enabledLanguageIds": [
"csharp",
"go",
"javascript",
"javascriptreact",
"markdown",
"php",
"plaintext",
"typescript",
"typescriptreact",
"yml",
"sql"
],
// 启用/禁用拼写检查器。
"cSpell.enabled": true,
// 在状态栏上显示拼写检查器状态。
"cSpell.showStatus": true,
// 为工作区添加到字典的单词。
"cSpell.words": [],
// 启用/禁用复合词,如 'errormessage'
"cSpell.allowCompoundWords": false,
// 要忽略且不建议的单词。
"cSpell.ignoreWords": ["behaviour"],
// 要添加到字典的用户单词。应该只在用户设置中。
"cSpell.userWords": [],
// 指定要忽略的路径/文件。
"cSpell.ignorePaths": [
"node_modules", // 这将忽略 node_modules 目录中的任何内容
"**/node_modules", // 与上面相同
"**/node_modules/**", // 与上面相同
"node_modules/**", // 由于当前工作目录的确定方式,目前不起作用。
"vscode-extension", //
".git", // 忽略 .git 目录
"*.dll", // 忽略所有 .dll 文件。
"**/*.dll" // 忽略所有 .dll 文件
],
// flagWords - 始终被视为不正确的单词列表
// 这对于侮辱性词语和常见的拼写错误很有用。
// 例如 "hte" 应该是 "the"`
"cSpell.flagWords": ["hte"],
// 设置文档拼写检查的延迟时间。默认为 50。
"cSpell.spellCheckDelayMs": 50,
// 设置诊断报告级别
// Error - 将拼写问题报告为错误
// Warning - 将拼写问题报告为警告
// Information - 将拼写问题报告为信息(默认)
// Hint - 将拼写问题报告为提示,不会在问题面板中显示
"cSpell.diagnosticLevel": "Information",
字典
拼写检查器包含一组默认字典。
通用字典
- wordsEn - 源自 Hunspell 美式英语单词。
- wordsEnGb - 源自 Hunspell 英式英语单词。
- companies - 知名公司列表
- softwareTerms - 软件术语和概念,如 "coroutine"、"debounce"、"tree" 等。
- misc - 不属于其他字典的术语。
编程语言字典
- typescript - Typescript 和 Javascript 的关键字
- node - 与使用 nodejs 相关的术语。
- php - php 关键字和库方法
- go - go 关键字和库方法
- python - python 关键字
- powershell - powershell 关键字
- html - html 相关关键字
- css - css、less 和 scss 相关关键字
杂项字典
- fonts - 长字体列表 - 用于辅助 css
根据编程语言,将加载不同的字典。
以下是一些默认规则:
"*"
匹配任何编程语言/文件类型。"locale"
用于根据"cSpell.language"
设置进行过滤。
{
"cSpell.languageSettings": [
{ "languageId": '*', "locale": 'en', "dictionaries": ['wordsEn'] },
{ "languageId": '*', "locale": 'en-US', "dictionaries": ['wordsEn'] },
{ "languageId": '*', "locale": 'en-GB', "dictionaries": ['wordsEnGb'] },
{ "languageId": '*', "dictionaries": ['companies', 'softwareTerms', 'misc'] },
{ "languageId": "python", "dictionaries": ["python"]},
{ "languageId": "go", "dictionaries
/**
* @title 字典文本文件路径
* 定义字典文本文件的路径。
*
*
* **注意:** 如果路径是 `undefined`,则期望在 `dictionaryDefinitions` 中找到 `name` 指定的字典。
*
*
* 文件格式: 文件中的每一行都被视为一个字典条目。
* 保留大小写,同时去除首尾空格。
* 路径应该是绝对路径,或相对于工作区的路径。
*
* **示例:** 相对于用户文件夹
*
* ```
* ~/dictionaries/custom_dictionary.txt
* ```
*
* **示例:** 在多根工作区中相对于 `client` 文件夹
*
* ```
* ${workspaceFolder:client}/build/custom_dictionary.txt
* ```
*
* **示例:** 在单根工作区中相对于当前工作区文件夹
*
* **注意:** 在多根工作区中可能不会如预期工作,因为它基于当前打开文件的相对工作区。
*
* ```
* ${workspaceFolder}/build/custom_dictionary.txt
* ```
*
* **示例:** 在单根工作区或多根工作区的第一个文件夹中相对于工作区文件夹
*
* ```
* ./build/custom_dictionary.txt
* ```
*/
path?: FsPath;
/**
* @title 向字典添加单词
* 指示是否应使用此自定义字典来存储添加的单词。
* @default true
*/
addWords?: boolean;
/**
* @title 字典范围
* 选项包括
* - `user` - 适用于所有项目和工作区的单词
* - `workspace` - 适用于整个工作区的单词
* - `folder` - 仅适用于工作区文件夹的单词
*/
scope?: CustomDictionaryScope | CustomDictionaryScope[];
}
全局字典
要添加全局字典,您需要更改用户设置。
定义字典
在用户设置中,您需要告诉拼写检查器在哪里找到您的单词列表。
示例添加医学术语,以便可以找到像 acanthopterygious 这样的单词。
VS Code 设置
"cSpell.customDictionaries": {
"myWords": {
"name": "myWords",
"path": "~/my-words.txt",
"scope": "user",
"addWords": true
}
}
解释: 在此示例中,我们告诉拼写检查器在哪里找到我们名为 myWords
的个人字典。
name
- 这是字典的名称,所有对该字典的引用都通过名称进行。path
- 这是字典文件的路径。由于它在用户设置中,我们必须使用绝对路径或使用~/
相对于用户目录的路径。scope
- (可选) 用于将字典"范围"限定为user
、workspace
或folder
。范围用于帮助传达字典的预期用途。addWords
- (可选) 默认值 -true
- 用于显示/隐藏字典作为添加单词的可能目标。
使用 cspell.json
的项目 / 工作区字典
要在项目级别添加字典,应在 cspell.json
文件中定义,以便可以与 cspell
命令行工具一起使用。
此文件可以位于项目根目录或 .vscode 目录中。
示例添加医学术语,其中术语被签入项目,我们只想将其用于 .md 文件。
{
"dictionaryDefinitions": [
{ "name": "medicalTerms", "path": "./dictionaries/medicalterms-en.txt"},
{ "name": "cities", "path": "./dictionaries/cities.txt"}
],
"dictionaries": [
"cities"
],
"languageSettings": [
{ "languageId": "markdown", "dictionaries": ["medicalTerms"] },
{ "languageId": "plaintext", "dictionaries": ["medicalTerms"] }
]
}
解释: 在此示例中,定义了两个字典:cities 和 medicalTerms。 路径相对于 cSpell.json 文件的位置。这允许将字典签入项目。
cities 字典用于每种文件类型,因为它被添加到 dictionaries 列表中。 medicalTerms 字典仅在编辑 markdown 或 plaintext 文件时使用。
DictionaryDefinition
interface DictionaryDefinition {
/**
* 这是字典的名称。
*
* 名称格式:
* - 必须包含至少 1 个数字或字母。
* - 允许使用空格。
* - 将删除前导和尾随空格。
* - 名称区分大小写。
* - 不得包含 `*`, `!`, `;`, `,`, `{`, `}`, `[`, `]`, `~`。
*/
name: DictionaryId;
/** 可选描述。 */
description?: string;
/** 自定义字典文本文件的路径。 */
path: CustomDictionaryPath;
/**
* 定义将单词添加到字典时的范围。
* 范围值: `user`, `workspace`, `folder`。
*/
scope?: CustomDictionaryScope | CustomDictionaryScope[];
/**
* 当为 `true` 时,让拼写检查器知道可以将单词添加到此字典。
*/
addWords: boolean;
}
使用 VS Code 设置的项目 / 工作区字典
VS Code 设置
"cSpell.customDictionaries": {
"project-words": {
"name": "project-words",
"path": "${workspaceRoot}/project-words.txt",
"description": "Words used in this project",
"addWords": true
},
"medicalTerms": {
"name": "medicalTerms",
"path": "/Users/guest/projects/cSpell-WordLists/dictionaries/medicalterms-en.txt",
"addWords": false // 不向此字典添加单词
},
"companyTerms": {
"name": "companyTerms",
"path": "${workspaceFolder}/../company/terms.txt"
// "addWords": true -- 隐含
},
"custom": true, // 启用 `custom` 字典
"internal-terms": false // 禁用 `internal-terms` 字典
}
常见问题
参见: 常见问题
由 Street Side Software 为您提供