require("mimu.set") require("mimu.remap") require("mimu.lazy") local augroup = vim.api.nvim_create_augroup local MimuGroup = augroup("mimu", {}) local autocmd = vim.api.nvim_create_autocmd vim.cmd [[autocmd BufWritePre * lua vim.lsp.buf.format()]] autocmd("LspAttach", { group = MimuGroup, callback = function(e) local opts = { buffer = e.buf } vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts) vim.keymap.set("n", "gr", function() vim.lsp.buf.references() end, opts) vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts) vim.keymap.set("n", "vws", function() vim.lsp.buf.workspace_symbol() end, opts) vim.keymap.set("n", "vd", function() vim.lsp.diagnostic.open_float() end, opts) -- vim.keymap.set("n", "[d", function() vim.lsp.diagnostic.goto_next() end, opts) -- vim.keymap.set("n", "]d", function() vim.lsp.diagnostic.goto_prev() end, opts) vim.keymap.set("n", "vca", function() vim.lsp.buf.code_action() end, opts) vim.keymap.set("n", "vrn", function() vim.lsp.buf.rename() end, opts) vim.keymap.set("i", "", function() vim.lsp.buf.signature_help() end, opts) end }) autocmd("BufWritePre", { pattern = "*.go", callback = function() local params = vim.lsp.util.make_range_params() params.context = { only = { "source.organizeImports" } } -- buf_request_sync defaults to a 1000ms timeout. Depending on your -- machine and codebase, you may want longer. Add an additional -- argument after params if you find that you have to write the file -- twice for changes to be saved. -- E.g., vim.lsp.buf_request_sync(0, "textDocument/codeAction", params, 3000) local result = vim.lsp.buf_request_sync(0, "textDocument/codeAction", params) for cid, res in pairs(result or {}) do for _, r in pairs(res.result or {}) do if r.edit then local enc = (vim.lsp.get_client_by_id(cid) or {}).offset_encoding or "utf-16" vim.lsp.util.apply_workspace_edit(r.edit, enc) end end end vim.lsp.buf.format({ async = false }) end })