生活随笔
收集整理的這篇文章主要介紹了
neovim内置lsp实现Java语言补全
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 通用方式自動化配置Java LSP
- 手動配置
- JDK版本選擇
- 配置
- 解壓jdt-language-server
- 配置環境變量
- 我的配置分享
- neovim使用nvim-jdtls搭建Java IDE
通用方式自動化配置Java LSP
可以使用以下插件自動化配置。推薦新手使用這個方法。
https://github.com/williamboman/nvim-lsp-installer
這個方式簡單方便,適應于大部分朋友。
這個方便可以參考《09_[nvim0.5+從0單排]_nvim內置lsp搭建python IDE》
https://blog.csdn.net/lxyoucan/article/details/120708396
本文就不重點介紹了。比起傻瓜式的配置,有不少朋友喜歡手動配置,畢竟這樣更有挑戰,更干凈。
手動配置
手動配置的話,有兩個lsp可供選擇:
- https://github.com/georgewfraser/java-language-server
- https://projects.eclipse.org/projects/eclipse.jdt.ls
兩種方式都行,我選擇的是eclipse.jdt.ls,為什么選這個。其實我沒有去進行對比,只是主觀的感覺eclipse畢竟深耕多年,感覺更可靠的感覺。感覺以前我使用coc的時候也用的是eclipse.jdt.ls
那么我們主要就是參考這篇文檔來手動配置:
https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#jdtls
JDK版本選擇
這里有一個小坑,就是JDK的版本要選擇JDK11及以上版本才行。因為就目前來看,JDK8使用的概率還是非常高的。
如果你使用JDK8,使用java文件會報如下的錯誤:
Client 1 quit with exit code 1 and signal 0
推薦使用JDK11,因為我實測JDK11是正常使用的,其他版本的JDK我沒有一一測試。
我的版本信息如下:
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
不同版本下載導航
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
以下我的路徑是個人喜好,可以根據自己的實際情況修改保存路徑:
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
我的目錄結構如下圖所示
配置環境變量
修改你的環境變量配置文件,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語言補全已經成功配置完成了,是不是挺簡單的。
打開項目在狀態欄中會顯示lsp server的加載狀態,稍等片刻等它加載完成了,我們就可以語法提示啦。
語法檢查也沒有問題的。
至此最基本的配置就結束了。
我的配置分享
每個人的使用習慣都不相同,我把常用的快捷鍵進行了映射,供大家參考。
- <space>rn變量重命名
- <leader>f代碼格式化
- 保存自動格式化
等等。
我的配置文件:~/.config/nvim/lua/lspconf/java.lua
全部內容如下,僅大家參考:
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
總結
以上是生活随笔為你收集整理的neovim内置lsp实现Java语言补全的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。