настройка редактора Zed, часть 1 LJ
настройка редактора Zed, часть 1 DW

настройка редактора Zed, часть 2 LJ
настройка редактора Zed, часть 2 DW

ознакомится
работа Git в Zed
Что умеет Git в Zed по умолчанию?
Цветовая разметка изменений (в левой панели файлов):
Зеленый цвет названия файла — файл только что создан и еще не отслеживается (Untracked).
Желтый/Оранжевый цвет — файл изменен (Modified).
Индикаторы изменений прямо в коде (Gutter):
Слева от номеров строк появляются цветные вертикальные полоски:
зеленая (добавленная строка), желтая (измененная) или красный треугольник (удаленный текст).
Кликнув на эту полоску, можно мгновенно откатить изменение конкретной строки.

Строка состояния (справа внизу):
Там всегда отображается название вашей текущей Git-ветки (например, main или dev). Кликнув на нее, можно быстро переключиться на другую ветку или создать новую.

Настройка Git-интеграции
Поскольку вы работаете на Linux, для полноценного удобства полезно настроить две вещи.
1. Отображение автора строки (Git Blame)
Очень удобная функция: когда вы ставите курсор на любую строку кода, редактор показывает справа бледным текстом, кто, когда и с каким комментарием (commit message) изменил эту строку.
Чтобы включить это, нажмите Ctrl + , (откроются настройки settings.json) и добавьте параметр:




2. Добавление скрытых папок Git и сборки в игнор поиска
Чтобы при глобальном поиске по проекту (Ctrl + Shift + F) Zed не тратил оперативную память на сканирование внутренних файлов Git, истории или папки сборки build/ из нашего универсального Makefile,
добавьте правила исключения в тот же settings.json:




Как работать с Git в Zed через клавиатуру?
Вы можете вызывать встроенные команды Git через стандартную командную панель:
Нажмите Ctrl + Shift + P.
Введите слово git.
Вы увидите список доступных команд, таких как Git: Toggle Timeline (посмотреть историю изменений текущего файла) или Git: Open Changed Files.

Если вам нужно сделать коммит или отправить код на удаленный репозиторий (Git Push),
вы можете нажать Ctrl + ~ (открыть встроенный терминал Zed) и выполнить стандартные консольные команды — это работает в едином окне и бесшовно.
Используете ли вы Git локально для хранения версий на ноутбуке, или вам нужно настроить отправку кода между вашим ноутбуком и изолированным сервером через локальный Git-репозиторий?

Сценарий 1. Проекты с удаленными репозиториями (SSH-серверы)
Если проект лежит на вашем мощном сервере, и там же инициализирован Git, вам не нужно вручную делать git push или git pull через флешку.
Когда вы подключаетесь к серверу через Zed по SSH (используя настроенный нами ранее алиас dev-server), встроенный Git в Zed автоматически подхватывает серверный репозиторий.
Вся цветовая разметка (зеленые и желтые строки) будет работать прямо через сеть в реальном времени.
Чтобы быстро синхронизировать код с удаленным сервером (например, сделать коммит), откройте встроенный терминал в Zed (Ctrl + ~). Он автоматически откроется внутри вашего сервера. Вы можете сразу писать:
git add .
git commit -m "Добавил универсальный Makefile"
git push origin main

Сценарий 2. Полностью локальные проекты (на ноутбуке)
Для проектов, которые вы ведете локально на ноутбуке, очень важно настроить глобальный файл исключений (.gitignore), чтобы в ваши локальные репозитории случайно не попали временные файлы компиляции Си или кэш Python.
Чтобы не создавать .gitignore в каждой папке вручную, настройте один глобальный файл для вашего пользователя в Debian:

Создайте глобальный файл исключений в терминале:bashnano ~/.config/git/ignore

Вставьте туда список файлов, которые Git должен навсегда игнорировать на вашем ноутбуке:



Сохраните файл (Ctrl+O, затем Enter) и выйдете (Ctrl+X).
Теперь в любом локальном проекте, где вы введете git init, Git автоматически проигнорирует этот системный мусор, а Zed не будет подсвечивать папку build/ желтым цветом.

