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();
    "
    ```

    Отпуск.

    Я в отпуске. Телефон почти не работает. Инет совсем не работает. Вернусь в следующем месяце. Завидуйте 🙂

    Yamandu Costa (гитаРРРа!)

    Недавно открыл для себя супер гитариста из Бразилии Yamandu Costa

    Вот, решил поделиться с любителями хорошей музыки 🙂

    Yeastar S300. Побороли басурманов.

    Просто замечательно работают братья китайцы и их импортер на просторах Родины. Не, реально хорошо.

    Реакция на найденные баги очень быстрая. Вот, прислали свежую прошивку 30.10.0.67.1. Допилили модуль автопрвизион. Теперь дополнительные поля не портятся и работают как надо.

    Поиск работы.

    Перехожу в режим неспешного поиска работы. Резюме можно посмотреть на хантере.

    Опять :(

    Нет, все же CentOS как рабочая станция не торт 🙁 Приходиться много делать руками и через опу. Снес, поставил OpenSUSE, gnome.
    Проблемы вызвал только VirtualBox. Как обычно не мог собрать модули ядра. Пришлось малость повозиться. Все остальные программы, которыми я пользуюсь, заработали «из коробки».
    Как это не странно звучит, но не хватает Unity из убунту 🙂
    Ну и заодно пощупаю btrfs.

    Касперский Фри

    Тестирую на знакомых бесплатный антивирус от Касперского. Неожиданный продукт. Точнее, не ожидал от Касперского такого аттракциона невиданной щедрости :). Вообще то у меня есть мысли почему появился этот продукт, но они относятся к области теории заговора. Поэтому озвучивать их не буду.

    По сути, в большинстве случаев нужен только антивирус и не просто бесплатный, таких хватает, а от известной марки. И тут — Бац! Касперский фри. Надеюсь, что рекламных объявлений не появиться 🙂 

    Android 6

    Удобно иметь во владении устройство от Google. Сколько живет девайс, столько времени приходят апдейты системы, в отличии от…
    Вот и сейчас тихо пришел 6-й андроид. Встал на девайс, работает.
    Аналогично, поступает и Ежевичка. Телефон на последней версии BB too.

    Фанаты, они такие!

    Коллега, фанат футбола.
    Не, не так. ФАНАТ ФУТБОЛА!
    Уже 3-й раз подряд точно предсказывает результаты матчей наших команд в забугорных играх. Мы все в шоке. Если еще раз попадет, пойду ставки делать 🙂

    Суббота удалась

    Таки да, суббота удалась.

    Сначала мне, совершенно случайно, досталось приглашение на органный концерт по абонементам в Московский Дом Музыки. «В органном королевстве» Федор Строганов.
    Я сразу заявил свои веские права на единственное приглашение :), выменяв его на контрамарку в Малый Театр у подруги жены.
    Да, орган — это сила! Сидел на концерте и тихо кайфовал.
    Учитывая, что это серия концертов для детей, она носит скорее познавательный характер. В один день были показаны разные направления в органной музыке. Было очень интересно. Я не надеялся (честно признаюсь, брал приглашение не глядя в программу, понадеялся на то, что к таким органам всяких халтурщиков не пускают :), но мне повезло — токкату и фугу ре минор Баха, Федор исполнил 🙂 Вау, дух захватывает.

    После окончания концерта, судьба преподнесла еще один сюрприз. Подруга жены, которой досталась моя контрамарка, простудила шею. И я вечером таки попал еще и в Малый Театр :).
    Если от органа я получил удовольствие, то от посещения Малого Театра остался какой то осадок :(. Ну что вы обычно ожидаете от Малого Театра? Ага, олд скул театр, Станиславский, «Не верю», «Чайка» и прочее. Вобщем ожидается такой старый добрый театр.
    Ндя, когда подняли занавес и началось действие, я не поверил своим глазам — актеры работали с петличками (микрофоны такие)!!! На сцене Малого Театра!!! А потом актеры запели! И я понял — мать твою — это же мюзикл! В Малом! О Боги! Куда я попал?! Дон Жуан, А. Толстой, музыкальная драма (мюзикл с печальным концом).
    Зря я не провентилировал вопрос заранее 🙁 может бы поменялся с кем нибудь еще 🙂
    Сам спектакль так себе, я потихоньку засыпал. На антракте мы с женой посмотрели друг на друга и спросили себя: «Пойдем сейчас или таки досмотрим это?». Решили досмотреть. Правильно, что остались. Когда появилась статуя командора, мурашки побежали по телу.

    Вот так я провел субботу, забавно.