Перейти к содержанию

Neovim: клавиши

Наборов привязок два, и их постоянно путают:

  • Mappings Neovim работают в редакторе.
  • Хоткеи окна работают внутри окна отладчика — это отдельный процесс со своей обработкой клавиатуры.

Mappings Neovim

Умолчания:

Mapping Команда Что делает
<leader>dS :DebugStart Начать отладку профилем по умолчанию
<leader>dT :DebugTest Отладить тест под курсором
<leader>dc :DebugContinue Продолжить до следующей остановки
<leader>di :DebugStepInto Шаг внутрь вызова
<leader>do :DebugStepOver Шаг через вызов
<leader>dO :DebugStepOut Шаг наружу, до возврата из функции
<leader>dp :DebugPause Прервать работающую программу
<leader>dt :DebugStop Завершить сессию отладки
<leader>du :DebugFocus Поднять окно отладчика
<leader>db :ToggleBreakpoint Поставить или снять точку останова на строке

Обратите внимание на регистр: <leader>do — шаг с обходом, <leader>dO — шаг наружу; <leader>dt — стоп, <leader>dT — отладка теста, <leader>dS — старт.

Профиль привязкой не передать: <leader>dS и <leader>dT делают то же, что :DebugStart и :DebugTest без аргумента. Для другого профиля наберите команду — имена профилей из .bugsaur/config.toml она дополняет сама.

У каждой привязки есть подпись, поэтому which-key и :nmap <leader>d показывают действие, а не повтор самой клавиши.

Это обычные mappings Neovim, поэтому переназначаются как всё остальное — своей клавишей на соответствующую команду :Debug*.

Хоткеи окна: gui_keymaps

Mappings Neovim до окна отладчика не дотягиваются, поэтому привязки окна настраиваются отдельно, таблицей действие → аккорд:

require("bugsaur").setup({
  gui = true,
  gui_keymaps = {
    continue = "Ctrl+R",
    step_over = "F6",
    step_into = "F7",
    step_out = "Shift+F8",
    pause = "F10",
    restart = "Ctrl+Shift+F5",
  },
})

Здесь поддерживаются действия continue, step_into, step_over, step_out, pause, terminate, restart. Значение vim.NIL отключает привязку.

Модификаторы — Cmd, Ctrl, Alt, Shift, и их порядок в аккорде не важен: Shift+Alt+F8 и Alt+Shift+F8 — один и тот же аккорд.

gui_keymaps читается при запуске процесса GUI

Правка этой таблицы и повторный :source конфига не подействуют на уже открытое окно.

Проект может перебить ваши хоткеи окна

Секция [ui.keymaps] в .bugsaur/config.toml имеет приоритет над gui_keymaps — но по действиям, а не блоком:

[ui.keymaps]
continue = "Alt+R"
step_over = "F2"
pause = ""        # снять привязку

Названное проектом выигрывает; не названное остаётся тем, что вы настроили в редакторе. Так проект с непривычной раскладкой одинаков у всех, кто его открывает, и при этом ваши личные привязки на остальные действия не теряются.

Полная стопка слоёв, снизу вверх:

  1. встроенные умолчания — F7, F8, Shift+F8, F9, Cmd+F2 / Ctrl+F2, H J K L, стрелки;
  2. <корень>/.bugsaur-keys.json — личный файл проекта, аккорд → действие, где null снимает привязку;
  3. gui_keymaps из setup() плагина;
  4. [ui.keymaps] из конфига проекта.

Кроме выполнения, [ui.keymaps] умеет привязывать переход к панелям и навигацию внутри них, чего gui_keymaps не покрывает. Полный список действий: Настройка → Интерфейс.

Если сомневаетесь — спросите у окна

F1 или ? внутри окна отладчика показывает действующие сейчас привязки — те, что получились после всех четырёх слоёв. Истина именно там, а не на этой странице и не в вашем init.lua.