【问题标题】:Why doesn't UltiSnips listing of available snippets work?为什么 UltiSnips 列出的可用片段不起作用?
【发布时间】:2021-05-06 00:20:53
【问题描述】:

我想使用简单的按键列出可用的 sn-ps。但是我似乎无法做到这一点。这是我的 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 并定义了一些我自己的 sn-ps。

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

我必须使用什么魔法才能查看 sn-ps 列表?

【问题讨论】:

  • 你不应该映射到C-;,因为 Vim 不能可靠地识别那个击键和弦。查看the vimhelp FAQ 了解您可以使用的角色组合列表。
  • 我尝试了许多不同的按键,但没有找到任何有效的方法。我会继续努力的!

标签: vim settings ultisnips


【解决方案1】:

这对我也不起作用!

但是在文档中挖掘Ultisnips,我找到了一个替代方案:h UltiSnips#SnippetsInCurrentScope。这个帮助部分有一个示例函数GetAllSnippets(),它返回当前缓冲区可用的sn-ps的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

在 sn-ps 列表可用后,我不确定您的要求是什么。如果你想跳转到 sn-p 的定义,你可以使用下面文档中函数的修改版本来实现。这将填充并打开快速修复列表:

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 命令列出、模糊查找和调用sn-p。

编辑:

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

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

看起来我的终端也同时屏蔽了&lt;C-tab&gt;&lt;C-;&gt;。重新映射为使用&lt;C-m&gt;,它仍然无法正常工作。那是因为它是一个插入模式映射,而我一直在尝试正常模式!

【讨论】:

  • 和你一样,我没有意识到这是一个 插入模式 映射。现在我感觉&lt;sheepish&gt;。谢谢你帮我弄清楚。
  • 感谢您指出这一点。我正在使用 Tilix,但我没有意识到 有一个默认绑定到与此冲突的“选择下一个终端窗口”。
【解决方案2】:

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

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

确保在尝试列出 sn-ps 时处于插入模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    相关资源
    最近更新 更多