生活随笔
收集整理的這篇文章主要介紹了
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í)際情況修改保存路徑:
mkdir -p ~/.local/share/nvim/lsp/jdt-language-server/workspace
cd ~/.local/share/nvim/lsp/jdt-language-server
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
export JDTLS_HOME
=$HOME/.local/share/nvim/lsp/jdt-language-server/
export WORKSPACE
=$HOME/.local/share/nvim/lsp/jdt-language-server/workspace/
export JAVA_HOME
=$HOME/.jdks/corretto-11.0.14.1/
export PATH
=$JAVA_HOME/bin:
$PATH:.
在你的lua配置中增加以下一行配置:
require
'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)容如下,僅大家參考:
local nvim_lsp
= require("lspconfig")
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
, ...)endbuf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc")local opts
= {noremap
= true, silent
= true}buf_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", "gi", "<cmd>lua vim.lsp.buf.implementation()<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
)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", "<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
)if client
.resolved_capabilities
.document_formatting
thenvim
.api
.nvim_command
[[autocmd BufWritePre <buffer> lua vim.lsp.buf.formatting_seq_sync()]]end
end
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ò),歡迎將生活随笔推薦給好友。