使用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
相关产品推荐
相关产品推荐

