return function(buffer) local nmap = require("core.utils").createNmap({ buffer = buffer, desc = 'LSP: ', }) nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame') nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction') nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition') nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') -- See `:help K` for why this keymap nmap('M', vim.lsp.buf.hover, 'Hover Documentation') nmap('<C-m>', vim.lsp.buf.signature_help, 'Signature Documentation') -- Lesser used LSP functionality nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') nmap('<leader>wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, '[W]orkspace [L]ist Folders') local function peekAtFold() local winid = require("ufo").peekFoldedLinesUnderCursor() if not winid then vim.lsp.buf.hover() end end -- nvim-ufo mappings nmap("zR", require("ufo").openAllFolds, "Open All Folds") nmap("zM", require("ufo").closeAllFolds, "Close All Folds") nmap("zj", peekAtFold, "Peek At Current Fold") end