You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用nvim-compe与nvim-jdtls时自动补全缺失括号问题求助

解决Neovim中Java补全方法名不自动添加括号的问题

问题分析

你遇到的情况是nvim-compe补全Java方法(如println)时,仅补全方法名而不自动添加括号——这是因为nvim-compe本身不会主动为方法补全追加括号,需要依赖LSP服务器返回包含括号的补全片段,或配合代码片段插件完成展开。

解决方案

1. 让nvim-jdtls返回带括号的补全项

在nvim-jdtls的配置中添加以下设置,确保JDT-LS服务器返回包含括号和参数占位符的补全内容:

local config = {
  -- 其他原有配置...
  settings = {
    java = {
      completion = {
        -- 启用补全时包含方法括号与参数占位符
        useCodeSnippetsOnMethodSuggest = true
      }
    }
  }
}

2. 配置compe与代码片段插件协同工作

你的compe配置已经启用了vsnip、luasnip等片段源,需确保片段插件正确安装并配合compe完成展开:

  • 若使用vsnip,需安装hrsh7th/vim-vsnip,并确保拥有Java基础代码片段(可手动创建或添加对应片段库)
  • 添加补全确认时的映射,让选中补全项后自动展开片段:
-- 用Enter键确认补全并展开片段
vim.api.nvim_set_keymap('i', '<CR>', 'compe#confirm("<CR>")', { expr = true, silent = true })

3. 替代方案:用nvim-autopairs联动补全括号

如果不想依赖片段插件,可以配置nvim-autopairs在补全方法名后自动添加括号:

local npairs = require('nvim-autopairs')
npairs.setup({
  map_cr = true,
  auto_select = true,
})

-- 让autopairs与compe联动,补全方法名后自动追加括号
local cmp_autopairs = require('nvim-autopairs.completion.compe')
local compe = require('compe')
compe.event:on('confirm_done', cmp_autopairs.on_confirm_done({ map_char = { tex = '' } }))

验证方法

重启Neovim并打开Java文件,输入System.out.pr后选择println补全项:若配置了片段插件,会自动展开为println()且光标定位在括号内;若用autopairs联动,补全后会直接追加()。

内容的提问来源于stack exchange,提问作者Auror

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:00:59