- PVSM.RU - https://www.pvsm.ru -

Zed: Великий и ужасный

Zed: Великий и ужасный

Великий — потому что сегодня это, пожалуй, лучший редактор кода для решения практически любых задач, от веб-разработки до системного программирования. Слоган компании в полной мере описывает, что из себя Zed представляет:

Zed — Your last next editor

Ужасный — потому что к нему придётся привыкать. Как когда-то вы привыкали к Markdown, Git или терминалу Linux.

Zed — это инструмент для серьёзных вещей, вряд ли подойдёт как первая среда программирования.

Для меня Zed оказался нужен по следующим причинам:

  • Не устраивало наличие 5+ редакторов под разные языки программирования

  • Требовалось иметь интеграцию с ИИ, чтобы тот мог вносить точечные изменения в код с автозапуском тестов и генерировать коммиты

  • Хотелось найти что-то полегковеснее условных PyCharm, Intellij IDEA и им подобных

  • Искал редактор, который без проблем сможет работать с WSL (в принципе, подходит большинство, но возвращаемся к вопросу о числе редакторов для разных проектов, так что нужно было “1 раз и чтобы навсегда”)

Я прошел через стадию отрицания при настройке (нет обычных кнопок Run и Debug, повсюду! Максимально непривычный интерфейс), но когда всё заработало, остался лишь вопрос, почему я не слышал о Zed раньше.

Стоит ли браться за освоение нового редактора?

Только взгляните на то, сколько звёзд на GitHub набрали проекты:

В скобках указаны даты создания репозиториев. Важно отметить, что дата создания репозитория != дата появления редактора (разница в несколько лет уж точно), так что Zed - это безусловно чертовски быстро набравший популярность проект.

Статистика бралась при помощи ссылки https://api.github.com/repos/{repo_owner}/{repo_name}

Плюсы

  1. Скорость, причём ощутимая. Zed написан на Rust, а весь интерфейс рендерится напрямую видеокартой (GPU) на частоте вашего монитора. Никакого Electron, никаких подвисаний при вводе текста, никаких пауз на «Indexing…», как в тяжеловесных IDE от JetBrains.

  2. Всё работает из коробки. В отличие от Neovim, где сборка идеального конфига отнимает дни и даже недели, в Zed поддержка Rust, Go, C/C++, TypeScript и др. встроена нативно. Вы просто открываете папку — и у вас уже работают LSP, автодополнение и отладчики.

  3. Фокус на коде. Вы не найдете здесь громоздких панелей с сотней иконок. Интерфейс Zed минималистичен, а все настройки прозрачны и хранятся в простом settings.json.

  4. Отсутствие системной папки. Лично для меня это было очень важно, т.к это позволяет работать с какими-то папками как с проектом, а потом в любой момент изменить выбор корневой папки проекта, не беспокоясь о .idea и ей подобных.

  5. Современность. Интеграция с нейросетями (локальные, API ключи или ваш claude, cursor или что-либо ещё) встроены на уровне архитектуры. Есть возможность генерировать коммиты, писать инструкции для агентов в AGENT.md, ссылаться на конкретные строки кода или сообщений из терминала, автодополнения и многое-многое другое.

Минусы

  1. Разработка на Java. Увы, но тут не поработать нормально с Gradle / Maven, а про Spring я вообще молчу

  2. Очень непривычно. Да, для первого опыта в программировании точно не подойдёт, ибо нет большинства кнопок, понятных панелек и пр.

  3. Слишком много подводных камней. Может быть этой статьи и достаточно, чтобы начать активно работать в редакторе, но на каждом шаге может возникнуть нюанс, с которым вам придётся разбираться самому, читать документацию [5]

В этой статье я расскажу, как настроить Zed для комфортной работы, пробросить его в WSL без ошибок сети и настроить сборку и отладку (на примере ассемблера NASM).

Приятного просмотра чтения!

Getting started

Для этого понадобится перейти на Zed — Download [6] и скачать подходящий для вашей ОС файл.

Далее прокликайте всё, что будет предложено в установщике, а также войдите в zed через ваш GitHub-аккаунт.

После установки редактор будет выглядеть неуклюже: дерево файлов справа, кнопки будто не на своих местах. Чтобы установить привычный вид редактора, достаточно кликнуть на свой профиль в правом верхнем углу, навести на Panel Layout и выбрать Classic вместо Agentic. Вуаля!

После открытия, откройте настройки и пробегитесь глазами, возможно, какие-то тумблеры вам приглянутся. Из важных по своему мнению считаю только авто-сохранение, которое “из коробки” не работает - постоянно нажимать Ctrl + S не хочется. Чтобы сделать автосохранение, нужно:

  1. Перейти в settings -> editor

  2. Найти тумблер Auto Save Mode

  3. Выбрать подходящий для вас. Рекомендую On Focus Change

Далее в статье:

  • Удобство пользования

  • WSL

  • NASM и прочие Assembler-ы

  • Автоматизация для Zed task

