local function async_cmd(cmd) local job_id = vim.fn.jobstart(cmd, { on_stdout = function(_, data) for _, line in pairs(data or {}) do print(line) end end, on_stderr = function(_, data) for _, line in pairs(data or {}) do print(line) end end, on_exit = function(_, code) if code ~= 0 then vim.notify( string.format("Команда завершилась с ошибкой (%d)", code), vim.log.levels.ERROR ) else vim.notify("OK", vim.log.levels.INFO) end end, }) return job_id end vim.api.nvim_create_autocmd({ "BufWritePre" }, { pattern = "*.go", callback = function() local params = vim.lsp.util.make_range_params(nil, vim.lsp.util._get_offset_encoding()) params.context = { only = { "source.organizeImports" } } local result = vim.lsp.buf_request_sync(0, "textDocument/codeAction", params, 3000) for _, res in pairs(result or {}) do for _, r in pairs(res.result or {}) do if r.edit then vim.lsp.util.apply_workspace_edit(r.edit, vim.lsp.util._get_offset_encoding()) else vim.lsp.buf.execute_command(r.command) end end end end, }) vim.api.nvim_create_autocmd({ "BufWritePre" }, { pattern = "*.go", callback = function() vim.lsp.buf.format(nil, 3000) end, }) local TrimWhiteSpaceGrp = vim.api.nvim_create_augroup("TrimWhiteSpaceGrp", {}) vim.api.nvim_create_autocmd("BufWritePre", { group = TrimWhiteSpaceGrp, pattern = "*", command = "%s/\\s\\+$//e", }) local YankHighlightGrp = vim.api.nvim_create_augroup("YankHighlightGrp", {}) vim.api.nvim_create_autocmd("TextYankPost", { group = YankHighlightGrp, pattern = "*", callback = function() vim.highlight.on_yank({ higroup = "IncSearch", timeout = 40, }) end, }) vim.api.nvim_create_autocmd({ "BufReadPost", "FileReadPost" }, { pattern = "*", callback = function() vim.cmd("normal! zR") end, }) vim.api.nvim_create_autocmd("BufEnter", { callback = function() if vim.bo.filetype == "NvimTree" or vim.fn.expand("%") == "" then return end vim.schedule(function() local treeapi = require("nvim-tree.api") treeapi.tree.find_file({ update_root = false, focus = false, }) end) end, }) vim.api.nvim_create_autocmd({ "BufWritePost" }, { pattern = "*.templ", callback = function() local cmd = "templ generate" async_cmd(cmd) end, }) -- Автоматический вход в insert mode при открытии терминала vim.api.nvim_create_autocmd({ "BufWinEnter", "WinEnter" }, { pattern = "term://*", callback = function() vim.cmd("startinsert") end, }) -- Автоматический выход из insert mode при уходе с терминала vim.api.nvim_create_autocmd("BufLeave", { pattern = "term://*", callback = function() vim.cmd("stopinsert") end, }) vim.api.nvim_create_autocmd({ "BufReadPost", "BufWinEnter", "WinEnter" }, { pattern = "*", callback = function(args) -- Проверяем, что это не терминальный буфер if not vim.startswith(vim.api.nvim_buf_get_name(args.buf), "term://") then vim.cmd("normal zR") -- Развернуть все складки end end, }) -- vim.api.nvim_create_autocmd("InsertEnter", { -- pattern = "*", -- command = "set norelativenumber", -- }) -- -- vim.api.nvim_create_autocmd("InsertLeave", { -- pattern = "*", -- command = "set relativenumber", -- })