为什么UltiSnips列出可用片段不起作用?



我想用简单的击键列出可用的片段。但是我似乎不能这样做。以下是我的UltiSnips设置:

let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
let g:UltiSnipsListSnippets="<c-;>"
let g:UltiSnipsSnippetsDir="~/.vim/ultisnips"
let g:UltiSnipsEditSplit="vertical"
"Open UltiSnips edit function
nmap <leader>se :UltiSnipsEdit<cr>

我确实安装了vim片段,并定义了我自己的一些片段。

当我按CTRL-;时没有任何反应。我尝试将映射更改为各种不同的击键,但没有任何反应。我认为我正在使用的其他一些插件会干扰所选的击键,所以我多次更改它,但仍然没有得到列表。无论我有什么设置,我都看不到片段列表。

我必须调用什么魔法才能查看片段列表?

这对我也不起作用!

但是翻阅文档寻找Ultisnips,我找到了另一种选择:h UltiSnips#SnippetsInCurrentScope。此帮助部分中有一个示例函数GetAllSnippets(),它返回可用于当前缓冲区的代码片段list,如下所示:

function! GetAllSnippets()
call UltiSnips#SnippetsInCurrentScope(1)
let list = []
for [key, info] in items(g:current_ulti_dict_info)
let parts = split(info.location, ':')
call add(list, {
"key": key,
"path": parts[0],
"linenr": parts[1],
"description": info.description,
})
endfor
return list
endfunction

我不确定在代码片段列表可用后您的要求是什么。如果要跳转到代码段的定义,可以使用下面文档中函数的修改版本执行此操作。这将填充并打开快速修复列表:

function! GetAllSnippets()
call UltiSnips#SnippetsInCurrentScope(1)
let list = []
for [key, info] in items(g:current_ulti_dict_info)
let parts = split(info.location, ':')
call add(list, {
"text": key,
"filename": parts[0],
"lnum": parts[1],
"context": info.description,
})
endfor
call setqflist([], ' ', { 'title': 'Snippets', 'items' : list})
" Open Quickfix list as soon as it is populated
copen
endfunction

或者,如果您使用的是 fzf-vim,则可以使用:Snippets命令列出、模糊查找和调用代码段。

编辑:

我现在看起来很傻!:D解决方案就在h g:UltiSnipsListSnippets

请注意,某些终端模拟器不会发送<c-tab>(和其他,如<c-h>(到正在运行的程序。

看起来我的终端也阻止了<C-tab><C-;>.重新映射以使用<C-m>,但它仍然不起作用。那是因为它是插入模式映射,我一直在尝试在正常模式下!

我想稍微简化一下这些响应。对我来说,哈里什的最后一句话就是答案。

那是因为它是插入模式映射,我一直在尝试在正常模式下!

尝试列出代码段时,请确保您处于插入模式。

最新更新