Files
qode/docs/editor.md
T
2026-10-31 15:58:33 +03:00

9.4 KiB

Редактор — api.editor

Группа api.editor управляет вкладками, текстом, gutter, подсветкой и сохранением. LSP-серверы описаны отдельно в lsp.md, привязки клавиш редактора — в keymap.md.

Номера вкладок нумеруются с нуля.

Вкладки

Метод Описание
api.editor:tabs() Список вкладок: {{ index = 0, title = "main.rs", icon = "file" }, ...}
api.editor:active_tab() Индекс активной вкладки
api.editor:set_active_tab(index) Сделать вкладку активной; true, если вкладка существует
api.editor:next_tab() Переключить на следующую вкладку, вернуть индекс
api.editor:previous_tab() Переключить на предыдущую вкладку, вернуть индекс
api.editor:open_tab() Открыть пустую вкладку, вернуть индекс
api.editor:open(path, position) Открыть файл с диска, вернуть индекс вкладки
api.editor:close_tab(index) Закрыть вкладку; true, если вкладка закрыта
api.editor:focus() Перевести фокус в редактор, не меняя вкладку и курсор

Если файла нет, open создаёт пустой буфер с таким именем — как в vim. Язык подсветки определяется по расширению, если для него есть грамматика. Первый аргумент принимает и строку "src/main.rs", и массив сегментов { "src", "main.rs" }.

Второй аргумент open необязателен:

Значение Поведение
нет аргумента / nil Открыть вкладку, не трогая фокус
{} Перевести фокус в редактор, курсор оставить на месте
{line, column} Перевести фокус и поставить курсор (с нуля)
api.editor:open("src/main.rs")          -- открыть, не трогая фокус
api.editor:open("src/main.rs", {})      -- фокус в редактор, курсор на месте
api.editor:open("src/main.rs", {4, 2})  -- фокус в редактор, курсор на строку 4, столбец 2

Строка и столбец нумеруются с нуля, как в диагностике LSP; столбец считается в UTF-16.

Иконки вкладок

Слева от названия вкладки показывается иконка; по умолчанию это file. Имя — название иконки Lucide, регистр не важен. Подчёркивания и пробелы считаются дефисом, а icons/ и .svg можно не писать: file_code, file-code и icons/file-code.svg равнозначны.

Метод Описание
api.editor:set_tab_icon(index, name) Назначить иконку вкладке; false, если вкладки нет или иконка неизвестна
api.editor:clear_tab_icon(index) Вернуть иконку по умолчанию (file)
api.editor:tab_icon(index) Имя иконки вкладки или nil, если вкладки нет
api.editor:set_tab_icon(0, "file-code")
api.editor:set_tab_icon(1, "book-open")
api.editor:clear_tab_icon(1)             -- снова "file"

Иконки на полях редактора (gutter)

Слева от редактора есть узкая колонка с иконками. Методы действуют на активную вкладку, а номера строк нумеруются с нуля, как в LSP.

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

Метод Описание
api.editor:set_gutter_icon(line, icon, kind[, options]) Поставить иконку типа kind на строку. options = { color = "#RRGGBB", hover_color = "#RRGGBB" } задаёт цвет и цвет при наведении; оба необязательны. Без цвета иконка рисуется цветом темы. false — иконка или цвет неизвестны либо тип пуст
api.editor:gutter_icon(line, kind) Имя иконки этого типа на строке или nil
api.editor:gutter_color(line, kind) Цвет иконки или nil, если цвет не задан
api.editor:gutter_hover_color(line, kind) Цвет иконки при наведении или nil
api.editor:clear_gutter_icon(line, kind) Убрать иконку этого типа со строки; false, если её не было
api.editor:clear_gutter_line(line) Убрать все иконки строки
api.editor:clear_gutter_kind(kind) Убрать иконки типа во всех строках активной вкладки; возвращает число удалённых
api.editor:clear_gutter() Убрать все иконки активной вкладки
api.editor:on_gutter_click(kind, callback) Назначить обработчик клика по иконке типа kind; callback(line, icon, kind). nil вместо функции снимает обработчик
api.editor:set_gutter_icon(4, "circle", "diagnostics", { color = "#e5484d" })
api.editor:set_gutter_icon(4, "play", "breakpoint") -- вторая иконка на той же строке
api.editor:set_gutter_icon(9, "play", "breakpoint", {
    color = "#888888",
    hover_color = "#ffffff",
})

api.editor:on_gutter_click("breakpoint", function(line, icon, kind)
    print("клик", line, icon, kind)
end)

api.editor:clear_gutter_icon(4, "diagnostics") -- только один тип строки
api.editor:clear_gutter_kind("diagnostics")  -- перерисовать только диагностику
api.editor:clear_gutter_line(4)              -- все иконки строки
api.editor:clear_gutter()                    -- все иконки вкладки

Иконки привязаны к номерам строк и автоматически не сдвигаются при правке текста: сценарий сам решает, когда их переставить. При прокрутке колонка двигается вместе с редактором.

Текст

Метод Описание
api.editor:active_text() Текст активной вкладки
api.editor:set_active_text(text) Заменить текст активной вкладки

Сохранение

Метод Описание
api.editor:save() Сохранить активную вкладку в её файл

Путь считается относительно текущего рабочего каталога процесса. При успешной записи с вкладки снимается маркер несохранённых изменений.

Подсветка синтаксиса

Подсветка по умолчанию выключена. Поддерживаемые языки: rust, go, js, json, python, lua, bash, yaml, make, dockerfile, sql, markdown, css, c, cpp, html, xml. Для set_language принимаются и короткие имена (rs, golang, javascript, py, sh, yml, makefile, md, c++…).

Метод Описание
api.editor:set_language(index, "rust") Включить подсветку для вкладки; false, если вкладки нет или язык не поддерживается
api.editor:language(index) Язык подсветки вкладки или nil
api.editor:clear_language(index) Выключить подсветку для вкладки
api.editor:set_language(0, "rust")

Привязки редактора

api.editor:map_key, api.editor:set_mode и api.editor:mode работают так же, как глобальные привязки из keymap.md, но срабатывают дополнительно к глобальным и только когда фокус находится в редакторе.

api.editor:map_key("", "<A-r>", function()
  api.editor:set_active_text("editor mode")
end)