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ć?

Odpowiedzi:


42

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.

uzupełnienia supertabu

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.

zakończenie ctrlxctrlo

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.

wprowadź opis zdjęcia tutaj

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:

zrzut ekranu z autouzupełniania w użyciu

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).


1
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.


9

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 .


7

W trybie wstawiania wpisz kilka pierwszych znaków słowa, a następnie naciśnij:

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

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).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.