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 в комментариях
Автор: SergeyPugin19