Последний пункт нужен в ситуациях, когда запуск программы подразумевает работу с make-файлом или запуск какого-то набора команд в терминале (как для ассемблера целый nasm -g main.asm -felf64 -o main.o && ld -o main main.o). C task-ами вы сможете настроить всё так, что понадобится только нажимать Alt + T для запуска.

Удобство пользования

Коммиты

Zed подключает ваш ИИ, который вы указали в настройках, к панели гита, что позволяет теперь не заниматься придумыванием коммитов! Достаточно кликнуть на кнопку с карандашом (при наведении появится надпись Generate Commit Message), а ИИ придумает коммит за вас!

Чтобы настроить то, как должен выглядеть коммит:

  1. Нажмите Ctrl + Shift + P

  2. Введите zed: open settings file или zed: open project settings file (в зависимости от того, хотите вы сделать правила для текущего проекта или каждого) и нажмите Enter / кликните на выпадающий вариант

  3. В открывшемся списке нужно внутрь json вставить следующее:

    {
    	...,
    	"some-other-fields": "something",
    	"agent": {
        "commit_message_instructions": "Тут будут ваши инструкции. Увы, но обязательно в одну строку и без прикрепления файлов :("
    	}
    }
    

Либо вы можете создать файл AGENT.md / AGENTS.md / CLAUDE.md в корне проекта, а Zed сам поймёт, что этот файл надо скармливать ИИ. Но эти правила будут действовать уже не только для коммитов, но и для всех действий ИИ (но вы всегда можете уточнить всё внутри этого файла, мол, инструкции относятся ТОЛЬКО для коммитов)

Горячие клавиши

Те, что вы ещё не забыли

Все мы привыкли к тем или иным средам разработки. Zed позволяет переехать бесшовно в вопросе горячих клавиш:

  1. Нажмите Ctrl + Shift + P

  2. Введите zed: toggle base keymap selector и нажмите на выпадающий ниже вариант

  3. Далее выберите из списка тот редактор, к горячим клавишам которого вы привыкли Готово! Теперь все горячие клавиши выбранного вами редактора работают и в 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 [7] и проект microsoft/WSL [8] стал теперь open-source-ным.

Установить WSL просто: воспользуйтесь гайдом Установка WSL | Microsoft Learn [9], где от вас потребуется выполнить 1-2 команды в терминале.

VPN in WSL

Важно! Чтобы WSL выходил в сеть через ваш VPN, выполните следующее:

  1. Нажмите клавишу win

  2. Перейдите в WSL Settings

    Заметьте, есть WSL - откроется терминал, а есть WSL Settings - откроется окно с настройками

  3. Перейдите в Networking и переключите тумблер Auto Proxy enabled Готово!

Подключение WSL к Zed

Подключить WSL к Zed - это просто

  1. Нажмите Ctrl + Shift + P и введите wsl. Далее вам выпадет 2 варианта:

  2. projects: open wsl - открыть любую папку вашего устройства, которая располагается внутри папки \wsl.localhost{your-distribution}, либо скачать другой дистрибутив, либо соединиться с SSH-сервером

  3. 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

  1. В Zed нажмите Ctrl + Shift + P

  2. Введите zed: about

  3. Нажмите на Copy. В вашем буфере окажется что-то такое:

    Zed 1.17.2 
    Commit: c8e44cfa7bda9b2e22c8d6934d78969352e7f61a
    Version: 1.17.2+stable.349.c8e44cfa7bda9b2e22c8d6934d78969352e7f61a
    
  4. Скопируйте себе куда-то именно последнюю строку (в моём случае это 1.17.2+stable.349.{name-of-last-commit})

Скачайте сервер

  1. Откройте в браузере страницу релизов: Releases · zed-industries/zed [10]

  2. Найдите свою версию (например, v1.17.2)

  3. В блоке 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 [11], то увидите, что расширение лишь перенаправляет вас в bergercookie/asm-lsp [12], где уже реализуется 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). Но ведь это можно автоматизировать!

Для этого:

  1. Нажмите Ctrl + Shift + P

  2. Введите 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

Источник [13]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/nasm/457989

Ссылки в тексте:

[1] Язык Rust (2010): https://github.com/rust-lang/rust

[2] Язык Go (2014): https://github.com/golang/go

[3] Редактор VSCode (2015): https://github.com/microsoft/vscode

[4] Редактор Zed (2021): https://github.com/zed-industries/zed

[5] документацию: https://zed.dev/docs/

[6] Zed — Download: https://zed.dev/download

[7] Microsoft Learn: https://learn.microsoft.com/ru-ru/windows/wsl/

[8] microsoft/WSL: https://github.com/microsoft/WSL

[9] Установка WSL | Microsoft Learn: https://learn.microsoft.com/ru-ru/windows/wsl/install

[10] Releases · zed-industries/zed: https://github.com/zed-industries/zed/releases

[11] DevBlocky/zed-asm: https://github.com/DevBlocky/zed-asm

[12] bergercookie/asm-lsp: https://github.com/bergercookie/asm-lsp

[13] Источник: https://habr.com/ru/articles/1082090/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1082090