Я постепенно перехожу с vs code на zed. Мне для работы с claude code достаточно простой консоли и приложения для просмотра файлов. vs code штука хорошая, но достаточно медленная.
В zed всякие spell checkers подключаются как модули. Их там несколько и у всех есть различные проблемы. Самый простой по подключению к zed, по моему мнению — это cSpell. Но… У него в поставке по умолчанию нет русского словаря. И как его туда впихнуть, совсем непонятно.
Т.е. стандартная рекомендация: создайте файл ~/.cspell.json и добавтье в него:
{
"language": "en-EN,ru-RU",
}
не подходит. Словаря то нет. Да и ошибки в описании локали как то не заметил.
Хорошо, что под рукой есть claude code на этой же машине. Запрос:
Проблема проверка русского языка в Zed. Установлен cspell есть файл ~/.cspell.json cspell сервер стартует, но все русские слова подчеркиваются как не правильные
В ответ
Проблема ясна. Две причины:
1. Пакет русского словаря не установлен — @cspell/dict-ru_ru отсутствует
2. Неправильные имена словарей в конфиге — cspell использует ru_RU (с подчёркиванием), а не ru-RU. Также en-EN не
существует, нужен en_US
Вывод cspell trace "привет" подтверждает: русский словарь не подключён, слово не найдено ни в одном словаре.
Исправляем. Сначала установим словарь:
Дальше, в течении 5-ти минут он находит решение и все заработало.
Ниже привожу инструкцию, сгенеированную им для устранения прболемы на MacOs.
# Добавление русского языка в cspell (Zed editor)
## Проблема
cspell в Zed по умолчанию не включает русский словарь. Пакет `@cspell/dict-ru_ru` не входит в `@cspell/cspell-bundled-dicts`, поэтому даже при указании `"language": "en,ru"` русские слова не распознаются.
## Решение (пошагово)
### 1. Установить пакет русского словаря
```bash
cd ~/Library/Application\ Support/Zed/extensions/work/cspell
npm install @cspell/dict-ru_ru
```
Словарь устанавливается в node_modules расширения cspell для Zed.
### 2. Настроить cspell конфиг
Создать/обновить `~/.cspell.json` (глобальный конфиг для всех проектов):
```json
{
"language": "en,ru",
"dictionaryDefinitions": [
{
"name": "ru-ru",
"path": "~/Library/Application Support/Zed/extensions/work/cspell/node_modules/@cspell/dict-ru_ru/ru_ru.trie.gz"
}
],
"dictionaries": ["ru-ru"]
}
```
### 3. Перезапустить Zed или перезагрузить cspell LSP
## Ключевые моменты
- **Имена словарей**: русский словарь регистрируется как `"ru-ru"` (нижний регистр, дефис). НЕ `"ru-RU"`.
- **Английский**: `Английский bundled и включается автоматически через `"language": "en,ru"`.
- **`import` не работает** для абсолютных путей к небандленным словарям — используй `dictionaryDefinitions` + `dictionaries`.
- **`language`** задаёт локаль для languageSettings, но без `dictionaryDefinitions` словарь не подключится, т.к. он не bundled.
- **Глобальный конфиг**: `~/.cspell.json` — cspell ищет конфиг вверх по дереву директорий.
- **Путь Zed extension**: `~/Library/Application Support/Zed/extensions/work/cspell/node_modules/`
- **cspell-ext.json** словаря находится в `@cspell/dict-ru_ru/cspell-ext.json`, но `import` из конфига его не подхватывает.
## Проверка
```bash
cd ~/Library/Application\ Support/Zed/extensions/work/cspell
node -e "
async function main() {
const lib = await import('cspell-lib');
const defaults = await lib.getDefaultBundledSettingsAsync();
const config = await lib.searchForConfig(process.env.HOME + '/');
const merged = lib.mergeSettings(defaults, config || {});
const s = lib.constructSettingsForText(merged, 'привет мир', 'markdown');
const dict = await lib.getDictionary(s);
console.log('привет:', dict.has('привет')); // true
console.log('мир:', dict.has('мир')); // true
console.log('ошибко:', dict.has('ошибко')); // false
}
main();
"
```