当前位置: 首页 > 工具软件 > nvim-cmp > 使用案例 >

nvim-cmp插件function自动补()

夏侯和韵
2023-12-01

背景

之前使用的coc,最近刚转到NVIM native 方式的lsp. 自动补全用的是nvim-cmp插件.整体都不错,很满意.就是有一点不习惯.自动补全的function 或method不能自动在末尾加上().每次都要手动输入,有些麻烦.

与是我就尝试读项目主页的文档,尝试配置它.然而我没有找到对我有用的.网上搜索,也搜索不到相关的文章.难道就我一个人有这样的需求吗?

这个困扰了很久,于是我打起了修改源码的主意.源码是通过lua编写的.为了这件事情,我花了近一周的时间学习一下lua这门语言.对于有typescript基础的我,lua不算难.

通过阅读大量源码后,终于让我找到了解决办法.

这次经历让我成就感满满,第一次认真阅读nvim插件的源码学习到不少东西.也许以后也会自己制作一些插件.

配置办法

不用直接修改源码,只要覆盖一个function 就可以实现了.
在配置文件中加入如下代码即可:

--重写插件方法,为了实现function 后,自动追加()
local core = require('cmp.core')
local keymap = require('cmp.utils.keymap')
--local cmp_confirm = cmp.confirm
cmp.confirm =  function(option)
	option = option or {}
	local e = core.menu:get_selected_entry() or (option.select and core.menu:get_first_entry() or nil)
	if e then
		core.confirm(e, {
			behavior = option.behavior,
		}, function()
			local myContext  =	core.get_context({ reason = cmp.ContextReason.TriggerOnly })
			core.complete(myContext)
			--function() 自动增加()
			if e and e.resolved_completion_item and (e.resolved_completion_item.kind==3 or e.resolved_completion_item.kind==2) then
				vim.api.nvim_feedkeys(keymap.t('()<Left>'), 'n', true)
			end
		end)
		return true
	else
		return false
	end
end

这样就可以实现,补全后按回车会自动增加()并把光标定位在()之间.

教程结束!

 类似资料: