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
i DoctorJS
(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.
let g:acp_behaviorSnipmateLength=-1
zobacz:help autocomplpop
), które należy dodać do .vimrc, dodałeś je?