126 lines
3 KiB
Lua
126 lines
3 KiB
Lua
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("InsertEnter", {
|
||
-- pattern = "*",
|
||
-- command = "set norelativenumber",
|
||
-- })
|
||
--
|
||
-- vim.api.nvim_create_autocmd("InsertLeave", {
|
||
-- pattern = "*",
|
||
-- command = "set relativenumber",
|
||
-- })
|