为什么可用片段的 UltiSnips 列表不起作用?
Why doesn't UltiSnips listing of available snippets work?
我想使用简单的按键列出可用的片段。但是我似乎无法做到这一点。这是我的 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-;
时没有任何反应。我试过将映射更改为各种不同的击键,但没有任何反应。我认为我正在使用的其他一些插件会干扰所选的击键,所以我已经更改了很多次,但仍然没有得到列表。不管我有什么设置,我都看不到片段列表。
我必须调用什么魔法才能看到片段列表?
这对我也不起作用!
但是通过 Ultisnips
的文档挖掘,我发现了一个替代方案:h UltiSnips#SnippetsInCurrentScope
。此帮助部分中有一个示例函数 GetAllSnippets()
,其中 returns 当前缓冲区可用的 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
在片段列表可用后,我不确定您的要求是什么。如果你想跳转到代码片段的定义,你可以使用下面文档中函数的修改版本来实现。这将填充并打开 quickfix 列表:
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
:
Be advised, that some terminal emulators don't send
<c-tab>
(and others, like <c-h>
) to the running program.
看来我的终端也同时阻止了 <C-tab>
和 <C-;>
。重新映射为使用 <C-m>
,但仍然无效。那是因为它是一个 插入模式 映射,而我一直在尝试正常模式!
我想稍微简化一下这些回复。对我来说,Harish的最后一句话就是答案。
That's because it's an insert mode mapping and I was trying in normal mode all this while!
确保您在尝试列出片段时处于插入模式。
我想使用简单的按键列出可用的片段。但是我似乎无法做到这一点。这是我的 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-;
时没有任何反应。我试过将映射更改为各种不同的击键,但没有任何反应。我认为我正在使用的其他一些插件会干扰所选的击键,所以我已经更改了很多次,但仍然没有得到列表。不管我有什么设置,我都看不到片段列表。
我必须调用什么魔法才能看到片段列表?
这对我也不起作用!
但是通过 Ultisnips
的文档挖掘,我发现了一个替代方案:h UltiSnips#SnippetsInCurrentScope
。此帮助部分中有一个示例函数 GetAllSnippets()
,其中 returns 当前缓冲区可用的 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
在片段列表可用后,我不确定您的要求是什么。如果你想跳转到代码片段的定义,你可以使用下面文档中函数的修改版本来实现。这将填充并打开 quickfix 列表:
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
:
Be advised, that some terminal emulators don't send
<c-tab>
(and others, like<c-h>
) to the running program.
看来我的终端也同时阻止了 <C-tab>
和 <C-;>
。重新映射为使用 <C-m>
,但仍然无效。那是因为它是一个 插入模式 映射,而我一直在尝试正常模式!
我想稍微简化一下这些回复。对我来说,Harish的最后一句话就是答案。
That's because it's an insert mode mapping and I was trying in normal mode all this while!
确保您在尝试列出片段时处于插入模式。