Команды и раскладки клавиш
Добавляйте действия, доступные пользователю.
«Команды и раскладки клавиш» — бесплатный урок Lua Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Обзор пользовательских команд
Пользовательские команды — это команды с двоеточием, которые предоставляет Ваш плагин, например :Format или :Telescope. Они должны начинаться с прописной буквы.
nvim_create_user_command определяет их на Lua, принимая имя, обратный вызов или строку и таблицу параметров. Это заменяет конструкцию Vim :command.
vim.api.nvim_create_user_command('Hello', function()
print('Hello from my plugin')
end, {})Аргументы команд
Установите nargs, чтобы принимать аргументы: '0', '1', '*', '?' или '+'. Обратный вызов получает таблицу opts с полями args, fargs и bang.
fargs — это список аргументов, уже разделённых по пробельным символам, и обычно именно он Вам нужен.
vim.api.nvim_create_user_command('Greet', function(opts)
print('Hi ' .. opts.args)
end, { nargs = 1 })Команды с диапазоном и восклицательным знаком
Передайте range = true, чтобы принимать диапазоны строк; затем обратный вызов считывает opts.line1 и opts.line2. Добавьте bang = true, чтобы разрешить :Cmd!; наличие восклицательного знака определяется через opts.bang.
Эти флаги позволяют одной команде работать по-разному для визуальных выделений и принудительных вариантов.
vim.api.nvim_create_user_command('Sum', function(o)
print(o.line1 .. ' to ' .. o.line2)
end, { range = true })Автодополнение команд
Предоставьте автодополнение по Tab с помощью параметра complete. Используйте встроенные варианты, такие как 'file' или 'buffer', либо пользовательскую функцию Lua.
Пользовательская функция дополнения получает неполный аргумент и командную строку, а возвращает список строк-кандидатов.
vim.api.nvim_create_user_command('Pick', function(o) print(o.args) end, {
nargs = 1,
complete = function() return { 'red', 'green', 'blue' } end,
})Команды с областью действия буфера
Чтобы ограничить область действия команды одним буфером, используйте nvim_buf_create_user_command с дескриптором буфера. Это часто применяется в плагинах для типов файлов.
Например, плагин для Markdown может определить :Preview только внутри буферов Markdown, сохраняя глобальное пространство имён свободным.
vim.api.nvim_buf_create_user_command(0, 'Preview', function()
print('previewing this buffer')
end, {})Знакомство с vim.keymap.set
vim.keymap.set — это современный программный интерфейс для сопоставления клавиш. Он принимает режим, клавиши слева, строку или функцию Lua справа и таблицу параметров.
В отличие от старого nvim_set_keymap, этот интерфейс принимает функцию обратного вызова Lua непосредственно в качестве правой части; оборачивать её в <cmd>lua не нужно.
vim.keymap.set('n', '<leader>w', function()
vim.cmd('write')
end, { desc = 'Save file' })Режимы и несколько сопоставлений
Аргумент режима может быть одной строкой, например 'n', или таблицей, такой как { 'n', 'v' }, чтобы одновременно создать сопоставления для нескольких режимов.
Распространённые режимы: n — обычный, i — вставки, v — визуальный, x — только визуальный, t — терминальный. Пустая строка '' означает обычный, визуальный режимы и режим ожидания оператора.
vim.keymap.set({ 'n', 'v' }, '<leader>y', '"+y', { desc = 'Yank to clipboard' })Параметры сопоставлений
Таблица параметров управляет поведением. silent = true подавляет эхо команды, noremap по умолчанию имеет значение true для безопасности, а buffer = 0 ограничивает сопоставление текущим буфером.
Всегда добавляйте desc, чтобы вывод which-key и :map оставался понятным.
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {
buffer = 0, silent = true, desc = 'Go to definition',
})Сопоставления-выражения
При значении expr = true функция правой части возвращает клавиши, которые нужно передать редактору. Это позволяет создавать интеллектуальные сопоставления, например менять поведение <Tab>, когда отображается меню дополнения.
Верните пустую строку, чтобы ничего не делать, или буквальные клавиши, которые нужно вставить.
vim.keymap.set('i', '<Tab>', function()
return vim.fn.pumvisible() == 1 and '<C-n>' or '<Tab>'
end, { expr = true })Удаление сопоставлений
Удалите сопоставление с помощью vim.keymap.del, передав тот же режим и клавиши, а также поле buffer, если сопоставление действовало только в буфере.
Это полезно в процедурах очистки или когда плагин отключает функцию и должен восстановить исходные привязки пользователя.
vim.keymap.del('n', '<leader>w')
vim.keymap.del('n', 'gd', { buffer = 0 })Команды и сопоставления клавиш вместе
Удобный подход — определить логику один раз, предоставить её как пользовательскую команду и привязать клавишу, которая вызывает эту команду. Так сохраняется единый источник истины.
Сопоставление с <cmd>Hello<cr> не выводит из визуального режима и работает предсказуемее, чем :Hello<cr>.
vim.api.nvim_create_user_command('Toggle', function() end, {})
vim.keymap.set('n', '<leader>t', '<cmd>Toggle<cr>', { desc = 'Toggle' })Быстрая проверка
Проверьте, насколько хорошо Вы освоили команды и сопоставления клавиш.
Повторение: команды и сопоставления клавиш
Теперь Вы умеете создавать команды с помощью nvim_create_user_command, управлять ими через nargs, range, bang и complete, а также ограничивать их область действия отдельным буфером.
Для сопоставлений vim.keymap.set принимает обратные вызовы Lua, несколько режимов и такие параметры, как desc, silent, buffer и expr; для очистки используется vim.keymap.del.
Часто задаваемые вопросы
Урок «Команды и раскладки клавиш» бесплатный?
Да — полный текст урока «Команды и раскладки клавиш» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «Команды и раскладки клавиш»?
Добавляйте действия, доступные пользователю. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Команды и раскладки клавиш»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- API Lua для Neovim
- Команды и раскладки клавиш
- Буферы и окна
- Сборка плагина