youcompleteme snippets honza vim autocomplete macvim ultisnips

vim - snippets - UltiSnips y YouCompleteMe



vim youcompleteme javascript (12)

Tengo bundles ultisnips y youcompleteme instalados en mi macvim. El problema es que ultisnips no funciona porque la pestaña está vinculada por ycm. Intenté poner let g:UltiSnipsExpandTrigger = "<s-tab>" para que pueda desencadenar la finalización del fragmento con shift-tab, pero no funciona por algún motivo desconocido. Podría usar las mayúsculas como disparador, pero hasta ahora no he encontrado manera de hacerlo.

¿Alguno de ustedes usa esos dos complementos juntos? ¿Qué puedo hacer para que funcione el cambio de pestaña? ¿Puedes recomendar otra clave para disparar fragmentos?


Aunque sé que esta publicación es un poco antigua, tengo mi propia función que está un poco más optimizada que la que se menciona arriba:

function! g:UltiSnips_Complete() call UltiSnips#ExpandSnippetOrJump() if g:ulti_expand_or_jump_res == 0 if pumvisible() return "/<C-N>" else return "/<TAB>" endif endif return "" endfunction

Por supuesto, si solo conservas la configuración que Joey Liu proporcionó y luego usas esta función todo funcionará perfectamente.

EDITAR: Además, uso otra función para aumentar la funcionalidad de retroceso entre YouCompleteMe y UltiSnips. Te mostraré lo que quiero decir:

function! g:UltiSnips_Reverse() call UltiSnips#JumpBackwards() if g:ulti_jump_backwards_res == 0 return "/<C-P>" endif return "" endfunction

Entonces simplemente ponga esto en su .vimrc:

au BufEnter * exec "inoremap <silent> " . g:UltiSnipsJumpBackwardTrigger . " <C-R>=g:UltiSnips_Reverse()<cr>"

¡Además de let g:UltiSnipsJumpBackwardTrigger="<s-tab>" y tu conjunto!


Basado en la respuesta de Siegfried, estoy usando lo siguiente que parece más natural:

let g:ycm_key_list_select_completion = [''<C-j>''] let g:ycm_key_list_previous_completion = [''<C-k>''] let g:UltiSnipsExpandTrigger = "<C-l>" let g:UltiSnipsJumpForwardTrigger = "<C-j>" let g:UltiSnipsJumpBackwardTrigger = "<C-k>"

También uso los enlaces c-hjkl en otro lugar (cambiando de un panel a otro), pero eso solo estaría en modo normal, por lo que no hay problema.


Instalé el complemento UltiSnips después del complemento YouCompleteMe, así que pensé que eran conflictivos, pero en realidad tenía algo más que interferir:

set paste

Asegúrese de eliminar eso de .vimrc si está presente.


Los uso a los dos juntos. De manera predeterminada, YouCompleteMe vincula <Tab> y <Down> para seleccionar el siguiente elemento de finalización y también <S-Tab> y <Up> para seleccionar el elemento de finalización anterior. Puede cambiar los enlaces YouCompleteMe con las g:ycm_key_list_select_completion y g:ycm_key_list_previous_completion . Tenga en cuenta que los nombres de estas opciones se cambiaron recientemente cuando la opción se cambió de una sola cadena a una lista de cadenas.


Mientras que Many answer funciona bien en esta publicación, solo quiero decir que el problema es causado por la colisión de enlace entre YCM y UltiSnip, mientras que YCM admite fragmentos de UltiSnip de forma predeterminada, toma el activador de despliegue de UltiSnip predeterminado <tab> como su finalización seleccionada clave, para que los fragmentos de UltiSnip no se expandan por <tab> . Darles un enlace de clave diferente resolverá el problema, personalmente uso <cn y <cp> para YCM y uso la <tab> predeterminada para UltiSnip. Puede obtener más detalles con la help youcompleteme doc in vim.


Otra opción es usar el complemento 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>"

Aquí YouCompleteMe está vinculado a una combinación diferente Ctrl n , pero luego esa combinación está obligada a desplazarse por SuperTab. UltiSnips y SuperTab funcionan bien juntos, por lo que puede vincular UltiSnips directamente a la pestaña y todo saldrá bien.


Personalmente, opté por no usar <tab> con YouCompleteMe pero navegarlo manualmente.

Así que agregué esto a mi .vimrc :

let g:ycm_key_list_select_completion=[] let g:ycm_key_list_previous_completion=[]

que simplemente deshabilita la tecla de tabulación para YCM. En cambio, usa las teclas de movimiento y selecciona la entrada con CR . UltiSnips funciona de forma predeterminada con la pestaña .


Pruebe esta sugerencia en una page del rastreador de problemas YouCompleteMe. En tu .vimrc:

let g:UltiSnipsExpandTrigger="<c-j>"

Si bien esta configuración hará que la expansión de un fragmento comparta la asignación predeterminada para avanzar dentro de un fragmento , simula el comportamiento de TextMates como se menciona en las etiquetas de ayuda de UltiSnips.

Como he asignado mi tecla Bloq Mayús a Ctrl, esta asignación funciona bastante bien.


Simplemente preparando las respuestas de Michaelslec, Joey Liu y junto con las soluciones que encontré en page temático y el vimrc de este tipo , ahora tengo esto que solucionó casi todos los problemas.

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>"


Yo uso kj . Esto es lo que está en mi .vimrc :

let g:UltisnipsExpandTrigger="kj" .

Rara vez sucede que encuentro una palabra que tiene kj en ella. Si este es el caso, solo esperaría unos segundos después de escribir k y ese tipo j .


copia el siguiente código a tu vimrc, y disfruta. Esta función manejará todos los problemas entre YCM y 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>"


tengo esto en mi vimrc

"" YouCompleteMe let g:ycm_key_list_previous_completion=[''<Up>''] "" Ultisnips let g:UltiSnipsExpandTrigger="<c-tab>" let g:UltiSnipsListSnippets="<c-s-tab>"

eso es lo que hice en mi primer intento, pero escribí mal UltiSnips con Ultisnips ... ¡bueno, funcionó al final!