jlc*_*lin 1 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>
Run Code Online (Sandbox Code Playgroud)
我确实安装了vim-snippets和一些我自己定义的片段。
当我按下 时什么也没有发生CTRL-;。我尝试将映射更改为各种不同的击键,但没有任何反应。我认为我正在使用的其他一些插件会干扰所选的击键,因此我对其进行了多次更改,但仍然没有得到列表。无论我有什么设置,我都看不到片段列表。
我必须调用什么魔法才能查看片段列表?
这对我来说也不起作用!
但是通过深入研究 doc 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
Run Code Online (Sandbox Code Playgroud)
我不确定在片段列表可用后您的要求是什么。如果您想跳转到代码片段的定义,可以使用下面文档中函数的修改版本来实现。这将填充并打开快速修复列表:
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
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用fzf-vim,您可以使用该:Snippets命令列出、模糊查找和调用代码片段。
我现在看起来很傻!:D 解决方案就在那里h g:UltiSnipsListSnippets:
请注意,某些终端模拟器不会发送
<c-tab>(以及其他终端模拟器,例如<c-h>)到正在运行的程序。
看起来我的终端也阻止了<C-tab>和<C-;>。重新映射使用<C-m>还是不行。那是因为它是插入模式映射,而我一直在正常模式下尝试!