local home = os.getenv('HOME') local root_markers = {'gradlew', 'mvnw', '.git'} local root_dir = require('jdtls.setup').find_root(root_markers) local workspace_folder = home .. "/.local/share/eclipse/" .. vim.fn.fnamemodify(root_dir, ":p:h:t") local jdtls = require('jdtls') local function nnoremap(rhs, lhs, bufopts, desc) bufopts.desc = desc vim.keymap.set("n", rhs, lhs, bufopts) end local on_attach = function(_, bufnr) -- Regular Neovim LSP client keymappings local bufopts = { noremap=true, silent=true, buffer=bufnr } nnoremap('gD', vim.lsp.buf.declaration, bufopts, "Go to declaration") nnoremap('gd', vim.lsp.buf.definition, bufopts, "Go to definition") nnoremap('gi', vim.lsp.buf.implementation, bufopts, "Go to implementation") nnoremap('K', vim.lsp.buf.hover, bufopts, "Hover text") nnoremap('', vim.lsp.buf.signature_help, bufopts, "Show signature") nnoremap('wa', vim.lsp.buf.add_workspace_folder, bufopts, "Add workspace folder") nnoremap('wr', vim.lsp.buf.remove_workspace_folder, bufopts, "Remove workspace folder") nnoremap('wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, bufopts, "List workspace folders") nnoremap('D', vim.lsp.buf.type_definition, bufopts, "Go to type definition") nnoremap('rn', vim.lsp.buf.rename, bufopts, "Rename") nnoremap('', vim.lsp.buf.code_action, bufopts, "Code actions") vim.keymap.set('v', "", "lua vim.lsp.buf.range_code_action()", { noremap=true, silent=true, buffer=bufnr, desc = "Code actions" }) nnoremap('f', function() vim.lsp.buf.format { async = true } end, bufopts, "Format file") -- Java extensions provided by jdtls nnoremap("i", jdtls.organize_imports, bufopts, "Organize imports") nnoremap("ev", jdtls.extract_variable, bufopts, "Extract variable") nnoremap("ec", jdtls.extract_constant, bufopts, "Extract constant") vim.keymap.set('v', "em", [[lua require('jdtls').extract_method(true)]], { noremap=true, silent=true, buffer=bufnr, desc = "Extract method" }) end local config = { flags = { debounce_text_changes = 80, }, cmd = { 'jdtls', '-Dlog.protocol=true', '-Dlog.level=ALL', '-Xms4g', '-data', workspace_folder, }, on_attach = on_attach, root_dir = root_dir, } require('jdtls').start_or_attach(config) vim.keymap.set("n", "t", "s/\\(\\s*\\)\\(.*\\)/\\1System.out.println(\\2);") vim.keymap.set("i", "t", "s/\\(\\s*\\)\\(.*\\)/\\1System.out.println(\\2);A") vim.keymap.set("n", "i", "s/\\(\\s*\\)\\(.*\\)/\\1System.out.println(\"\\2: \" + \\2);") vim.keymap.set("i", "i", "s/\\(\\s*\\)\\(.*\\)/\\1System.out.println(\"\\2: \" + \\2);A")