Czy możliwe jest posiadanie nazw funkcji, zmiennych itp. Vim podczas automatycznego uzupełniania?
56
Wiele IDE automatycznie uzupełnia nazwy funkcji, zmienne, nazwy metod itp. W zależności od typu użytkownika. Najlepsze uzupełniają nazwy na podstawie zarówno wbudowanej biblioteki języka, jak i tego, co zostało już zdefiniowane w innych plikach tego samego programu.
Na przykład podczas pisania następującego programu w języku Python:
hungy = True
def eatFood(food):
pass
if hungry:
eatF
linia eatFwyświetli się automatycznie eatFood()jako dostępna opcja autouzupełniania.
Czy Vim ma taką możliwość? Jeśli tak, jak mogę to włączyć?
Istnieje wiele różnych smaków autouzupełniania w vimie. Jednym ze sposobów może być użycie SuperTab . Zapewnia to sposób korzystania z uzupełniania tabulatorów w dowolnym momencie. Umożliwiłoby to trafienie Tabpo częściowym wpisaniu słowa, aby uzyskać listę ukończeń. Na przykład pisanie, eatFa następnie, Tababy rozwinąć doeatFood.
Uwaga : wszystkie te zdjęcia prowadzą do przykładowych gifów w akcji.
Vim ma doskonałe inne opcje. Powinieneś przeczytać, :h ins-completionaby zobaczyć różnorodność wbudowanych opcji uzupełniania. Użycie vima Ctrl- XCtrl- O, w połączeniu z wtyczką obsługującą Python, taką jak Jedi, może dać efekt końcowy. Jedi można skonfigurować tak, aby dostarczał dokumentację dotyczącą wszechukończenia (to właśnie robi Ctrl- XCtrl- Orobi). Następnie dokumentacja dla kandydatów do ukończenia pojawi się w podzielonym oknie.
Korzystanie z podobnych wtyczek, ale różnych opcji, prowadzi do różnego rodzaju zachowań. Możliwe jest na przykład, że nie będziesz musiał pytać o autouzupełnianie (jeśli o to ci chodzi). Zamiast tego, po wpisaniu pewnej liczby liter (powiedzmy 2 lub 3) słowa, wtyczka może spróbować inteligentnie zaoferować możliwe uzupełnienia w menu.
Krótka odpowiedź brzmi: tak! Ale proces konfiguracji może być nieco skomplikowany. Myślę o tym jak o kroku na długich schodach do opanowania vima.
Wypróbowałem je wszystkie i zawsze wracam do SuperTab, jest to najmniej nachalne.
craigp
1
Bardzo podoba mi się też wtyczka YouCompleteMe, ponieważ sugeruje ona pisanie podczas pisania, a Ty możesz wybierać lub ignorować sugestie. Tak, wizualnie trudno to zignorować, ale jest to bardzo nieinwazyjne w moim przepływie pracy, ponieważ wymaga mniejszej liczby naciśnięć klawiszy.
Kwitnie
3
Zmieniłem animacje na „po kliknięciu”, w tym sensie, że są połączone z animacjami gif.
davidlowryduda
1
Nie mogę używać YouCompleteMe na moim komputerze roboczym, ponieważ nie mam roota, aby zainstalować zależności, SuperTab jest zdecydowanie najlepszym wyborem.
Charles Clayton,
@mixedmath W moim przypadku superTab nie działa.
alhelal
24
Taka funkcjonalność - tj. Wyszukiwanie w bieżącym pliku (i wszystkich otwartych plikach) w celu automatycznego uzupełniania, powinna być domyślnie włączona z Ctrl+P:
Możesz przejść do n ext z sugestią Ctrl+N, na str revious z sugestią Ctrl+Pi wybierz ją, wpisując dowolną literę (który będzie dodany tuż po sugestii).
Do redaktora (Jasper): Bardziej prawdopodobne jest, że chcę ponownie napisać coś, co niedawno napisałem, a nie coś, co napiszę w przyszłości lub które znajduje się na początku pliku. Dlatego ^Pjest bardziej naturalny IMHO. W przeciwnym razie dziękuję za edycję (mam nadzieję, że kliknąłem prawy przycisk, a dostałeś +2).
jo '
1
Tak, mam te wymyślone punkty internetowe :) Zawsze myślałem, że lista sugestii zostanie posortowana alfabetycznie ...
Jasper
@Jasper jest to kolejność pojawiania się (przynajmniej dla mnie na pewno, patrz również powyżej: world,word,wooda nie na odwrót). Podobnie ^Pjak ostatnio używane uzupełnienie, które jest bardzo przydatne (rzadko przekraczam 3 pozycje na liście, nawet w długim pliku).
yo „
protip:inoremap <C-Space> <C-N>
wchargin
20
Vim ma wbudowane wsparcie dla zakończenia. Możesz przeczytać o różnych zakończeniach obsługiwanych przez Vima :h ins-completion.
Ogólnie rzecz biorąc, dla wszystkich celów, które znalazłem, niepełne uzupełnienia są wystarczające dla moich upodobań, jednak istnieją pewne wtyczki uzupełniające, które dodają więcej wartości niż oferują niepełne uzupełnienia. NeoComplete , YCM (YouCompleteMe) to kilka takich samych. Są bardziej zaawansowani w tym sensie, że starają się dokładniej łączyć różne typy uzupełnień, a także mają zaawansowane mechanizmy buforowania, więc zwykle są szybsze. YCM idzie nawet w takim stopniu, aby współpracować z zewnętrznymi kompilatorami / narzędziami, aby zapewnić lepszą IntelliSense.
Tak, istnieją skrypty automatycznego uzupełniania dla vima. „Najlepszy” wybór zależy od języka programowania. Ponieważ twój przykładowy kod to Python, proponuję rzucić okiem na Jedi . Budowanie na górze, że wypełnić mnie istnieje, który posiada również wsparcie dla innych języków, ale jest czasami postrzegane jako zbyt duże. W przypadku innych języków możesz przeglądać długi zestaw skryptów vim .
Taka funkcjonalność - tj. Wyszukiwanie w bieżącym pliku (i wszystkich otwartych plikach) w celu automatycznego uzupełniania, powinna być domyślnie włączona z
Ctrl+P
:Możesz przejść do n ext z sugestią
Ctrl+N
, na str revious z sugestiąCtrl+P
i wybierz ją, wpisując dowolną literę (który będzie dodany tuż po sugestii).źródło
^P
jest bardziej naturalny IMHO. W przeciwnym razie dziękuję za edycję (mam nadzieję, że kliknąłem prawy przycisk, a dostałeś +2).world,word,wood
a nie na odwrót). Podobnie^P
jak ostatnio używane uzupełnienie, które jest bardzo przydatne (rzadko przekraczam 3 pozycje na liście, nawet w długim pliku).inoremap <C-Space> <C-N>
Vim ma wbudowane wsparcie dla zakończenia. Możesz przeczytać o różnych zakończeniach obsługiwanych przez Vima
:h ins-completion
.Ogólnie rzecz biorąc, dla wszystkich celów, które znalazłem, niepełne uzupełnienia są wystarczające dla moich upodobań, jednak istnieją pewne wtyczki uzupełniające, które dodają więcej wartości niż oferują niepełne uzupełnienia. NeoComplete , YCM (YouCompleteMe) to kilka takich samych. Są bardziej zaawansowani w tym sensie, że starają się dokładniej łączyć różne typy uzupełnień, a także mają zaawansowane mechanizmy buforowania, więc zwykle są szybsze. YCM idzie nawet w takim stopniu, aby współpracować z zewnętrznymi kompilatorami / narzędziami, aby zapewnić lepszą IntelliSense.
źródło
Tak, istnieją skrypty automatycznego uzupełniania dla vima. „Najlepszy” wybór zależy od języka programowania. Ponieważ twój przykładowy kod to Python, proponuję rzucić okiem na Jedi . Budowanie na górze, że wypełnić mnie istnieje, który posiada również wsparcie dla innych języków, ale jest czasami postrzegane jako zbyt duże. W przypadku innych języków możesz przeglądać długi zestaw skryptów vim .
źródło
W trybie wstawiania wpisz kilka pierwszych znaków słowa, a następnie naciśnij:
Jest to szczególnie przydatne przy wprowadzaniu nazw zmiennych w programie.
Opcja „pełna” kontroluje, gdzie wyszukiwane są słowa kluczowe (obejmują pliki, tagi, bufory i inne).
Opcja „completeeopt” kontroluje sposób ukończenia (na przykład, czy wyświetlane jest menu).
źródło