Zed, добавление русского словаря в cSpell

Я постепенно перехожу с 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();
    "
    ```