-- NOTE: Java specific keymaps with which key vim.cmd( "command! -buffer -nargs=? -complete=custom,v:lua.require'jdtls'._complete_compile JdtCompile lua require('jdtls').compile()" ) vim.cmd( "command! -buffer -nargs=? -complete=custom,v:lua.require'jdtls'._complete_set_runtime JdtSetRuntime lua require('jdtls').set_runtime()" ) vim.cmd("command! -buffer JdtUpdateConfig lua require('jdtls').update_project_config()") vim.cmd("command! -buffer JdtJol lua require('jdtls').jol()") vim.cmd("command! -buffer JdtBytecode lua require('jdtls').javap()") vim.cmd("command! -buffer JdtJshell lua require('jdtls').jshell()") local status_ok, which_key = pcall(require, "which-key") if not status_ok then return end local opts = { mode = "n", -- NORMAL mode prefix = "", buffer = nil, -- Global mappings. Specify a buffer number for buffer local mappings silent = true, -- use `silent` when creating keymaps noremap = true, -- use `noremap` when creating keymaps nowait = true, -- use `nowait` when creating keymaps } local vopts = { mode = "v", -- VISUAL mode prefix = "", buffer = nil, -- Global mappings. Specify a buffer number for buffer local mappings silent = true, -- use `silent` when creating keymaps noremap = true, -- use `noremap` when creating keymaps nowait = true, -- use `nowait` when creating keymaps } local mappings = { J = { name = "Java", o = { "lua require'jdtls'.organize_imports()", "Organize Imports" }, v = { "lua require('jdtls').extract_variable()", "Extract Variable" }, c = { "lua require('jdtls').extract_constant()", "Extract Constant" }, t = { "lua require'jdtls'.test_nearest_method()", "Test Method" }, T = { "lua require'jdtls'.test_class()", "Test Class" }, u = { "JdtUpdateConfig", "Update Config" }, }, } local vmappings = { J = { name = "Java", v = { "lua require('jdtls').extract_variable(true)", "Extract Variable" }, c = { "lua require('jdtls').extract_constant(true)", "Extract Constant" }, m = { "lua require('jdtls').extract_method(true)", "Extract Method" }, }, } which_key.register(mappings, opts) which_key.register(vmappings, vopts) -- If you want you can add here Old School Mappings. Me I setup Telescope, LSP and Lspsaga mapping somewhere else and I just reuse them -- vim.keymap.set("gI", vim.lsp.buf.implementation,{ desc = "[G]oto [I]mplementation" }) -- vim.keymap.set("D", vim.lsp.buf.type_definition,{ desc = "Type [D]definition" }) -- vim.keymap.set("hh", vim.lsp.buf.signature_help,{ desc = "Signature [H][H]elp Documentation" }) -- vim.keymap.set("gD", vim.lsp.buf.declaration,{ desc = "[G]oto [D]eclaration" }) -- vim.keymap.set("wa", vim.lsp.buf.add_workspace_folder,{ desc = "[W]orkspace [A]dd Folder" }) -- vim.keymap.set("wr", vim.lsp.buf.remove_workspace_folder,{ desc = "[W]orkspace [R]emove Folder" }) -- vim.keymap.set("wl", function() -- print(vim.inspect(vim.lsp.buf.list_workspace_folders())) -- end, "[W]orkspace [L]ist Folders") -- Create a command `:Format` local to the LSP buffer -- vim.api.nvim_buf_create_user_command(bufnr, "Format", function(_) -- vim.lsp.buf.format() -- end, { desc = "Format current buffer with LSP" }) -- vim.keymap.set("n", "gr", vim.lsp.buf.references, { desc = "[G]oto [R]eferences - Java", expr = true, silent = true }) vim.keymap.set("n", "gr", require("telescope.builtin").lsp_references, { desc = "[G]oto [R]eferences" }) vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "" }) vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "" }) vim.keymap.set('n', 'K', vim.lsp.buf.hover, { desc = "" }) vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, { desc = "" }) vim.keymap.set('n', '', vim.lsp.buf.signature_help, { desc = "" }) vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, { desc = "" }) vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, { desc = "" }) vim.keymap.set('n', 'wl', print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', { desc = "" }) vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, { desc = "" }) vim.keymap.set('n', 'rn', vim.lsp.buf.rename, { desc = "" }) vim.keymap.set('n', 'gr', vim.lsp.buf.references() && vim.cmd("copen")', { desc = "" }) vim.keymap.set('n', 'e', vim.lsp.diagnostic.show_line_diagnostics, { desc = "" }) vim.keymap.set('n', '[d', vim.lsp.diagnostic.goto_prev, { desc = "" }) vim.keymap.set('n', ']d', vim.lsp.diagnostic.goto_next, { desc = "" }) vim.keymap.set('n', 'q', vim.lsp.diagnostic.set_loclist, { desc = "" }) -- Java specific vim.keymap.set("n", "di", "lua require'jdtls'.organize_imports()", { desc = "" }) vim.keymap.set("n", "dt", "lua require'jdtls'.test_class()", { desc = "" }) vim.keymap.set("n", "dn", "lua require'jdtls'.test_nearest_method()", { desc = "" }) vim.keymap.set("v", "de", "lua require('jdtls').extract_variable(true)", { desc = "" }) vim.keymap.set("n", "de", "lua require('jdtls').extract_variable()", { desc = "" }) vim.keymap.set("v", "dm", "lua require('jdtls').extract_method(true)", { desc = "" }) vim.keymap.set("n", "cf", "lua vim.lsp.buf.formatting()", { desc = "" })