日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

neovim内置lsp实现Java语言补全

發(fā)布時(shí)間:2023/12/14 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 neovim内置lsp实现Java语言补全 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


文章目錄

  • 通用方式自動(dòng)化配置Java LSP
  • 手動(dòng)配置
    • JDK版本選擇
    • 配置
      • 解壓jdt-language-server
      • 配置環(huán)境變量
    • 我的配置分享
  • neovim使用nvim-jdtls搭建Java IDE

通用方式自動(dòng)化配置Java LSP

可以使用以下插件自動(dòng)化配置。推薦新手使用這個(gè)方法。
https://github.com/williamboman/nvim-lsp-installer
這個(gè)方式簡(jiǎn)單方便,適應(yīng)于大部分朋友。

這個(gè)方便可以參考《09_[nvim0.5+從0單排]_nvim內(nèi)置lsp搭建python IDE》
https://blog.csdn.net/lxyoucan/article/details/120708396
本文就不重點(diǎn)介紹了。比起傻瓜式的配置,有不少朋友喜歡手動(dòng)配置,畢竟這樣更有挑戰(zhàn),更干凈。

手動(dòng)配置

手動(dòng)配置的話,有兩個(gè)lsp可供選擇:

  • https://github.com/georgewfraser/java-language-server
  • https://projects.eclipse.org/projects/eclipse.jdt.ls

兩種方式都行,我選擇的是eclipse.jdt.ls,為什么選這個(gè)。其實(shí)我沒(méi)有去進(jìn)行對(duì)比,只是主觀的感覺(jué)eclipse畢竟深耕多年,感覺(jué)更可靠的感覺(jué)。感覺(jué)以前我使用coc的時(shí)候也用的是eclipse.jdt.ls

那么我們主要就是參考這篇文檔來(lái)手動(dòng)配置:
https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#jdtls

JDK版本選擇

這里有一個(gè)小坑,就是JDK的版本要選擇JDK11及以上版本才行。因?yàn)榫湍壳皝?lái)看,JDK8使用的概率還是非常高的。

如果你使用JDK8,使用java文件會(huì)報(bào)如下的錯(cuò)誤:
Client 1 quit with exit code 1 and signal 0

推薦使用JDK11,因?yàn)槲覍?shí)測(cè)JDK11是正常使用的,其他版本的JDK我沒(méi)有一一測(cè)試。
我的版本信息如下:

java -version java version "11.0.10" 2021-01-19 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.10+8-LTS-162) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.10+8-LTS-162, mixed mode)

配置

解壓jdt-language-server

下載jdt-language-server
不同版本下載導(dǎo)航
https://download.eclipse.org/jdtls/milestones/?d
我最終下載的版本是:

https://download.eclipse.org/jdtls/milestones/1.9.0/jdt-language-server-1.9.0-202203031534.tar.gz

以下我的路徑是個(gè)人喜好,可以根據(jù)自己的實(shí)際情況修改保存路徑:

#創(chuàng)建workspace目錄,后面會(huì)用到 mkdir -p ~/.local/share/nvim/lsp/jdt-language-server/workspace cd ~/.local/share/nvim/lsp/jdt-language-server # 下載jdt-language-server-xxxxx.tar.gz wget https://download.eclipse.org/jdtls/milestones/1.9.0/jdt-language-server-1.9.0-202203031534.tar.gz # 解壓 tar -zxvf jdt-language-server-1.9.0-202203031534.tar.gz

我的目錄結(jié)構(gòu)如下圖所示

配置環(huán)境變量

修改你的環(huán)境變量配置文件,bash的配置文件是nvim ~/.bashrc
如果你用的是zsh則nvim ~/.zshrc

#Java LSP # 必須配置的: export JDTLS_HOME=$HOME/.local/share/nvim/lsp/jdt-language-server/ # 包含 plugin 和 configs 的目錄,由jdt-language-server-xxx.tar.gz解壓出的 # 可選的 export WORKSPACE=$HOME/.local/share/nvim/lsp/jdt-language-server/workspace/ # 不設(shè)置則默認(rèn)是$HOME/workspace export JAVA_HOME=$HOME/.jdks/corretto-11.0.14.1/ #JDK的主目錄,建議使用JDK11,使用JDK8會(huì)報(bào)錯(cuò) export PATH=$JAVA_HOME/bin:$PATH:.

