pvi*_*nis 124 vim autocomplete macvim ultisnips
我在我的macvim上安装了ultisnips和youcompleteme.问题是ultisnips不起作用,因为tab被ycm绑定.我尝试使用,let g:UltiSnipsExpandTrigger = "<s-tab>"以便我可以使用shift-tab触发代码段完成,但它不会因某些未知原因而起作用.我可以使用大写作为触发器,但到目前为止,我发现没有办法做到这一点.
你们中的任何人一起使用这两个附加组件吗?我可以做些什么来制作换档标签?你能推荐另一把钥匙来触发片段吗?
Sie*_*ter 180
另一个选择是使用SuperTab插件:
" if you use Vundle, load plugins:
Bundle 'ervandew/supertab'
Bundle 'Valloric/YouCompleteMe'
Bundle 'SirVer/ultisnips'
" make YCM compatible with UltiSnips (using supertab)
let g:ycm_key_list_select_completion = ['<C-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-p>', '<Up>']
let g:SuperTabDefaultCompletionType = '<C-n>'
" better key bindings for UltiSnipsExpandTrigger
let g:UltiSnipsExpandTrigger = "<tab>"
let g:UltiSnipsJumpForwardTrigger = "<tab>"
let g:UltiSnipsJumpBackwardTrigger = "<s-tab>"
Run Code Online (Sandbox Code Playgroud)
这里YouCompleteMe绑定到一个不同的组合Ctrln,但随后该组合通过SuperTab绑定到tab.UltiSnips和SuperTab可以很好地协同工作,因此您可以直接将UltiSnips绑定到选项卡,一切都会正常运行.
unb*_*ble 46
在YouCompleteMe问题跟踪器的页面上尝试此建议.在.vimrc中:
let g:UltiSnipsExpandTrigger="<c-j>"
Run Code Online (Sandbox Code Playgroud)
虽然此设置将扩展代码段共享作为在代码段内向前跳转的默认映射,但它会模拟TextMates在UltiSnips帮助标记中提到的行为.
由于我已将Caps Lock键映射到Ctrl,因此此映射非常顺利.
Joe*_*Liu 38
将以下代码复制到您的vimrc,然后享受.此功能将处理YCM和UltiSnips之间的所有问题.
function! g:UltiSnips_Complete()
call UltiSnips#ExpandSnippet()
if g:ulti_expand_res == 0
if pumvisible()
return "\<C-n>"
else
call UltiSnips#JumpForwards()
if g:ulti_jump_forwards_res == 0
return "\<TAB>"
endif
endif
endif
return ""
endfunction
au BufEnter * exec "inoremap <silent> " . g:UltiSnipsExpandTrigger . " <C-R>=g:UltiSnips_Complete()<cr>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsListSnippets="<c-e>"
" this mapping Enter key to <C-y> to chose the current highlight item
" and close the selection list, same as other IDEs.
" CONFLICT with some plugins like tpope/Endwise
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
Run Code Online (Sandbox Code Playgroud)
pvi*_*nis 18
我在我的vimrc中有这个
"" YouCompleteMe
let g:ycm_key_list_previous_completion=['<Up>']
"" Ultisnips
let g:UltiSnipsExpandTrigger="<c-tab>"
let g:UltiSnipsListSnippets="<c-s-tab>"
Run Code Online (Sandbox Code Playgroud)
这就是我第一次尝试时所做的,但是我用Ultisnips拼错了UltiSnips ..好吧,最终得到了解决方案!
Tho*_*ser 12
我个人选择不使用<tab>YouCompleteMe,而是手动导航.
所以我把它添加到我的.vimrc:
let g:ycm_key_list_select_completion=[]
let g:ycm_key_list_previous_completion=[]
Run Code Online (Sandbox Code Playgroud)
它只是禁用了tabYCM 的密钥.而是使用移动键并选择条目CR.UltiSnips默认使用tab.
只是将 Michaelslec、Joey Liu 的答案以及我在这个问题线程和这个人的 vimrc 中找到的解决方案放在一起,我现在已经解决了几乎所有问题。
function! g:UltiSnips_Complete()
call UltiSnips#ExpandSnippet()
if g:ulti_expand_res == 0
if pumvisible()
return "\<C-n>"
else
call UltiSnips#JumpForwards()
if g:ulti_jump_forwards_res == 0
return "\<TAB>"
endif
endif
endif
return ""
endfunction
function! g:UltiSnips_Reverse()
call UltiSnips#JumpBackwards()
if g:ulti_jump_backwards_res == 0
return "\<C-P>"
endif
return ""
endfunction
if !exists("g:UltiSnipsJumpForwardTrigger")
let g:UltiSnipsJumpForwardTrigger = "<tab>"
endif
if !exists("g:UltiSnipsJumpBackwardTrigger")
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
endif
au InsertEnter * exec "inoremap <silent> " . g:UltiSnipsExpandTrigger . " <C-R>=g:UltiSnips_Complete()<cr>"
au InsertEnter * exec "inoremap <silent> " . g:UltiSnipsJumpBackwardTrigger . " <C-R>=g:UltiSnips_Reverse()<cr>"
Run Code Online (Sandbox Code Playgroud)