Лайфхак для Zed: Разделение настроек под разные проекты
Так как у вас разные проекты (локальные Python-скрипты, низкоуровневый Си на сервере, веб-интерфейсы), вам может быть неудобно держать все настройки в одном глобальном файле settings.json.
Zed позволяет создавать локальные настройки для конкретной папки.
Создайте в корне любого вашего проекта скрытую папку .zed.
Внутри неё создайте файл settings.json.
Все параметры, написанные в этом файле, будут работать только для этого проекта.

Пример:
Для локального Python-проекта в папке .zed/settings.json вы можете включить автокомплит Ollama 1.5B,
а для тяжелого проекта на Си, открытого по SSH на мощном сервере — переписать настройки на большую модель Qwen 7B и жестко включить форматировщик clang-format.

Использование SSH-ключа с парольной фразой (passphrase) — это отличная практика для безопасности, но в графических редакторах она часто вызывает неудобства, так как система постоянно запрашивает ввод пароля при попытке связаться с удаленным Git-репозиторием.
Чтобы решить эту проблему в Debian 13, нужно настроить ssh-agent. Это встроенная служба Linux, которая один раз при загрузке системы спрашивает ваш пароль, расшифровывает ключ в оперативной памяти и затем автоматически предоставляет его редактору Zed и утилите Git на протяжении всей сессии.Вот как настроить автоматический запуск агента, чтобы он работал без вашего вмешательства.

Шаг 1. Настройка автозапуска агента в вашем профиле
Чтобы служба ssh-agent автоматически стартовала в вашей графической оболочке Debian при каждом включении ноутбука, добавьте несколько строк в конфигурационный файл вашего пользователя.
Откройте терминал на ноутбуке и откройте файл .bashrc (или .zshrc, если вы меняли оболочку):

vim ~/.bashrc

Прокрутите файл в самый конец и вставьте этот стандартный скрипт автоматического подхвата агента:



Сохраните файл (Ctrl+O, затем Enter) и выйдете (Ctrl+X).
Примените настройки прямо сейчас без перезагрузки:
source ~/.bashrc

Шаг 2. Добавление ключа в память агентаТеперь нужно сказать агенту, чтобы он запомнил ваш защищенный ключ. Выполните команду:
ssh-add ~/.ssh/id_ed25519

Если вы использовали стандартное имя ключа RSA, то путь будет ~/.ssh/id_rsa).
Система один последний раз попросит вас ввести вашу парольную фразу (passphrase). После успешного ввода ключ сохранится в оперативной памяти ноутбука.

Шаг 3. Автоматизация через SSH Config (Самый важный шаг)
Чтобы вам не приходилось вводить команду ssh-add вручную после каждой перезагрузки ноутбука, настройте встроенный механизм автоматического добавления ключей в SSH.
Откройте ваш конфигурационный файл SSH, который мы создавали ранее:

vim ~/.ssh/config

Добавьте в самый верх файла (над вашим Host dev-server) две глобальные строчки:



Как это будет работать теперь?
Вы включаете ноутбук и запускаете Zed.
Когда вы открываете проект, связанный с удаленным сервером по SSH, или пытаетесь сделать git push в удаленный репозиторий, Git обращается к SSH-клиенту.
Благодаря параметру AddKeysToAgent yes, система сама на лету подхватывает ваш ключ с парольной фразой, проверяет его в ssh-agent и мгновенно одобряет операцию.
Ввод паролей больше не прерывает вашу работу в редакторе, а безопасность ключа остается на максимальном уровне.

работа с файлами сборки Makefile
Для работы с файлами сборки Makefile в редакторе Zed на Linux все готово «из коробки», так как поддержка этого инструмента встроена в ядро редактора.
Однако у утилиты make есть одна жесткая историческая особенность: она синтаксически не принимает пробелы вместо табуляции.
Если в правиле сборки вместо знака Tab поставить 4 или 8 пробелов, утилита выдаст знаменитую ошибку Makefile:*** missing separator. Stop.

