Czy jest vim dla wtyczki autouzupełniania? Jakie są moje opcje tutaj?
W tej chwili korzystam z AutoComplPop , ale ma złą integrację z snipMate, której używam, i działa bardzo wolno na plikach Ruby (nawet <100 linii).
Widziałem kilka innych wtyczek, ale są one martwe od co najmniej ponad roku. Jakieś pomysły?
vim
autocomplete
naquad
źródło
źródło
let g:acp_behaviorSnipmateLength=-1
zobacz:help autocomplpop
), które należy dodać do .vimrc, dodałeś je?Odpowiedzi:
To stare pytanie, ale od czasu do czasu wracam do niego z blaskiem gasnącej nadziei, myśląc, że pewnego dnia znajdę odpowiednią kombinację wtyczek, aby zapewnić mi idealne automatyczne uzupełnianie w Vimie. Poszukiwania trwają, ale to wszystkie badania, które przeprowadziłem przez kilka lat.
Przede wszystkim musisz zrozumieć, że Vim jest edytorem tekstu, a nie edytorem kodu. Edytory kodu, IDES, to narzędzia takie jak pakiet narzędzi Jetbrains, Visual Studio Code, Eclipse itp.
Vim zasadniczo nie potrafi dokładnie „autouzupełniania” kodu. Autouzupełnianie wymaga introspekcji kodu źródłowego i analizy AST. Weź pod uwagę, że Vim nie mógł wykonywać operacji asynchronicznych, dopóki Vim 8 nie został wydany w 2016 roku, więc próba uruchomienia dowolnego oprogramowania do introspekcji kodu we wtyczce Vima byłaby koszmarem. Wpisuje się w historię ekosystemu Vim, aby tego nie robić. I wszyscy, którzy próbują to zrobić, jak Tern For Vim, są rzeczywiście koszmarami do użycia.
Najlepsze, co może zrobić edytor tekstu , to urywki i uzupełnianie tych samych słów / linii / etc, o których wie. Jeśli szukasz autouzupełniania kodu, powinieneś użyć edytora kodu, a nie edytora tekstu.
Oto twoje opcje, z których wypróbowałem wszystkie:
Dwa przydatne skróty klawiaturowe to Ctrl- n, które automatycznie uzupełniają słowo tylko na podstawie aktualnie otwartych buforów (bez introspekcji kodu) oraz Ctrl- xCtrl- lktóre automatycznie uzupełniają pełny wiersz kodu, jeśli chcesz go zduplikować. Prawdopodobnie wiesz Ctrl- xCtrl- f, która automatycznie uzupełni nazwę pliku wraz ze ścieżką względem bieżącego
:pwd
. Wzór uzupełniania Wtyczka może być łagodnie przydatna, jeśli nie szukaj z/\v
.Wbudowane w Vima „ Omnicompletion ” wywoływane przez Ctrl- x, Ctrl- o(to autorzy Vima chcą, abyś wpisywał za każdym razem) wraz z wieloma wtyczkami specyficznymi dla języka , jeśli takie istnieją. Możesz
:echo &omnifunc
w pliku sprawdzić, czy masz już Omnicompletion skonfigurowane przez Vima w wybranym pliku.AutoComplPop do automatycznego otwierania powyższego menu Omnicompletion podczas pisania.
SuperTab, który pozwala naciskać, Tababy uruchomić wbudowane zakończenie Vima.
NeoComplCache, czyli uzupełnianie słów kluczowych (nie określono, jak różni się od wbudowanego uzupełniania Vima), złożona
.vimrc
konfiguracja i NeoSnippet do uzupełniania fragmentów.Potworna kombinacja
exuberant-ctags
iDoctorJS
(projekt Mozilli, który nie żyje od roku), TagBar i domowej roboty narzędzie do wyodrębnienia ukończenia z plików tagów.SnipMate , podstawowa wtyczka do uzupełniania tagów, wraz z fragmentami , i sam wymyśl , jak dodawać fragmenty, ponieważ jest to trochę trudne.
UltiSnips wraz z UltiSnips-Snippets, które różnią się od powyższych fragmentów.
Tern for Vim , obiecująca biblioteka, która dokonuje introspekcji kodu w celu uzyskania poprawnego autouzupełniania. Jest jednak bardzo wadliwy, bardzo powolny, ma wycieki pamięci, które spowodują awarię Vima i być może porzucają oprogramowanie.
YouCompleteMe , niewyraźne uzupełnienie podczas pisania, które uruchamia serwer w tle, wraz z rodzimą funkcją uzupełniania fragmentów.
Eclim - szlachetna próba uruchomienia serwera Eclipse w tle i powiedzenia Vimowi autouzupełniania, które introspekuje w locie. Działa równie dobrze jak rybitwa.
Wreszcie Closetag lub delimitMate lub Autoclose lub w domu-grown bananagram do automatycznego zamykania znaczników i nawiasów automatycznie typowania.
Prawie każda wtyczka na tej liście będzie w konflikcie z prawie każdą inną wtyczką na tej liście.
YouCompleteMe wydaje się być liderem pakietu, ale nigdy nie byłem w stanie sprawić, aby działał poprawnie z uzupełnianiem tagów, a jego uzupełnianie introspekcji kodu jeszcze się nie potwierdziło.
Moja osobista opinia jest taka, że obecny stan autocompletion świecie Vim jest w złym stanie. W przypadku małych projektów może być dobrze, używając jednego z powyższych rozwiązań. Jeśli masz do czynienia z prostym interfejsem API, który możesz zachować głównie w głowie, zakończenie introspekcji bez kodu prawdopodobnie będzie w porządku. Jeśli masz do czynienia z dużym projektem lub potrzebujesz bezpieczeństwa typu podczas programowania, pełnoprawne IDE ( Eclipse , Visual Studio , WebStorm ) będzie ci pasowało znacznie lepiej niż Vim.
Wadą IDE jest oczywiście to, że nie będziesz już mieć mocy Vima w swoich rękach. Nie użyłem żadnego IDE, który ma akceptowalny tryb Vima.
Vim ma umiarkowane nastawienie językowe do nietypowych języków podobnych do C, a poza tym ma nadzieję, że użytkownicy dodadzą jakieś funkcje specyficzne dla języka jako wtyczki. Niestety doprowadziło to do rozszczepionego ekosystemu autouzupełniania. Niektóre opcje są przyzwoite, ale nic nie jest idealne i rzadko istnieje lider / najlepsza praktyka.
źródło
Oto fajny: YouCompleteMe
YouCompleteMe, która sprawia, że menu rozwijane pojawia się automatycznie podczas pisania i obsługuje rozmyte zaznaczanie, więc jeśli masz wywołany identyfikator
partition_finder
i wpisujesz coś w styluptf
podczas edycji pliku C ++, lista sugestii zawiera obaprintf
ipartition_finder
ponieważ zawierają te same litery w tej samej kolejności. Jeśli masz zmienną o nazwiemyBrain
, możesz wpisaćbrn
i to zasugeruje. YouCompleteMe również nadaje priorytet sugestiom na podstawie poprzedniej częstotliwości użytkowania.źródło
Używam neocomplcache z fragmentami snipmate + snipmate
możesz zobaczyć mój vimrc
źródło
Próbuję necleclecache z neosnippetem. Myślę, że będzie lepiej zintegrowany, ponieważ oba są autorstwa tej samej osoby
źródło
Wierzę, że vim ma jeden wbudowany o nazwie OmniComplete. W trybie wstawiania użyj
ctrl+x,ctrl+o
.W przeciwnym razie możesz wykonać uzupełnianie słów kluczowych z trybu wstawiania za pomocą
ctrl+n
. Po jej wywołaniu wyświetli się lista rozwijana zawierająca możliwe dopasowania słów znalezionych w edytowanym pliku, a także innych otwartych plików. Naciskaj,ctrl+n
aby przewijać opcje. Kiedy dojdziesz do słowa, które chcesz, po prostu kontynuuj pisanie jak zwykle.Jeśli nie możesz znaleźć słowa, które chcesz, w
ctrl+n
końcu zniknie z listy i będziesz mógł pisać dalej, albo możesz nacisnąć,ESC
a następniebcw
przejśćb
do początku słowa, które Cięc
obraża i zmienić porządek na żądanyw
.źródło
<c-x><c-o>
Działa tylko dla rzeczy, które vim został wyraźnie poinformowany o tym, jak wspierać. Domyślnie myślę, że może zrobić tylko kilka drobnych rzeczy i tak dalej jak ukończenie CSS, ale jeśli chcesz czegoś takiego jak Eclipse, istnieje kilka wtyczek vim, które starają się to zapewnić dla Ciebiepartition_finder
i wpisać coś takiegoptf
podczas edytowania C ++ plik, menu rozwijane będą sugerować zarównoprintf
ipartition_finder
ponieważ zawierają te same litery w tej samej kolejności. Jeśli mam zmienną o nazwiemyBrain
, mogę pisaćbrn
i pojawi się. YouCompleteMe również nadaje priorytet sugestiom na podstawie poprzedniej częstotliwości użytkowania. Sprawdź to tutaj: valloric.github.io/YouCompleteMeRozwinąłem nową wtyczkę SimpleAutoComplPop z oryginalnego AutoComplPop. Chociaż nie znam ruby ani snipMate, możesz spróbować i cieszę się, że otrzymałem informacje zwrotne :)
źródło