如何按照(luasnip+lsp-popup)指定的方式更改neovim的标签行为
2021-12-26 9:41:36
收藏:0
阅读:419
评论:1
我目前已经按照nvim-cmp建议设置了标签:
mapping = {
-------其他映射--------
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif has_words_before() then
cmp.complete()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" }),
-------其他映射--------
}
这是我所想要的行为,但有一个问题。 假设我使用了一个具有多个占位符的片段,我在其中一个占位符中编写然后退出插入模式并进入命令模式。现在我不更改其他占位符,并想要在代码的其他位置插入制表符,但nvim-cmp假定(或至少对我来说似乎如此)我正在片段中并且想要跳过一些字符,并且选项卡将执行此操作。但实际上,我想插入实际制表符字符。
我想要的行为:
一旦我退出插入模式,它就会忘记所有的占位符位置。然后我就能够插入制表符。根据我,如果我想完成一个片段,我本来就可以在插入模式中完成它。
请提供解决方案或所需配置的提示。
我已经部分实现了此目标(感谢shaeinst),具体如下:
mapping = {
-------其他映射--------
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
--elseif has_words_before() then
--cmp.complete()
else
fallback()
end
end, { "i", "s" }),
}
使用此方法,光标只在我处于片段中时跳转到占位符,而且一旦我涵盖了所有占位符,它就不会跳回。但仍然符合我的要求,一旦我退出插入模式,所有占位符都将被忽略,但是只要我在插入模式中,我甚至也想循环遍历占位符。
原文链接 https://stackoverflow.com/questions/70366949
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我可能有点晚了,但是有些人可能遇到相同的问题,也许我能帮助一些可怜的人。
请查看https://github.com/L3MON4D3/LuaSnip/issues/525
简而言之,您可以使用
luasnip.setup({ region_check_events = "CursorHold,InsertLeave", -- those are for removing deleted snippets, also a common problem delete_check_events = "TextChanged,InsertEnter", })
这个方法就可以解决你的问题。
来自L3MON4D3的解释:
希望这可以帮助您。