文章目录

  • 通用方式自动化配置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

以下我的路径是个人喜好,可以根据自己的实际情况修改保存路径:

#创建workspace目录,后面会用到
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

我的目录结构如下图所示

配置环境变量

修改你的环境变量配置文件,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/ # 不设置则默认是$HOME/workspace
export JAVA_HOME=$HOME/.jdks/corretto-11.0.14.1/                           #JDK的主目录,建议使用JDK11,使用JDK8会报错
export PATH=$JAVA_HOME/bin:$PATH:.

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

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

至此Java语言补全已经成功配置完成了,是不是挺简单的。

打开项目在状态栏中会显示lsp server的加载状态,稍等片刻等它加载完成了,我们就可以语法提示啦。

语法检查也没有问题的。

至此最基本的配置就结束了。


我的配置分享

每个人的使用习惯都不相同,我把常用的快捷键进行了映射,供大家参考。

  • <space>rn变量重命名
  • <leader>f代码格式化
  • 保存自动格式化
    等等。

我的配置文件:~/.config/nvim/lua/lspconf/java.lua
全部内容如下,仅大家参考:

-- init.lua
local nvim_lsp = require("lspconfig")
-- 在语言服务器附加到当前缓冲区之后
-- 使用 on_attach 函数仅映射以下键
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)--智能提醒,比如:自动导包 已经用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)-- 代码保存自动格式化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

neovim内置lsp实现Java语言补全相关推荐

  1. Vim中的Java代码补全插件

    Vim中的Java代码补全插件 最近在学习用vim写Java代码,用惯了idea,发现vim也太简陋了.后来在网上搜,看到不少文章介绍这个Javacomplete : Omni Completion ...

  2. java jeditorpane 自动换行_JDIC 中利用WebBrowser内置浏览器到java application中 | 学步园...

    JDIC简介: JDesktop Integration Components (JDIC),是一个开源的项目,目的是构建消除本机应用程序和 Java 等价物之间差距的组件.项目组长是个中国人.该项目 ...

  3. python语言接收信息的内置函数是_Python语言接收信息的内置函数是________________...

    Python语言接收信息的内置函数是________________ 答: input() 中国大学MOOC: 铁素体稳定元素倾向于 奥氏体区,使共析点向 方移动. 答:缩小:左上: 注射剂中热原检查 ...

  4. 国产 Java 代码补全神器,aiXcoder 2.0 实测

    来源 | 纯洁的微笑 国人的「代码补全工具」aiXcoder近期推出了「本地2.0新版」,笔者感觉试用一番... 发现新的2.0版一改之前1.0版对电脑性能的要求,在笔记本上运行也能保持稳.准.狠!而 ...

  5. 更新版vimrc(java自动补全)

    """"基础设置autocmd FileType c set omnifunc=ccomplete#Complete "自动补全配置" 自动 ...

  6. JAVA自动补全插件

    Vim 安装 javacomplete 插件 http://www.vim.org/scripts/script.php?script_id=1785 安装方法:下载javacomplete.zip ...

  7. java 补齐字符串_使用String.format()格式化字符串,java自动补全自增长字符串

    JDK1.5中,String类新增了一个很有用的静态方法String.format(): format(Locale l, String format, Object... args) 使用指定的语言 ...

  8. 如何查看python有哪些内置函数_如何查看 Python 全部内置变量和内置函数?

    查看python内置函数的方法:1.打开Python IDLE编辑器:2.输入" dir(__builtins__)"命令,按下回车键(Enter)得到Python全部内置变量和函 ...

  9. 解决ios在微信内置浏览器中video播放的全屏问题

    video 标签在部分的安卓微信和iOS的微信浏览器上点击播放会默认全屏展示 解决部分安卓默认全屏展示,给video标签加如下属性 x5-video-player-type="h5-page ...

  10. VSCode Java 代码补全插件

    新装的VSCode写一个Java文件竟然没有代码自动补全,下载了以下插件Java Extension Pack: 插件链接:https://marketplace.visualstudio.com/i ...

最新文章

  1. flask_入门教程之一
  2. VC++ 使用导入位图创建工具栏
  3. 1001.Reverse Root
  4. 用计算机求正有理数算术平方根的步骤,用计算器求算数平方根、用有理数估计算数平方根的大小.ppt...
  5. js实现文字从右滚动到左边代码循环滚动实例
  6. Redis面试 - Redis的持久化机制
  7. 基于IBM Cognos的高级报表制作技巧
  8. oracle先的lvm分配,LVM实战案例之LVM空间缩减(本次对PV,VG,LV等进行空间缩减)
  9. docker daemon配置阿里云加速器
  10. PHP安装教程及相关说明
  11. K线形态识别—多K线之买入型多日K线组合
  12. java导出excel设置行高列宽_Java 设置Excel自适应行高或列宽
  13. Cocos独立游戏精品|高自由度地牢探险《贪婪洞窟​》
  14. linux的scp命令突然速度变慢,scp连接缓慢的解决方法
  15. S7-1200添加CALCULATE 指令
  16. Chrome浏览器怎么调试网页标题字体大小和颜色?
  17. Xshell 使用技巧
  18. 动力节点 SpringMVC P44-53
  19. 【整车Silmulink模型】(一)整车动力学模型
  20. 关于期货套期保值的疑问?

热门文章

  1. 网管员应该掌握好的学习方法
  2. 大型集团法务工作中的电子签章应用场景
  3. MySQL基础入门《2》创建数据库并插入数据
  4. 【优化求解】基于NSGA2算法求解多目标优化问题matlab源码
  5. 计算机精品在线开放课程申报书,精品在线开放课程申报书.doc
  6. 郑州市城市建成区20年时空变化特征提取与分析
  7. 【Transformers】第 1 章:从Bag-of-Words到Transformer
  8. 12行代码获取1000万行手机号码归属地
  9. Keil5(MDK与C51版本共存)下载安装
  10. SVN branch分支管理