nvim-cmp插件function自动补()

2023-05-16

背景

之前使用的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

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

教程结束!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nvim-cmp插件function自动补() 的相关文章

  • 在 SQLServer 2005 函数中执行动态 SQL

    我在回答这个问题时会说 我不认为这是可以解决的 我还有一个解决方法 我可以创建一个带有输出的存储过程来完成此操作 使用函数对需要此校验和的部分进行编码会更容易 该代码将不起作用 因为Exec SP ExecuteSQL SQL来电 有人知道
  • 为什么这个函数不是纯粹的?

    在维基百科文章中https en wikipedia org wiki Pure function Impure functions https en wikipedia org wiki Pure function Impure func
  • 为什么 C++ 对于 new 和 delete 有其单独的语法?

    为什么不能只是常规的函数调用 新本质上是 malloc sizeof Foo Foo Foo 虽然删除是 Foo Foo free 那么为什么 new delete 最终会拥有自己的语法而不是常规函数呢 这是一个尝试 The new操作员呼
  • 函数输入参数的 auto 是否可以替代函数模板?

    在 C 20 中auto关键字可用于函数输入参数 这是函数模板的适当替代吗 在决定采用哪种方法时是否需要考虑任何实际差异 template
  • 为什么我的函数将布尔值更改为“on”?

    所以我是 php 编程世界的新手 我正在在线学习和其他形式等 但我找不到任何东西来帮助回答我的问题 这就是我在这里的原因 任何帮助当然不胜感激 谢谢 我想将下面的代码变成我可以调用的函数 它的工作原理如下所示 如果我选中表单中的复选框 它会
  • 什么是异地退货?

    什么是非本地退货 什么场景下有用 请举个例子来解释一下 这是一篇好文章 http yehudakatz com 2010 02 07 the building blocks of ruby 关于在 ruby 块的上下文中使用非本地返回 Ru
  • 让我的函数访问外部变量

    我外面有一个数组 myArr array 我想让我的函数访问其外部的数组 以便它可以向其中添加值 function someFuntion myVal some processing here to determine value of m
  • R:如何应用输出多列数据帧的函数(使用 dplyr)?

    我想查找数据框中某一特定列与所有其他列之间的相关性 p 值和 95 CI broom 包提供了一个示例 说明如何使用带有 dplyr 和管道的 cor test 在两列之间执行此操作 对于 mtcars 和 mpg 列 我们可以与另一列进行
  • 如何从函数返回矩阵(二维数组)? (C)

    我创建了一个生成宾果板的函数 我想返回宾果板 正如我没想到的那样 它不起作用 这是函数 int generateBoard int board N M i j fillNum Boolean exists True initilize se
  • Firefox 书签探索未超过 Javascript 的第一级

    我已经编写了一些代码来探索我的 Firefox 书签 但我只获得了第一级书签 即我没有获得文件夹中的链接 e g 搜索引擎 雅虎网站 谷歌网站 在此示例中 我只能访问 Search engines 和 google com 不能访问 yah
  • Fortran 中的函数和子例程有什么区别?

    我的印象是 Fortran 中子例程和函数之间的主要区别在于函数返回值 而子例程更改作为参数传递的部分或全部值 但后来我了解到您也可以修改作为参数传递给函数的变量 我很困惑 找不到很好的参考来了解它们之间的差异 那么 这两种结构之间有什么区
  • MySQL 在 select 语句中使用循环生成列

    在 MySQL 中 我有一个函数 它接受一个数字参数 并根据该数字从另一个表中吐出结果的子集 目前的实现如下 SELECT id date function do stuff with value 1 as t1 function do s
  • C、如何使用pthread_create函数创建线程

    我正在为调度队列创建一个 c 文件 该队列获取任务并将其放入链表队列中 为了做到这一点 我需要使用创建线程 pthread t cThread if pthread create cThread NULL work param perror
  • 根据R中的行索引计算滚动总和

    我正在尝试根据窗口大小 k 计算分组滚动总和 但是 如果组内行索引 n 小于 k 我想使用条件 k min n k 我的问题与这个问题类似R dplyr 滚动总和 https stackoverflow com questions 3015
  • 使用 istream 参数读取的 istream 函数

    我试图理解这段代码 istream read istream is Sales data item double price 0 is gt gt item bookNo gt gt item units sold gt gt price
  • 使函数调用中的括号可选

    嘿 我即将重写我的 JavaScript 库的核心文件 并且我正在寻找更好的方法来完成所有事情 其中之一是我如何使括号可选 例如某些函数调用如下所示 Spark p content Hello World 还有其他人也这样 Spark br
  • 数组名或函数名何时“转换”为指针? (在C中)

    1 误解 每当用 C 语言声明一个数组时 都会有一个指向该数组第一个元素的指针created 数组的名称 隐式 是吗 我不这么认为 前两行this http ee hawaii edu tep EE160 Book chap7 subsec
  • 为什么两个函数有相同的地址?

    考虑这个函数模板 template
  • 如何在Python中求和

    我想知道如何在 python 中表示总和而不需要像这样的循环here http docs scipy org doc scipy reference tutorial optimize html 我们有 def rosen x The Ro
  • javascript 代码只能在函数之外工作 - 为什么?

    为什么这段代码不能像下面写的那样工作 但如果我注释掉function testBgChange 并将代码保留在该函数内 它可以正常工作 如果我将代码保留在函数中然后调用该函数 会有什么区别