在你的lua配置中增加以下一行配置:

-- init.luarequire'lspconfig'.jdtls.setup{}

至此Java語(yǔ)言補(bǔ)全已經(jīng)成功配置完成了,是不是挺簡(jiǎn)單的。

打開(kāi)項(xiàng)目在狀態(tài)欄中會(huì)顯示lsp server的加載狀態(tài),稍等片刻等它加載完成了,我們就可以語(yǔ)法提示啦。

語(yǔ)法檢查也沒(méi)有問(wèn)題的。

至此最基本的配置就結(jié)束了。


我的配置分享

每個(gè)人的使用習(xí)慣都不相同,我把常用的快捷鍵進(jìn)行了映射,供大家參考。

  • <space>rn變量重命名
  • <leader>f代碼格式化
  • 保存自動(dòng)格式化
    等等。

我的配置文件:~/.config/nvim/lua/lspconf/java.lua
全部?jī)?nèi)容如下,僅大家參考:

-- init.lua local nvim_lsp = require("lspconfig") -- 在語(yǔ)言服務(wù)器附加到當(dāng)前緩沖區(qū)之后 -- 使用 on_attach 函數(shù)僅映射以下鍵 Itkey_on_attach = function(client, bufnr)local function buf_set_keymap(...)vim.api.nvim_buf_set_keymap(bufnr, ...)endlocal function buf_set_option(...)vim.api.nvim_buf_set_option(bufnr, ...)end--Enable completion triggered by <c-x><c-o>buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc")-- Mappings.local opts = {noremap = true, silent = true}-- See `:help vim.lsp.*` for documentation on any of the below functionsbuf_set_keymap("n", "gD", "<Cmd>lua vim.lsp.buf.declaration()<CR>", opts)buf_set_keymap("n", "gd", "<Cmd>lua vim.lsp.buf.definition()<CR>", opts)--buf_set_keymap('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts)buf_set_keymap("n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)--buf_set_keymap('i', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)buf_set_keymap("n", "<space>wa", "<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>", opts)buf_set_keymap("n", "<space>wr", "<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>", opts)buf_set_keymap("n", "<space>wl", "<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>", opts)buf_set_keymap("n", "<space>D", "<cmd>lua vim.lsp.buf.type_definition()<CR>", opts)--重命名buf_set_keymap("n", "<space>rn", "<cmd>lua vim.lsp.buf.rename()<CR>", opts)--智能提醒,比如:自動(dòng)導(dǎo)包 已經(jīng)用lspsaga里的功能替換了--buf_set_keymap('n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)buf_set_keymap("n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)buf_set_keymap("n", "<space>e", "<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>", opts)--buf_set_keymap('n', '<C-j>', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)buf_set_keymap("n", "<S-C-j>", "<cmd>lua vim.lsp.diagnostic.goto_next()<CR>", opts)buf_set_keymap("n", "<space>q", "<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>", opts)buf_set_keymap("n", "<leader>f", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts)-- 代碼保存自動(dòng)格式化formattingif client.resolved_capabilities.document_formatting thenvim.api.nvim_command [[autocmd BufWritePre <buffer> lua vim.lsp.buf.formatting_seq_sync()]]end end-- Add additional capabilities supported by nvim-cmp local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities.textDocument.completion.completionItem.documentationFormat = {"markdown", "plaintext"} capabilities.textDocument.completion.completionItem.snippetSupport = true capabilities.textDocument.completion.completionItem.preselectSupport = true capabilities.textDocument.completion.completionItem.insertReplaceSupport = true capabilities.textDocument.completion.completionItem.labelDetailsSupport = true capabilities.textDocument.completion.completionItem.deprecatedSupport = true capabilities.textDocument.completion.completionItem.commitCharactersSupport = true capabilities.textDocument.completion.completionItem.tagSupport = {valueSet = {1}} capabilities.textDocument.completion.completionItem.resolveSupport = {properties = {"documentation","detail","additionalTextEdits"} } Itkey_capabilities = capabilitiesrequire "lspconfig".jdtls.setup {on_attach = Itkey_on_attach,capabilities = Itkey_capabilities }

neovim使用nvim-jdtls搭建Java IDE

https://blog.csdn.net/lxyoucan/article/details/123448313

總結(jié)

以上是生活随笔為你收集整理的neovim内置lsp实现Java语言补全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。