Zed: Великий и ужасный
Великий — потому что сегодня это, пожалуй, лучший редактор кода для решения практически любых задач, от веб-разработки до системного программирования. Слоган компании в полной мере описывает, что из себя Zed представляет:
Zed — Your last next editor
Ужасный — потому что к нему придётся привыкать. Как когда-то вы привыкали к Markdown, Git или терминалу Linux.
Zed — это инструмент для серьёзных вещей, вряд ли подойдёт как первая среда программирования.
Для меня Zed оказался нужен по следующим причинам:
Не устраивало наличие 5+ редакторов под разные языки программирования
Требовалось иметь интеграцию с ИИ, чтобы тот мог вносить точечные изменения в код с автозапуском тестов и генерировать коммиты
Хотелось найти что-то полегковеснее условных
PyCharm,Intellij IDEAи им подобныхИскал редактор, который без проблем сможет работать с WSL (в принципе, подходит большинство, но возвращаемся к вопросу о числе редакторов для разных проектов, так что нужно было “1 раз и чтобы навсегда”)
Я прошел через стадию отрицания при настройке (нет обычных кнопок Run и Debug, повсюду! Максимально непривычный интерфейс), но когда всё заработало, остался лишь вопрос, почему я не слышал о Zed раньше.
Стоит ли браться за освоение нового редактора?
Только взгляните на то, сколько звёзд на GitHub набрали проекты:
Язык Rust (2010) набрал ~118 000
Язык Go (2014) набрал ~138 000
Редактор VSCode (2015) набрал ~192 000
Редактор Zed (2021) набрал ~90 000
В скобках указаны даты создания репозиториев. Важно отметить, что дата создания репозитория != дата появления редактора (разница в несколько лет уж точно), так что Zed - это безусловно чертовски быстро набравший популярность проект.
Статистика бралась при помощи ссылки
https://api.github.com/repos/{repo_owner}/{repo_name}
Плюсы
Скорость, причём ощутимая. Zed написан на Rust, а весь интерфейс рендерится напрямую видеокартой (GPU) на частоте вашего монитора. Никакого Electron, никаких подвисаний при вводе текста, никаких пауз на «Indexing…», как в тяжеловесных IDE от JetBrains.
Всё работает из коробки. В отличие от Neovim, где сборка идеального конфига отнимает дни и даже недели, в Zed поддержка Rust, Go, C/C++, TypeScript и др. встроена нативно. Вы просто открываете папку — и у вас уже работают LSP, автодополнение и отладчики.
Фокус на коде. Вы не найдете здесь громоздких панелей с сотней иконок. Интерфейс Zed минималистичен, а все настройки прозрачны и хранятся в простом
settings.json.Отсутствие системной папки. Лично для меня это было очень важно, т.к это позволяет работать с какими-то папками как с проектом, а потом в любой момент изменить выбор корневой папки проекта, не беспокоясь о
.ideaи ей подобных.Современность. Интеграция с нейросетями (локальные, API ключи или ваш
claude,cursorили что-либо ещё) встроены на уровне архитектуры. Есть возможность генерировать коммиты, писать инструкции для агентов вAGENT.md, ссылаться на конкретные строки кода или сообщений из терминала, автодополнения и многое-многое другое.
Минусы
Разработка на Java. Увы, но тут не поработать нормально с Gradle / Maven, а про Spring я вообще молчу
Очень непривычно. Да, для первого опыта в программировании точно не подойдёт, ибо нет большинства кнопок, понятных панелек и пр.
Слишком много подводных камней. Может быть этой статьи и достаточно, чтобы начать активно работать в редакторе, но на каждом шаге может возникнуть нюанс, с которым вам придётся разбираться самому, читать документацию
В этой статье я расскажу, как настроить Zed для комфортной работы, пробросить его в WSL без ошибок сети и настроить сборку и отладку (на примере ассемблера NASM).
Приятного просмотра чтения!
Getting started
Для этого понадобится перейти на Zed — Download и скачать подходящий для вашей ОС файл.
Далее прокликайте всё, что будет предложено в установщике, а также войдите в zed через ваш GitHub-аккаунт.
После установки редактор будет выглядеть неуклюже: дерево файлов справа, кнопки будто не на своих местах. Чтобы установить привычный вид редактора, достаточно кликнуть на свой профиль в правом верхнем углу, навести на
Panel Layoutи выбратьClassicвместоAgentic. Вуаля!
После открытия, откройте настройки и пробегитесь глазами, возможно, какие-то тумблеры вам приглянутся. Из важных по своему мнению считаю только авто-сохранение, которое “из коробки” не работает - постоянно нажимать Ctrl + S не хочется. Чтобы сделать автосохранение, нужно:
Перейти в
settings -> editorНайти тумблер
Auto Save ModeВыбрать подходящий для вас. Рекомендую
On Focus Change
Далее в статье:
Удобство пользования
WSL
NASM и прочие Assembler-ы
Автоматизация для Zed
task-иПоследний пункт нужен в ситуациях, когда запуск программы подразумевает работу с make-файлом или запуск какого-то набора команд в терминале (как для ассемблера целый
nasm -g main.asm -felf64 -o main.o && ld -o main main.o). Ctask-ами вы сможете настроить всё так, что понадобится только нажиматьAlt + Tдля запуска.
Удобство пользования
Коммиты
Zed подключает ваш ИИ, который вы указали в настройках, к панели гита, что позволяет теперь не заниматься придумыванием коммитов! Достаточно кликнуть на кнопку с карандашом (при наведении появится надпись Generate Commit Message), а ИИ придумает коммит за вас!
Чтобы настроить то, как должен выглядеть коммит:
Нажмите
Ctrl + Shift + PВведите
zed: open settings fileилиzed: open project settings file(в зависимости от того, хотите вы сделать правила для текущего проекта или каждого) и нажмитеEnter/ кликните на выпадающий вариантВ открывшемся списке нужно внутрь
jsonвставить следующее:{ ..., "some-other-fields": "something", "agent": { "commit_message_instructions": "Тут будут ваши инструкции. Увы, но обязательно в одну строку и без прикрепления файлов :(" } }
Либо вы можете создать файл AGENT.md / AGENTS.md / CLAUDE.md в корне проекта, а Zed сам поймёт, что этот файл надо скармливать ИИ. Но эти правила будут действовать уже не только для коммитов, но и для всех действий ИИ (но вы всегда можете уточнить всё внутри этого файла, мол, инструкции относятся ТОЛЬКО для коммитов)
Горячие клавиши
Те, что вы ещё не забыли
Все мы привыкли к тем или иным средам разработки. Zed позволяет переехать бесшовно в вопросе горячих клавиш:
Нажмите
Ctrl + Shift + PВведите
zed: toggle base keymap selectorи нажмите на выпадающий ниже вариантДалее выберите из списка тот редактор, к горячим клавишам которого вы привыкли Готово! Теперь все горячие клавиши выбранного вами редактора работают и в Zed!
Те, что вы ещё не знали
Не знаю, насколько эти сочетания чисто Zed-овские, но в Zed они работают. Крайне рекомендую:
Ctrl + ~/J- открыть/закрыть терминалCtrl + Alt + R- открыть проводник в корне проектаCtrl + W- выделить слово. При последующих нажатиях блок растёт: строка, блок, ещё блок и так далее вплоть до всего файла целикомCtrl + Shift + /- переключиться в окно агента или обратноCtrl + Shift + E- открыть древо файлов (E - Explorer)Ctrl + Shift + G- открыть гит-окно (G - Git)Ctrl + /- закомментировать строку (используется по-моему практически во всех редакторах)Ctrl + PageUp / PageDown(они жеCtrl + Fn + Up / Downна ноутбуках) - переход в файл правее/левее
Up- клавиша со стрелкой вверх
Down- клавиша со стрелкой внизЕсли добавить
Shift, то комбинация превращается из “перейти” в “переместить”
WSL
WSL (Windows Subsystem for Linux) - скорее всего лучший вариант для работы с Linux, если ваша основная ОС - Windows. Есть подробная документация Microsoft Learn и проект microsoft/WSL стал теперь open-source-ным.
Установить WSL просто: воспользуйтесь гайдом Установка WSL | Microsoft Learn, где от вас потребуется выполнить 1-2 команды в терминале.
VPN in WSL
Важно! Чтобы WSL выходил в сеть через ваш VPN, выполните следующее:
Нажмите клавишу
winПерейдите в
WSL SettingsЗаметьте, есть
WSL- откроется терминал, а естьWSL Settings- откроется окно с настройкамиПерейдите в
Networkingи переключите тумблерAuto Proxy enabledГотово!
Подключение WSL к Zed
Подключить WSL к Zed - это просто
Нажмите
Ctrl + Shift + Pи введитеwsl. Далее вам выпадет 2 варианта:projects: open wsl- открыть любую папку вашего устройства, которая располагается внутри папки\\wsl.localhost\{your-distribution}, либо скачать другой дистрибутив, либо соединиться с SSH-серверомprojects: open folder in wsl- открыть абсолютно любую папку. Папка вне\\wsl.localhost\{your-distribution}будет “вмонтирована” при помощи пути/mnt/c
Но не всё так просто…
Обязательно попробуйте подключиться способом выше. К сожалению, скорее всего вы увидите ошибку Failed to connect: operation timed out. И правда в том, что Zed в момент подключения WSL должен попытаться разобраться с WSL и найти безголовый сервер (zed-remote-server) либо скачать его. Разумеется, в 1-й раз ему нужно скачать, и сделает он это через GitHub, взяв файл со страницы релизов. Хоть GitHub вроде как в РФ работает без каких-либо санкций, но скачать файл zed-remote-server-linux-x86_64.gz без vpn не получится (по крайней мере у меня не вышло). С vpn этот файл будет скачиваться минут 5-10, Zed просто упадёт с ошибкой таймаута через полминуты!
Так что скачать тот файл придётся вам!
Ваши гиги за шаги
Узнайте точную версию Zed
В Zed нажмите
Ctrl + Shift + PВведите
zed: aboutНажмите на
Copy. В вашем буфере окажется что-то такое:Zed 1.17.2 Commit: c8e44cfa7bda9b2e22c8d6934d78969352e7f61a Version: 1.17.2+stable.349.c8e44cfa7bda9b2e22c8d6934d78969352e7f61aСкопируйте себе куда-то именно последнюю строку (в моём случае это
1.17.2+stable.349.{name-of-last-commit})
Скачайте сервер
Откройте в браузере страницу релизов: Releases · zed-industries/zed
Найдите свою версию (например,
v1.17.2)В блоке Assets скачайте архив
zed-remote-server-linux-x86_64.gz
Перемещение архива в кэш Windows и запуск сервера внутри WSL
Zed сначала проверяет наличие архива на диске C:\, и только если не найдёт его, пойдёт в GitHub скачивать. Тут-то мы его и словим!
Откройте терминал Ubuntu и выполните команды:
# 1. Создаем служебную директорию mkdir -p ~/.zed_server && cd ~/.zed_server # 2. Копируем архив из загрузок Windows cp {your_path}/zed-remote-server-linux-x86_64.gz ~/.zed_server/ # 3. Распаковываем gzip -d -f zed-remote-server-linux-x86_64.gz # Ниже везде замените `{tmp}` на ту самую строку `1.17.2+stable.349.{name-of-last-commit}`, которую я просил скопировать # 4. Переименовываем под точную версию mv zed-remote-server-linux-x86_64 zed-remote-server-stable-{tmp} # 5. Выдаем права на исполнение бинарника, чтобы Linux разрешил запуск chmod +x zed-remote-server-stable-{tmp}
Готово! Осталось повторить всё из раздела “Подключение WSL к Zed”!
NASM и прочие Assembler-ы
Что ж, тут нельзя обойтись без линукса. На помощь приходит WSL. Зайдя в WSL, предварительно надо скачать пару вещей:
sudo apt update && sudo apt install -y build-essential gdb nasm
Запуск программ
В случае, если вы не готовы, введите в терминал эти строки для компиляции:
nasm -g hello.asm -felf64 -o hello.o ld -o hello hello.o
И введите ./hello для запуска скомпилированного файла.
Но вот ниже (раздел “Автоматизация для Zed task-и”) описана самая удобная автоматизация - task-и.
Чтобы не просто запускать команды в терминале и кодить в блокноте, а использовать редактор кода, нужен LSP - Language Server Protocol - протокол языкового сервера. В вашем редакторе это скорее всего реализуется каким-то своим расширением.
LSP для Zed
Скачайте расширение Assembly Language Server. Если вы заглянете на репозиторий расширения DevBlocky/zed-asm, то увидите, что расширение лишь перенаправляет вас в bergercookie/asm-lsp, где уже реализуется 1) подсветка кода 2) подсветка ошибок / предупреждений.
Чтобы всё заработало, нужно создать файл .asm-lsp.toml:
[default_config] assembler = "nasm" instruction_set = "x86/x86-64" [default_config.opts] compiler = "nasm" compile_flags_txt = ["-f elf64"] default_diagnostics = false
Файл должен находиться в корне проекта, иначе его Zed не найдёт
Автоматизация для Zed: task-и
Zed создавался не как простой редактор, а как удобный, поэтому найти привычные кнопки Run и Debug у вас будет получаться редко (для python, например, они появятся только у строки if __name__ == "__main__":). Всё для того, чтобы пространство не было забито хламом, код и только код!
Run
Обычно запуск программы / скрипта без кнопки Run предполагает ввод какой-то команды в терминал (для python это будет python3 fileName.py). Но ведь это можно автоматизировать!
Для этого:
Нажмите
Ctrl + Shift + PВведите
zed: open tasksДалее вам будет представлен простой пример задачи. В ней исчерпывающая информация по атрибутам и структуре задания вашей задачи.
Можно использовать следующие переменные для задач:
$ZED_FILE— полный путь к текущему файлу
$ZED_FILENAME— имя файла (check_int.asm)
$ZED_STEM— имя файла без расширения (check_int)
$ZED_DIRNAME— папка текущего файла
Если вы пишете задачу для запуска текущего asm-файла на компиляторе nasm и ассемблере x86-64, то вот то, что себе сделал я:
[ {...}, { "label": "Run Current ASM", "command": "nasm -f elf64 -g \"$ZED_FILENAME\" -o \"$ZED_STEM.o\" && ld -o \"$ZED_STEM\" \"$ZED_STEM.o\" && ./\"$ZED_STEM\"", "cwd": "$ZED_DIRNAME", "save": "current", "use_new_terminal": false, "allow_concurrent_runs": false, "reveal": "always" }, ]
Советую использовать запятые после последнего блока, чтобы при создании нового запятая уже была. Поломки конфигов - неприятная вещь
Ну и после запуска вы можете теперь просто кликать Alt + T, а Zed будет повторять ваш последний Run. Ну разве не чудо?)
Debug
Но тут раздел про автоматизацию Zed ещё не закончен! Оказывается, что есть возможность и кнопку debug заменить. Только вот теперь вместо zed: open tasks введите zed: open debug tasks.
Всё для того же ассемблера из примера выше вот пример задачи:
[ {...}, { "label": "Debug Current ASM", "adapter": "CodeLLDB", // Можете выбрать любой другой "request": "launch", "program": "$ZED_DIRNAME/$ZED_STEM", "cwd": "$ZED_DIRNAME", "stopOnEntry": true, "build": { "command": "sh", "args": [ "-c", "nasm -f elf64 -g \"$ZED_FILENAME\" -o \"$ZED_STEM.o\" && ld -g \"$ZED_STEM.o\" -o \"$ZED_STEM\"" ] } } ]
На этом у меня всё, спасибо за внимание! Буду рад услышать ваше мнение о статье и/или о Zed в комментариях
