dotfiles/nvim/lua/autocommands.lua

136 lines
3.3 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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",
-- })