Mam pakiety ultisnips i youcompleteme zainstalowane na moim macvimie. Problem polega na tym, że ultisnips nie działa, ponieważ tab jest powiązany przez ycm. Próbowałem wstawić let g:UltiSnipsExpandTrigger = "<s-tab>"
tak, że mogę uruchomić uzupełnianie fragmentu za pomocą shift-tab, ale z nieznanego powodu nie działa. Mógłbym użyć kapsli jako spustu, ale jak dotąd nie znalazłem sposobu, aby to zrobić.
Czy któryś z was używa tych dwóch dodatków razem? Co mogę zrobić, aby karta shift działała? Czy możesz polecić inny klucz do uruchamiania fragmentów?
vim
autocomplete
macvim
ultisnips
pvinis
źródło
źródło
<S-Tab>
podobnie jak UltiSnips, IIRC. Chyba powinieneś zapytać autora YCM.:verbose map <S-Tab>
, prawdopodobnie nie będzie działać na vimie z linii poleceń. Całkiem niezłym zamiennikiem jest imo<CR>
.Odpowiedzi:
Inną opcją jest użycie wtyczki SuperTab:
Tutaj YouCompleteMe jest powiązany z inną kombinacją Ctrln, ale ta kombinacja jest związana z tabulatorem SuperTab. UltiSnips i SuperTab grają dobrze razem, więc możesz po prostu powiązać UltiSnips bezpośrednio z zakładką i wszystko się ułoży.
źródło
tab
wewnątrz fragmentu spowoduje przejście do następnego tabulatora, zamiast wypełnienia sugestii YCM. Musiałem dodaćlet g:UltiSnipsJumpForwardTrigger = "<Right>"
ilet g:UltiSnipsJumpBackwardTrigger = "<Left>"
sprawić, by to zadziałało.Wypróbuj tę sugestię na stronie z narzędzia do śledzenia problemów YouCompleteMe. W twoim .vimrc:
Chociaż to ustawienie sprawi, że rozszerzenie współdzielonego skrawka będzie domyślnym mapowaniem do przeskakiwania do przodu w obrębie skrawka , symuluje zachowanie TextMates, jak wspomniano w tagach pomocy UltiSnips.
Odkąd zamapowałem klawisz Caps Lock na Ctrl, to mapowanie działa dość płynnie.
źródło
skopiuj poniższy kod do swojego vimrc i ciesz się. Ta funkcja rozwiąże wszystkie problemy między YCM i UltiSnips.
źródło
g:UltiSnipsJumpForwardTrigger="<cr>"
aby nadal móc przeglądać wszystkie możliwe uzupełnienia / fragmentymam to w moim vimrc
to właśnie zrobiłem przy pierwszej próbie, ale błędnie napisałem UltiSnips z Ultisnips ... no cóż, w końcu wyszło!
źródło
Osobiście zdecydowałem się nie używać
<tab>
z YouCompleteMe, ale nawigować ręcznie.Więc dodałem to do mojego
.vimrc
:co po prostu wyłącza tabklucz dla YCM. Zamiast tego użyj klawiszy ruchu (strzałki lub
CTRL-N
/CTRL-P
) i wybierz wpis za pomocą CR. UltiSnips działa domyślnie z tab.źródło
Łącząc tylko odpowiedzi Michaelsleca, Joeya Liu i razem z rozwiązaniami, które znalazłem w tym wątku i vimrc tego gościa , mam teraz to, co rozwiązało prawie wszystkie problemy.
źródło
Chociaż wiem, że ten post jest trochę stary, mam własną funkcję, która jest nieco bardziej zoptymalizowana niż ta podana powyżej:
Oczywiście, jeśli po prostu zachowasz ustawienia, które dostarczył Joey Liu, a następnie po prostu użyjesz tej funkcji, wszystko będzie działać idealnie!
EDYCJA: Używam również innej funkcji, aby zwiększyć funkcjonalność cofania się między YouCompleteMe i UltiSnips. Pokażę ci o co mi chodzi:
Następnie umieść to w swoim .vimrc:
A także
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
i Twój zestaw!źródło
Używam ich obu razem. Domyślnie YouCompleteMe wiąże
<Tab>
i<Down>
wybiera następny element ukończenia, a także<S-Tab>
i<Up>
wybiera poprzedni element ukończenia. Wiązania YouCompleteMe można zmienić za pomocą opcji g: ycm_key_list_select_completion i g: ycm_key_list_previous_completion . Zauważ, że nazwy tych opcji zostały ostatnio zmienione, gdy opcja została zmieniona z pojedynczego ciągu na listę ciągów.źródło
Opierając się na odpowiedzi Siegfrieda, używam następujących, które wydają się bardziej naturalne:
Używam też
c-hjkl
powiązań gdzie indziej (przełączam się z jednego panelu na inny), ale byłoby to tylko w trybie normalnym, więc nie ma problemu.źródło
Zainstalowałem wtyczkę UltiSnips po wtyczce YouCompleteMe, więc myślałem, że są ze sobą sprzeczne, ale w rzeczywistości miałem coś bardziej przeszkadzającego:
Pamiętaj, aby usunąć to z,
.vimrc
jeśli jest obecne.źródło
Podczas gdy wiele odpowiedzi działa dobrze w tym poście, chcę tylko powiedzieć, że problem jest spowodowany kolizją powiązań klawiszy między YCM i UltiSnip, podczas gdy YCM domyślnie obsługuje fragmenty UltiSnip, przyjmuje domyślny wyzwalacz rozwijania UltiSnip
<tab>
jako klawisz wyboru zakończenia, więc Fragmenty UltiSnip nie zostaną rozszerzone o<tab>
. Danie im innego przypisania klucza rozwiąże problem, osobiście używam<c-n
i<c-p>
dla YCM i używam domyślnego<tab>
dla UltiSnip. Możesz uzyskać więcej szczegółów zhelp youcompleteme
doc in vim.źródło
Używam
kj
. Oto, co jest w moim.vimrc
:let g:UltisnipsExpandTrigger="kj"
.Rzadko się zdarza, że trafiam na słowo, które ma
kj
w sobie. W takim przypadku odczekałbym tylko kilka sekund po wpisaniuk
i tym typiej
.źródło
Używam
;
do rozwijania UltiSnips, jest to dla mnie takie fajneźródło
\
ponieważ stwierdziłem, że nie mogę pisać;
w trybie wstawiania VimaJak wspominali inni, mapowanie Cj na ultisnips działa świetnie.
let g:UltiSnipsExpandTrigger="<c-j>"
Teraz, jeśli pójdziesz trochę dalej i zainstalujesz xcape i użyj
xcape -e "Shift_L=Control_R|J"
Uwolnisz moc używania tylko klawisza Shift do utlitsnips.
źródło