Шаг 1. Настройка автоматических табов для Makefile в settings.json
Поскольку для Python, JSON и YAML мы настроили использование пробелов, нам нужно сделать исключение конкретно для синтаксиса make.
Откройте глобальные настройки (Ctrl + ,) и добавьте в самый конец конфигурационного JSON специальный языковой блок:



После этого, как только вы откроете или создадите файл с именем Makefile (или makefile),
Zed автоматически переключит клавишу Tab в режим вставки «жестких» символов табуляции, и сборка на вашем сервере никогда не сломается.

Шаг 2. Как запускать сборку одной кнопкой (через Tasks)
Вместо того чтобы каждый раз открывать терминал и вручную писать команду make, вы можете привязать сборку к нашей системе задач Zed, которую мы настроили ранее.
Откройте файл задач ~/.config/zed/tasks.json (или через командную панель Open Tasks) и добавьте туда новую задачу сборки:



Шаг 3. Привязка горячей клавиши
Теперь откройте файл настроек клавиш keymap.json (Ctrl + K, затем Ctrl + S) и назначьте, например, классическое сочетание Ctrl + B (Build) для запуска вашей команды:



Теперь, когда вы пишете код на Си, вам достаточно нажать Ctrl + B: снизу плавно откроется панель терминала Zed, утилита make прочитает ваш файл конфигурации, вызовет gcc и скомпилирует проект.

Вот пример действительно универсального и продвинутого Makefile, который идеально подходит для компиляции Си-проектов любой вложенности
Чтобы ваш универсальный Makefile успешно подключал внешние библиотеки (например, math.h для сложных математических вычислений, pthread для многопоточности или sqlite3 для баз данных)
на вашем сервере Debian, в конфигурацию нужно добавить специальную переменную линковщика — LDFLAGS (Linker Flags).
Если этого не сделать, компилятор выдаст ошибки сборки вроде undefined reference to 'pthread_create' или undefined reference to 'sqrt'.

Создайте файл Makefile
Создайте этот файл в корне вашего проекта. Напоминаю: убедитесь, что в настройках Zed для Makefile включены hard_tabs (строки команд ниже должны начинаться с символа Tab, а не с пробелов).




Главные преимущества этого шаблона:
Изолированная сборка (build/): Чтобы промежуточные объектные файлы .o не засоряли ваши папки с исходным кодом, этот скрипт автоматически создает скрытую структуру внутри папки build/, в точности повторяя ваши подпапки.
Умный сборщик find . -name "*.c": Команда глубоко сканирует проект. Вы можете разложить код по папкам src/, src/network/, src/utils/, и make сам всё обнаружит.
Флаги безопасности (-Wall -Wextra): Они заставят компилятор выдавать максимум предупреждений о потенциальных ошибках в коде (например, если вы объявили переменную, но забыли её использовать), что очень полезно при работе с языком Си.

Как им пользоваться в Zed?
Нажмите настроенный нами ранее хоткей Ctrl + B (или выполните make в терминале). Проект автоматически скомпилируется.
Чтобы полностью стереть результаты компиляции и пересобрать проект с нуля, откройте терминал и введите:
make clean

Как это работает на примере системных библиотек Debian:
Математика (-lm):
Когда вы пишете в Си-коде #include и вызываете функции pow(), sqrt() или sin(), флаг -lm принудительно указывает линковщику связать ваш код с системным бинарным файлом libm.so.
Потоки (-lpthread): При создании параллельных вычислений через #include этот флаг подключает библиотеку libpthread.so, которая отвечает за аппаратное распределение задач по ядрам вашего процессора Intel Raptor Lake.
Если в будущем вы добавите на сервер другие библиотеки (например, графическую libpng или сетевую libcurl), вам достаточно будет просто дописать их флаги через пробел в строку LDFLAGS: LDFLAGS = -lm -lpthread -lpng -lcurl.

Если вы используете сторонние библиотеки (особенно на изолированном от интернета сервере, куда файлы переносятся вручную), они чаще всего поставляются в двух видах:
Динамические (бинарные файлы с расширением .so в Linux).
Статические (архивы кода с расширением .a).
Поскольку сервер отрезан от сети и вы не можете установить их через утилиту apt, вам нужно хранить эти файлы прямо внутри папки вашего проекта и правильно объяснить компилятору gcc, где их искать.
Вот как настроить структуру проекта и обновить Makefile, чтобы подключить любые кастомные файлы библиотек.

