之前使用的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
这样就可以实现,补全后按回车会自动增加()并把光标定位在()之间.
教程结束!