Kombinasi NVIM + Telescope + JDTLS
Akhir-akhir aku resah karena Notepad++ terlalu berat dan begitu juga VSCodium (Open Source dari Visual Studio Code).
Jadi aku menggunakan NeoVIM dengan kombinasi berikut:
- telescope untuk mencari file (akan muncul semacam explorer di mana bisa memilih serta preview berkas;
- jdtls sehingga bisa mencari implementasi file
Yang pertama tentunya dengan menginstall Neovim:
https://neovim.io/
Setelah itu install lazy, semacam package manager untuk neovim.
Untuk Telescope
- Ripgrep (mirip grep)
- Sharkdp FD (alternative find)
- lua
Di folder %LOCALAPPDATA% (alias Local Settings\Application Data) akan ada dua folder:
- nvim (ini konfigurasi nvim)
- nvim-data
Di folder nvim ada:
./init.lua ./lua ./lua/java.lua
Saat ini isi init.lua :
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
error("lazy.nvim belum terinstall")
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
{
"nvim-telescope/telescope.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
},
{
"neovim/nvim-lspconfig",
},
{
"mfussenegger/nvim-jdtls",
},
},
})
require("telescope").setup()
local builtin = require("telescope.builtin")
vim.keymap.set("n", "<leader>ff", builtin.find_files)
vim.keymap.set("n", "<leader>fg", builtin.live_grep)
vim.keymap.set("n", "<leader>fb", builtin.buffers)
vim.keymap.set("n", "<leader>fh", builtin.help_tags)
vim.api.nvim_create_autocmd("FileType", {
pattern = "java",
callback = function()
require("java")
end,
})
Sementara isi lua/java.lua berisi hal yang hanya untuk java
local jdtls = require("jdtls")
local home = os.getenv("USERPROFILE")
local root_markers = {
".git",
"mvnw",
"gradlew",
"pom.xml",
"build.gradle",
}
local root_dir = require("jdtls.setup").find_root(root_markers)
if root_dir == "" then
vim.notify("Root project tidak ditemukan")
return
end
local workspace_dir =
home .. "\\jdtls-workspace\\" .. vim.fn.fnamemodify(root_dir, ":p:h:t")
local config = {
cmd = {
"java",
"-Declipse.application=org.eclipse.jdt.ls.core.id1",
"-Dosgi.bundles.defaultStartLevel=4",
"-Declipse.product=org.eclipse.jdt.ls.core.product",
"-Dlog.protocol=true",
"-Dlog.level=WARN",
"-Xms1g",
"--add-modules=ALL-SYSTEM",
"--add-opens", "java.base/java.util=ALL-UNNAMED",
"--add-opens", "java.base/java.lang=ALL-UNNAMED",
"-jar",
"C:\\Tools\\jdtls\\plugins\\org.eclipse.equinox.launcher_1.6.900.v20240613-2009.jar",
"-configuration",
"C:\\Tools\\jdtls\\config_win",
"-data",
workspace_dir,
},
root_dir = root_dir,
}
print(vim.inspect(config.cmd))
print("root_dir = " .. tostring(root_dir))
print("workspace = " .. workspace_dir)
jdtls.start_or_attach(config)
local opts = { buffer = 0 }
vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts)
vim.keymap.set("n", "gr", vim.lsp.buf.references, opts)
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, opts)
vim.keymap.set("n", "K", vim.lsp.buf.hover, opts)
vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts)
Jadi sekarang jika ada kebutuhan edit file khusus, saya lebih sering pakai nvim.
Berikut contoh cara install. Sekedar catatan, langkah berikut dibuat oleh ChatGPT tanpa saya verifikasi ulang
1. Install Neovim
Download:
https://github.com/neovim/neovim/releases
Pastikan nvim.exe sudah berada di PATH.
Verifikasi:
nvim --version
2. Install Git
Lazy.nvim memerlukan Git.
git --version
3. Install ripgrep
Download:
https://github.com/BurntSushi/ripgrep/releases
Tambahkan ke PATH.
Verifikasi:
rg --version
4. Install fd
Download:
https://github.com/sharkdp/fd/releases
Tambahkan ke PATH.
Verifikasi:
fd --version
5. Install Java
Gunakan JDK 21 atau lebih baru.
Verifikasi:
java -version javac -version
6. Install Lazy.nvim
Clone ke direktori standar Neovim.
git clone https://github.com/folke/lazy.nvim `
"$env:LOCALAPPDATA\nvim-data\lazy\lazy.nvim"
7. Struktur konfigurasi
AppData
└── Local
└── nvim
│ init.lua
└── lua
├── config
└── plugins
8. init.lua
Tambahkan bootstrap Lazy.
vim.g.mapleader = " "
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
vim.opt.rtp:prepend(lazypath)
require("lazy").setup("plugins")
9. Install Telescope
lua/plugins/telescope.lua
return {
"nvim-telescope/telescope.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
},
}
Sync plugin.
:Lazy sync
10. Shortcut Telescope
Misalnya:
vim.keymap.set("n", "<leader>ff",
"<cmd>Telescope find_files<CR>")
vim.keymap.set("n", "<leader>fg",
"<cmd>Telescope live_grep<CR>")
11. Install Eclipse JDTLS
Download dari:
https://download.eclipse.org/jdtls/snapshots/
Misalnya diekstrak ke:
C:\Tools\jdtls
Pastikan terdapat:
plugins\ config_win\
12. Install nvim-jdtls
Tambahkan plugin.
return {
"mfussenegger/nvim-jdtls",
}
Lalu:
:Lazy sync
13. Konfigurasi java.lua
Buat:
lua/java.lua
Contoh penting:
local jdtls = require("jdtls")
local root = vim.fs.root(0, {
".git",
"pom.xml",
"gradlew",
})
local workspace =
vim.fn.expand("~/jdtls-workspace/")
.. vim.fn.fnamemodify(root, ":t")
local launcher =
vim.fn.glob(
"C:/Tools/jdtls/plugins/org.eclipse.equinox.launcher_*.jar"
)
local config = {
cmd = {
"java",
"-Declipse.application=org.eclipse.jdt.ls.core.id1",
"-Declipse.product=org.eclipse.jdt.ls.core.product",
"-Dosgi.bundles.defaultStartLevel=4",
"-Dlog.protocol=true",
"-Dlog.level=WARN",
"-Xms1g",
"--add-modules=ALL-SYSTEM",
"--add-opens",
"java.base/java.util=ALL-UNNAMED",
"--add-opens",
"java.base/java.lang=ALL-UNNAMED",
"-jar",
launcher,
"-configuration",
"C:/Tools/jdtls/config_win",
"-data",
workspace,
},
root_dir = root,
}
jdtls.start_or_attach(config)
14. Load otomatis
Di init.lua
vim.api.nvim_create_autocmd("FileType", {
pattern = "java",
callback = function()
require("java")
end,
})
15. Keymap LSP
vim.keymap.set("n", "gd", vim.lsp.buf.definition)
vim.keymap.set("n", "gi", vim.lsp.buf.implementation)
vim.keymap.set("n", "gr", vim.lsp.buf.references)
vim.keymap.set("n", "grn", vim.lsp.buf.rename)
vim.keymap.set("n", "gra", vim.lsp.buf.code_action)
16. Memeriksa status LSP
:checkhealth vim.lsp
Harus muncul:
Active Clients jdtls
17. Shortcut yang berguna
| Shortcut | Fungsi |
|---|---|
gd | Go to Definition |
gi | Go to Implementation |
gr | Find References |
grn | Rename Symbol |
gra | Code Action |
<leader>ff | Telescope Find Files |
<leader>fg | Live Grep |
Ctrl-o | Kembali ke lokasi sebelumnya |
Ctrl-i | Maju lagi |
18. Troubleshooting
Jika JDTLS tidak berjalan:
- pastikan
java -versionbenar - pastikan
org.eclipse.equinox.launcher_*.jarditemukan - pastikan
config_winbenar - cek:
:checkhealth vim.lsp
- lihat log:
C:\Users\<user>\AppData\Local\nvim-data\lsp.log
Dengan konfigurasi ini, Neovim sudah siap digunakan sebagai IDE Java yang ringan namun kaya fitur, dengan navigasi kode melalui JDTLS, pencarian file menggunakan Telescope, dan manajemen plugin melalui Lazy.nvim.
0 comments:
Post a Comment