133 lines
5.5 KiB
Lua
133 lines
5.5 KiB
Lua
-- 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 <c-x><c-o>
|
|
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", "<leader>rn", vim.lsp.buf.rename, { desc = "Rename" })
|
|
vim.keymap.set({ "n", "v" }, "<leader>ca", vim.lsp.buf.code_action, { desc = "Code action" })
|
|
vim.keymap.set("n", "<leader>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({
|
|
["<leader>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", "<leader>Ct", crates.toggle, opts({ desc = "Crate toggle" }))
|
|
vim.keymap.set("n", "<leader>Cr", crates.reload, opts({ desc = "Crate reload" }))
|
|
|
|
vim.keymap.set("n", "<leader>Cv", crates.show_versions_popup, opts({ desc = "Show version popup" }))
|
|
vim.keymap.set("n", "<leader>Cf", crates.show_features_popup, opts({ desc = "Show features popup" }))
|
|
vim.keymap.set("n", "<leader>Cd", crates.show_dependencies_popup, opts({ desc = "Show dependencies popup" }))
|
|
|
|
vim.keymap.set("n", "<leader>Cu", crates.update_crate, opts({ desc = "Update crate" }))
|
|
vim.keymap.set("v", "<leader>Cu", crates.update_crates, opts({ desc = "Update Crates" }))
|
|
vim.keymap.set("n", "<leader>Cp", crates.update_all_crates, opts({ desc = "Update all crates" }))
|
|
vim.keymap.set("n", "<leader>CU", crates.upgrade_crate, opts({ desc = "Upgrade crate" }))
|
|
vim.keymap.set("v", "<leader>CU", crates.upgrade_crates, opts({ desc = "Upgrade crate" }))
|
|
vim.keymap.set("n", "<leader>CP", crates.upgrade_all_crates, opts({ desc = "Upgrade all crates" }))
|
|
|
|
vim.keymap.set(
|
|
"n",
|
|
"<leader>Cx",
|
|
crates.expand_plain_crate_to_inline_table,
|
|
opts({ desc = "Expand plain crate into inline table" })
|
|
)
|
|
vim.keymap.set("n", "<leader>CX", crates.extract_crate_into_table, opts({ desc = "Extract crate into table" }))
|
|
|
|
vim.keymap.set("n", "<leader>CH", crates.open_homepage, opts({ desc = "Open homepage" }))
|
|
vim.keymap.set("n", "<leader>CR", crates.open_repository, opts({ desc = "Open repository" }))
|
|
vim.keymap.set("n", "<leader>CD", crates.open_documentation, opts({ desc = "Open documentation" }))
|
|
vim.keymap.set("n", "<leader>CC", crates.open_crates_io, opts({ desc = "Open crates.io" }))
|
|
end,
|
|
})
|