随机推荐

  • Linux实用脚本分享

    源码 xff1a https gitee com lxyoucan tools CentOS7专用脚本 因为我平时接触的大部分机器都是CentOS7 这里的脚本都是针对CentOS7开发的 虽然个人比较喜欢新的软件 xff0c 喜欢arch
  • react踩坑之函数名(){}与函数名=()=>{}的区别

    在React Component组件中 xff0c 函数不同的写法有什么区别 最近在看书 xff0c 照着写敲代码 xff0c 敲完后发现与书上效果不一样 找了很久才找到区别 打这个小坑记录下来 xff0c 这个应该新手比较容易犯的错 结论
  • chrome全屏

    有一些web网站可能当作单独的应用使用 如果全屏显示 xff0c 不显示地址栏 让更多的区域给应用呢 xff1f 首先说一下 xff0c 我用的是Macos系统 xff0c 其他系统的参数应该是类似的 MacOS MacOS配置别名 默认的
  • expo cli升级后无法iOS模拟器调试Request failed with status code 400

    国内expo的教程和文档相对比较少 xff0c 记录下过程方便一下遇到相同问题的朋友们 现象 expo初次安装使用正常 xff0c 当升级expo cli到最新版本后 xff0c 无法正常使用iOS模拟器调试了 开启调试报错如下 xff1a
  • docker-compose 巧妙使用

    一般做ctf题目 xff0c 有时候题目给了docker 一般 docker compose up build d d表示运行成果后进入后台 这个命令不仅帮我们build image xff0c 也帮我们run了个容器 docker com
  • expo中使用react navigation 6.x笔记

    新版本react navigation 6 x xff0c 与5 x有什么区别呢 xff1f 记个笔记吧 xff01 文章目录 环境安装依赖安装 native stack navigator library示例 xff1a 导航到一个新的屏
  • windows10安装子系统Ubuntu 20.04

    很久之前就听说了windows10的子系统 因为平时用macOS比较多 xff0c 一直没有体验一把 最近切到windows环境下开发 xff0c 正好有空体验一把windows的子系统 文章目录 安装环境先决条件检查版本 实战程序与功能启
  • Termux配置neovim IDE

    之前玩Termux基本就是通过proot distro来安装Linux发行版本 xff0c 然后在发行版本中在配置neovim环境 这样比较简单一些 xff0c 遇到问题也可以直接网上搜索对应发行版本的解决办法就可以了 今天挑战一下直接在T
  • sed:-e 表达式 #1,字符 11:“s”的未知选项

    报错的命令 apex 64 localhost span class token function sed span i span class token string 34 s lt USER gt span class token en
  • 手机也有生产力,手把手教你用手机开发APP

    只有手机没有电脑 xff0c 能不能学编程 xff1f 能 xff01 今天的教程献给 xff0c 那些没有电脑但是对电脑或者编程有浓厚兴趣的同学 如果你有手机 xff0c 但是没电脑或者电脑不在身边 xff0c 也许这个教程能对你学习编程
  • coc-lua安装报错解决办法

    项目地址 xff1a https github com josa42 coc lua 现象 macOS中使用正常CentOS7有异常 环境CentOS7中 执行命令 CocInstall coc lua成功安装后 xff0c 重启nvim
  • Lua学习笔记

    neovim 0 5正式版本已经发布了 xff0c 现在学习Lua语言还来的及吧 lua替换vim脚本渐渐成为了趋势了 Lua学习下来 xff0c 感觉与javascript特别的像 就是代码块不是使用 分割 xff0c 而是end xff
  • neovim0.5笔记

    neovim0 5版本更新比较大 xff0c 有一些大佬开始抛弃coc xff0c 而使用native lsp了 学习一下记录一下 我参考的是 xff1a https github com craftzdog dotfiles public
  • vim-airline底部状态栏不显示图标的解决办法

    现象 正常的 以前我使用的airline都是有图标显示的 xff0c 如下图所示 不正常的 最近刚升级neovim0 5 尽可能的使用lua配置 xff0c 把环境重新配置了一下 后来就发现我的nvim下面的状态栏 xff0c 不显示图标了
  • LuaSnip代码段使用的正确姿势

    自己升级了neovim 0 5 以来各种尝试从coc切换到native lsp 在coc中代码段配置非常的简单 我之前有文章记录过 vim自动关闭标签 https blog csdn net lxyoucan article details
  • python一键删除误触复制的文件

    现在拍照有时候多选照片不小心变成了复制 xff0c 一个个删除太麻烦 xff0c 就出现了如下脚本 import os for file in os listdir 39 39 if 39 副本 39 in file os remove f
  • 在 neovim 中使用 Lua

    原文 xff1a https github com glepnir nvim lua guide zh nvim lua guide 中文版简易教程 译者 Neovim Core Developer 文章目录 在 neovim 中使用 Lu
  • github加速你可能不知道的小技巧

    在国内的网络环境下 使用github就是一个字 慢 有没有什么没有门槛 很简单的办法能够加速呢 有 方法一 使用csdn的镜像 https codechina csdn net mirrors 对一些知名的项目 也就是说Stars比较多的项
  • 安卓电视ssh应用

    有时下班回家没带电脑 xff0c 又突然想写两行代码 家里的大屏电视就是不错的选择 经过我这段时间的使用 xff0c 有几种实用方案分享给大家 手机投屏 这个方案是我用的最久 xff0c 也是最容易使用的方案 通过乐播投屏之类的方式把手机的
  • nvim-cmp插件function自动补()

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