-- Yank Hightlight local highlight_group = vim.api.nvim_create_augroup("YankHighlight", { clear = true }) vim.api.nvim_create_autocmd("TextYankPost", { callback = function() vim.highlight.on_yank() end, group = highlight_group, pattern = "*", }) -- Text Conceal local conceal_group = vim.api.nvim_create_augroup("conceal", { clear = true }) vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, { group = conceal_group, pattern = { "*.md", "*.json", "*.norg" }, callback = function() vim.opt.conceallevel = 3 end, }) vim.api.nvim_create_autocmd({ "BufLeave", "BufWinLeave" }, { group = conceal_group, pattern = { "*.md", "*.json", "*.norg" }, callback = function() vim.opt.conceallevel = 0 end, }) -- Remember cursor position vim.api.nvim_create_autocmd("BufRead", { callback = function(opts) vim.api.nvim_create_autocmd("BufWinEnter", { once = true, buffer = opts.buf, callback = function() local ft = vim.bo[opts.buf].filetype local last_known_line = vim.api.nvim_buf_get_mark(opts.buf, '"')[1] if not (ft:match("commit") and ft:match("rebase")) and last_known_line > 1 and last_known_line <= vim.api.nvim_buf_line_count(opts.buf) then vim.api.nvim_feedkeys([[g`"]], "nx", false) end end, }) end, }) -- LSP Attach local lsp_attach_augroup = vim.api.nvim_create_augroup("lsp_attach", { clear = true }) vim.api.nvim_create_autocmd("LspAttach", { group = lsp_attach_augroup, callback = function(ev) local client = vim.lsp.get_client_by_id(ev.data.client_id) if not client then return end if client.server_capabilities.inlayHintProvider then vim.lsp.inlay_hint.enable(ev.buf, true) end -- Enable completion triggered by vim.bo[ev.buf].omnifunc = "v:lua.vim.lsp.omnifunc" -- Buffer local mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Goto Declaration" }) vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Goto Defninition" }) vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Goto Implementation" }) vim.keymap.set("n", "gtd", vim.lsp.buf.type_definition, { desc = "Show Type Definition" }) vim.keymap.set("n", "gr", vim.lsp.buf.references, { desc = "Goto References" }) vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover" }) vim.keymap.set("n", "rn", vim.lsp.buf.rename, { desc = "Rename" }) vim.keymap.set({ "n", "v" }, "ca", vim.lsp.buf.code_action, { desc = "Code action" }) vim.keymap.set("n", "fm", function() vim.lsp.buf.format({ async = true }) end, { desc = "Format Code" }) end, }) local cargo_toml_augroup = vim.api.nvim_create_augroup("cargo_toml", { clear = true }) vim.api.nvim_create_autocmd({"BufEnter"}, { group = cargo_toml_augroup, pattern = { "Cargo.toml" }, callback = function() local crates = require("crates") require("which-key").register({ ["C"] = { name = "Crate", _ = "which_key_ignore" }, }) crates.setup({ null_ls = { enabled = false, name = "Crates", }, }) local opts = function(opts) return vim.tbl_deep_extend("force", { silent = true }, opts) end vim.keymap.set("n", "Ct", crates.toggle, opts({ desc = "Crate toggle" })) vim.keymap.set("n", "Cr", crates.reload, opts({ desc = "Crate reload" })) vim.keymap.set("n", "Cv", crates.show_versions_popup, opts({ desc = "Show version popup" })) vim.keymap.set("n", "Cf", crates.show_features_popup, opts({ desc = "Show features popup" })) vim.keymap.set("n", "Cd", crates.show_dependencies_popup, opts({ desc = "Show dependencies popup" })) vim.keymap.set("n", "Cu", crates.update_crate, opts({ desc = "Update crate" })) vim.keymap.set("v", "Cu", crates.update_crates, opts({ desc = "Update Crates" })) vim.keymap.set("n", "Cp", crates.update_all_crates, opts({ desc = "Update all crates" })) vim.keymap.set("n", "CU", crates.upgrade_crate, opts({ desc = "Upgrade crate" })) vim.keymap.set("v", "CU", crates.upgrade_crates, opts({ desc = "Upgrade crate" })) vim.keymap.set("n", "CP", crates.upgrade_all_crates, opts({ desc = "Upgrade all crates" })) vim.keymap.set( "n", "Cx", crates.expand_plain_crate_to_inline_table, opts({ desc = "Expand plain crate into inline table" }) ) vim.keymap.set("n", "CX", crates.extract_crate_into_table, opts({ desc = "Extract crate into table" })) vim.keymap.set("n", "CH", crates.open_homepage, opts({ desc = "Open homepage" })) vim.keymap.set("n", "CR", crates.open_repository, opts({ desc = "Open repository" })) vim.keymap.set("n", "CD", crates.open_documentation, opts({ desc = "Open documentation" })) vim.keymap.set("n", "CC", crates.open_crates_io, opts({ desc = "Open crates.io" })) end, })