Шаг 1. Рекомендуемая структура папок
Чтобы проект оставался чистым и переносимым, создайте в корне вашего проекта две специальные папки:
include/ — сюда вы складываете заголовочные файлы библиотек (файлы .h), чтобы ваш Си-код знал имена функций.
lib/ — сюда вы копируете скомпилированные файлы самих библиотек (.so или .a), перенесенные с флешки.

Шаг 2. Финальная конфигурация флагов в Makefile
Откройте ваш универсальный Makefile и обновите верхний блок параметров. Нам нужно добавить два новых флага:
-Iinclude (в CFLAGS) — указывает компилятору искать файлы .h в нашей локальной папке.
-Llib (в LDFLAGS) — указывает линковщику искать бинарники библиотек в нашей локальной папке.
Замените блок флагов на следующий:

Шаг 3. Важный нюанс для динамических библиотек (.so) в Linux
Если ваши сторонние библиотеки являются динамическими (.so), в Linux есть строгая система безопасности:
при запуске программы операционная система Debian будет искать эти файлы только в стандартных системных директориях (вроде /usr/lib).
Так как их там нет, при запуске ./my_program вы получите ошибку: error while loading shared libraries: libимя.so: cannot open shared object file.
Чтобы решить эту проблему раз и навсегда без прав администратора sudo, нужно добавить в LDFLAGS специальный флаг rpath. Он жестко зашьет в ваш готовый бинарник инструкцию: «Ищи файлы .so в той же папке lib/, которая лежит рядом со мной».
Допишите эту инструкцию в строку LDFLAGS вашего Makefile:
LDFLAGS = -Llib -Wl,-rpath='$$ORIGIN/lib' -lm -lpthread -lимя

(Символ $$ORIGIN — это специальная переменная Linux, которая автоматически подставит путь к папке, где физически лежит запущенная программа).
Как теперь этим пользоваться:
Вы переносите с флешки файл, например, libcustom.so и заголовочный файл custom.h.
Файл custom.h кладете в папку include/.Файл libcustom.so кладете в папку lib/.
В Makefile в конец строки LDFLAGS дописываете -lcustom.
Нажимаете Ctrl + B в Zed — проект собирается и сразу работает.

Вот готовые, точные названия флагов для OpenSSL и других популярных библиотек, которые чаще всего используются в Си-разработке под Linux.
Вы можете просто вставлять их через пробел в строку LDFLAGS вашего Makefile.
Обратите внимание на правило компилятора gcc: если файл библиотеки называется libcrypto.so, то префикс lib отбрасывается, а к названию добавляется флаг -l, то есть получается -lcrypto.1.
Флаги для OpenSSL (Криптография и шифрование)Библиотека OpenSSL физически состоит из двух независимых частей (для работы со стандартными алгоритмами шифрования и для сетевых TLS/SSL протоколов).
Для её подключения нужно указать оба флага вместе:

# Вставляем в конец строки LDFLAGS:
-lssl -lcrypto

(Файлы в папке lib/ должны называться: libssl.so/libssl.a и libcrypto.so/libcrypto.a).

2. Справочник флагов для других частых библиотек
Если ваши задачи изменятся и вы перенесете на сервер другие инструменты, используйте эту таблицу для правильной настройки LDFLAGS:




Как это работает в Makefile?
Оператор += в языке make позволяет гибко «наращивать» строку флагов.
Сначала инициализируется базовая строка с путями к папке lib/, затем к ней автоматически прибавляются системные потоки и математика,
а ниже вы можете легким движением руки подключать любые другие инструменты по мере усложнения ваших задач.

Пример итоговой строки в вашем Makefile
Если в вашем проекте одновременно используются стандартная математика, системные потоки, база данных SQLite и шифрование OpenSSL, ваша строка флагов в Makefile будет выглядеть аккуратно и просто:

LDFLAGS = -Llib -Wl,-rpath='$$ORIGIN/lib' -lm -lpthread -lssl -lcrypto -lsqlite3

