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

时间:2019-09-24 13:26:20

标签: vim settings 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-snippets,并定义了一些我自己定义的摘录。

当我按CTRL-;时什么也没有发生。我尝试将映射更改为各种不同的击键,但是没有任何反应。我以为我正在使用的其他插件会干扰所选的击键,因此我对其进行了多次更改,但仍未获得列表。不管我有什么设置,我都看不到代码片段列表。

我必须调用哪种魔术才能查看摘要列表?

2 个答案:

答案 0 :(得分:1)

我想稍微简化一下这些回答。对我来说,Harish 的最后一句话就是答案。

<块引用>

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

在尝试列出片段时确保您处于插入模式。

答案 1 :(得分:0)

这对我也不起作用!

但是在深入研究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>,但仍然无法正常工作。那是因为这是插入模式映射,而我一直都在尝试正常模式!