refactor: update nvim settings

This commit is contained in:
hhhh hgfh 2026-02-08 16:52:42 +03:00
parent af02e31fe9
commit 6748725b17
33 changed files with 1390 additions and 344 deletions

184
nvim/lua/custom/make.lua Normal file
View file

@ -0,0 +1,184 @@
_G.last_make_command = nil
_G.make_terminal_buf = nil
_G.build_targets = {}
local config_file = vim.fn.stdpath('config') .. '/build_targets.json'
-- Загрузка таргетов из файла
local function load_targets()
local ok, data = pcall(vim.fn.readfile, config_file)
if ok and data[1] then
_G.build_targets = vim.fn.json_decode(data[1])
else
_G.build_targets = {}
end
end
-- Сохранение таргетов в файл
local function save_targets()
local data = vim.fn.json_encode(_G.build_targets)
vim.fn.writefile({data}, config_file)
end
-- Загружаем таргеты при старте
load_targets()
local function run_make_command(command)
if _G.make_terminal_buf and vim.api.nvim_buf_is_valid(_G.make_terminal_buf) then
vim.cmd('buffer ' .. _G.make_terminal_buf)
else
vim.cmd('terminal')
_G.make_terminal_buf = vim.api.nvim_get_current_buf()
end
vim.cmd('startinsert')
vim.defer_fn(function()
if vim.b.terminal_job_id then
vim.fn.chansend(vim.b.terminal_job_id, "clear\n")
vim.fn.chansend(vim.b.terminal_job_id, command .. "\n")
end
end, 300)
end
-- Основная команда сборки (оставьте вашу текущую)
vim.api.nvim_create_user_command('Build', function()
vim.ui.input({
prompt = 'Флаги сборки: ',
default = '',
}, function(flags)
if flags == nil then return end
vim.ui.input({
prompt = 'Имя проекта: ',
default = '',
}, function(project_name)
if project_name == nil then return end
local make_cmd = "meson compile" .. flags .. " " .. project_name
_G.last_make_command = make_cmd
run_make_command(make_cmd)
vim.notify("🔨 Сборка запущена: " .. make_cmd)
end)
end)
end, {
desc = "Сборка проекта в терминале"
})
vim.api.nvim_create_user_command('TargetNew', function()
vim.ui.input({
prompt = 'Название таргета: ',
default = '',
}, function(target_name)
if target_name == nil or target_name == '' then return end
vim.ui.input({
prompt = 'Команда сборки для "' .. target_name .. '": ',
default = '',
}, function(build_command)
if build_command == nil or build_command == '' then return end
_G.build_targets[target_name] = build_command
save_targets()
vim.notify("✅ Таргет '" .. target_name .. "' сохранен")
end)
end)
end, {
desc = "Создать новый таргет сборки"
})
-- ПЕРЕПИСАННАЯ команда для выбора таргета с использованием vim.ui.select
vim.api.nvim_create_user_command('Target', function()
local target_count = 0
for _ in pairs(_G.build_targets) do
target_count = target_count + 1
end
if target_count == 0 then
vim.notify("❌ Нет сохраненных таргетов. Используйте :TargetNew", vim.log.levels.ERROR)
return
end
-- Подготавливаем список для vim.ui.select
local targets_list = {}
for name, cmd in pairs(_G.build_targets) do
table.insert(targets_list, {
name = name,
cmd = cmd,
-- Форматируем для красивого отображения
display = string.format("🔨 %s\n 📝 %s", name, cmd)
})
end
-- Сортируем по имени
table.sort(targets_list, function(a, b) return a.name < b.name end)
vim.ui.select(targets_list, {
prompt = '📋 Выберите таргет сборки:',
format_item = function(item)
return item.display
end,
}, function(selected)
if not selected then
vim.notify("❌ Выбор отменен", vim.log.levels.WARN)
return
end
_G.last_make_command = selected.cmd
run_make_command(selected.cmd)
vim.notify("🔨 Запускаю: " .. selected.cmd)
end)
end, {
desc = "Выбрать таргет сборки"
})
-- Команда для просмотра всех таргетов
vim.api.nvim_create_user_command('TargetList', function()
local target_count = 0
for _ in pairs(_G.build_targets) do
target_count = target_count + 1
end
if target_count == 0 then
print("📝 Список таргетов пуст")
return
end
print("📋 Сохраненные таргеты сборки:")
local targets_list = {}
for name, cmd in pairs(_G.build_targets) do
table.insert(targets_list, { name = name, cmd = cmd })
end
table.sort(targets_list, function(a, b) return a.name < b.name end)
for i, target in ipairs(targets_list) do
print(string.format(" %d. %s → %s", i, target.name, target.cmd))
end
end, {
desc = "Показать список всех таргетов"
})
-- Команда для удаления таргета (уже использует vim.ui.select - оставляем как есть)
vim.api.nvim_create_user_command('TargetDelete', function()
local target_count = 0
for _ in pairs(_G.build_targets) do
target_count = target_count + 1
end
if target_count == 0 then
vim.notify("❌ Нет сохраненных таргетов", vim.log.levels.ERROR)
return
end
local targets_list = {}
for name, cmd in pairs(_G.build_targets) do
table.insert(targets_list, name)
end
table.sort(targets_list)
vim.ui.select(targets_list, {
prompt = 'Выберите таргет для удаления:',
}, function(selected)
if not selected then return end
_G.build_targets[selected] = nil
save_targets()
vim.notify("🗑️ Таргет '" .. selected .. "' удален")
end)
end, {
desc = "Удалить таргет сборки"
})
-- Повтор последней сборки (оставьте вашу текущую)
vim.api.nvim_create_user_command('LastBuild', function()
if _G.last_make_command then
run_make_command(_G.last_make_command)
vim.notify("🔁 Повторяю: " .. _G.last_make_command)
else
vim.notify("❌ Нет истории сборок", vim.log.levels.ERROR)
end
end, {
desc = "Повторить последнюю сборку в терминале"
})