Важный совет от встроенного ИИ-агента Zed:
Поскольку вы работаете на изолированном сервере, при переносе заголовочных файлов (например, для OpenSSL) сохраняйте структуру их папок.
Внутри скачанных исходников OpenSSL файлы .h обычно лежат в подпапке openssl/.
Перенесите эту подпапку целиком в вашу директорию include/, чтобы в коде на Си пути подключались стандартным для этой библиотеки образом:

#include
#include

Тогда компилятор gcc благодаря нашему флагу -Iinclude мгновенно найдет нужные заголовки, а Zed подсветит синтаксис без единой ошибки.

1. Оптимизация на Си:
Поиск утечек памяти и ускорениеВ языке Си неправильная работа с указателями и частый вызов тяжелых функций могут сильно замедлить программу.
Как использовать ИИ-агент для рефакторинга:
Выделите кусок кода на Си, который кажется вам медленным.Нажмите Ctrl + \, чтобы вызвать панель ассистента, и напишите промпт:

«Проанализируй этот код на Си. Найди потенциальные утечки памяти (пропущенные free), оптимизируй циклы и предложи более быструю альтернативу с точки зрения использования кэша процессора.»

Что сделает модель:
Перепишет циклы так, чтобы они шли по строкам, а не по столбцам (эффективное использование кэш-линий процессора вашего Intel Raptor Lake).
Заменит неэффективное копирование строк на работу с указателями.
Покажет, в каких ветках условий if/else вы забыли освободить динамическую память.


оптимизация кода
2. Оптимизация на Python:
Профилирование и алгоритмы
В Python оптимизация часто сводится к выбору правильных структур данных (например, замена списков на множества set для быстрого поиска) или к переносу тяжелых вычислений в эффективные библиотеки.
Эффективный промпт для оптимизации:
Откройте нужный .py файл, вызовите ассистента и введите:

«Этот алгоритм на Python работает слишком медленно на больших массивах данных.
Проведи рефакторинг: уменьши алгоритмическую сложность (например, с O(N²) до O(N log N)), избавься от лишних аллокаций памяти и предложи встроенные инструменты профилирования (cProfile), чтобы я мог замерить скорость выполнения.»

Локальная модель Qwen 2.5 Coder не просто перепишет код, но и добавит в ваш файл декоратор для замера времени выполнения (Time Profiler), чтобы вы наглядно увидели прирост скорости в терминале Zed по нажатию Super + Z.

3. Оптимизация на Bash:
Безопасность и параллелизмПлохо оптимизированные Bash-скрипты могут сильно нагружать диск ввода-вывода (I/O) или работать последовательно там, где можно запустить параллельные процессы.
С чем поможет ИИ:
Параллельная обработка:
ИИ может переписать ваш Bash-скрипт так, чтобы он обрабатывал файлы или отправлял запросы параллельно, используя встроенную утилиту xargs -P или фоновые процессы & с контролем лимита задач (wait).
Оптимизация чтения файлов: Заменит медленные циклы while read, которые вызывают внешние утилиты на каждой итерации, на эффективную потоковую обработку через единый вызов встроенных механизмов Bash.

Лайфхак Zed:
Быстрое исправление предупреждений компилятора
Когда вы запускаете сборку вашего Си-проекта через универсальный Makefile (нажав Ctrl + B), компилятор gcc благодаря флагам -Wall -Wextra выводит в терминал предупреждения (Warnings) с указанием номеров строк.
Вы можете моментально скормить эти ошибки ИИ-агенту с помощью специальной слеш-команды в чате:
Откройте панель ассистента (Ctrl + \).
Введите команду /diagnostics и нажмите Пробел.
Zed автоматически прикрепит к вашему запросу все текущие ошибки и предупреждения из терминала.
Допишите: «Исправь эти предупреждения компилятора в моем коде» и нажмите Enter.

Агент сам найдет проблемные файлы, исправит типы данных (например, заменит int на size_t для счетчиков циклов) и приведет код в идеальное состояние.

Отладка и обработка ошибок в Zed на Linux выстроена вокруг концепции интеграции системных инструментов во встроенный терминал и использования локального ИИ-агента.
Поскольку Zed — это легковесный нативный редактор (а не тяжелая IDE), утилиты вроде gdb, strace и pdb запускаются прямо внутри него, но с максимальным удобством.

отладка в редакторе
Отладка и обработка ошибок в Zed на Linux выстроена вокруг концепции интеграции системных инструментов во встроенный терминал и использования локального ИИ-агента.
Поскольку Zed — это легковесный нативный редактор (а не тяжелая IDE), утилиты вроде gdb, strace и pdb запускаются прямо внутри него, но с максимальным удобством.

1. Работа с gdb (для Си) прямо в интерфейсе Zed
Вместо того чтобы переключаться в отдельное окно консоли, вы можете запустить gdb во встроенном терминале Zed (Ctrl + ~), который откроется снизу вашей рабочей области.
Как сделать отладку в gdb удобной:
Скомпилируйте код с флагами отладки: В нашем универсальном Makefile временно замените флаг -O2 на -g (он добавляет в бинарник отладочные символы, информацию о строках и переменных).
Нажмите Ctrl + B для сборки.
Запустите TUI-режим GDB: В терминале Zed введите:

gdb -tui ./my_program

Флаг -tui (Text User Interface) разделит терминал Zed на две части: сверху появится красивое интерактивное окно с вашим Си-кодом,
а снизу — стандартная строка команд GDB. Вы сможете наглядно видеть, на какой строке стоит брейкпоинт.

Основные команды управления внутри терминала:

b main или b folder/file.c:42 — поставить точку останова.
r — запустить программу.
n (next) — шаг вперед без захода в функции.
s (step) — шаг с заходом внутрь функции.
p variable_name — напечатать значение переменной (указателя, структуры).

2. Использование strace для поиска системных ошибок
strace незаменим, когда программа на Си или Python внезапно падает из-за проблем с окружением Debian (не находит файл библиотеки, сыпет ошибками сегментации SIGSEGV при обращении к диску или сети).
Запустите strace прямо в терминале Zed, отфильтровав вывод, чтобы не утонуть в логах:

# Ищем только системные вызовы работы с файлами (open, read, write)
strace -e trace=file ./my_program

Магия интеграции с ИИ-агентом Zed:
Если strace выдал системную ошибку, которую трудно расшифровать (например, хитрый сбой ioctl или mmap),
вы можете мгновенно скопировать этот кусок лога из терминала, нажать Ctrl + \ и спросить у локальной модели Qwen 2.5 Coder:

«Программа на Си падает. Вот финальный вывод утилиты strace: [вставить лог]. В каком системном вызове произошел сбой и как мне исправить это в коде?»

3. Отладка Python через pdb (или современный breakpoint())
В современных версиях Python (начиная с 3.7+) встроен продвинутый механизм отладки. Вам больше не нужно импортировать import pdb; pdb.set_trace().
В коде вашего Python-приложения вставьте в нужное место одну встроенную функцию:

breakpoint()

Запустите файл через наш хоткей Super + Z.
Программа выполнится, плавно дойдет до этой строки и замрет, передав управление интерактивной консоли отладчика прямо во встроенный терминал Zed.
Вы сможете писать стандартные команды:

ll (показать весь код вокруг),
p имя_переменной (вывести значение),
c (продолжить выполнение).

4. Автоматическая обработка ошибок (Исключений) в коде
Чтобы минимизировать использование отладчиков, локальный ИИ-агент поможет вам написать правильные блоки перехвата исключений, которые не дадут программе упасть.
Выделите функцию и попросите ИИ через Ctrl + \:

В Python:
«Оберни этот блок работы с сетью/файлом в try-except с перехватом конкретных ошибок (FileNotFoundError, PermissionError) и правильным логированием через модуль logging.»

В Си:
«Добавь проверку на NULL для всех возвращаемых значений функций malloc и fopen в этом блоке кода, чтобы защитить программу от Segmentation Fault.»

Profile

uzverss: (Default)
uzverss

December 2024

S M T W T F S
12345 67
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 27th, 2026 08:04 am
Powered by Dreamwidth Studios