Jak mogę zmusić Vima do pokazania dokumentacji funkcji C / C ++?

17

Większość edytorów ma taką funkcję, że kiedy naciskasz niektóre klawisze, umieszczając kursor nad funkcją, wyświetla dokumentację tej funkcji wraz z liczbą i typem argumentów, które ta funkcja przyjmuje.

Zastanawiałem się, czy Vim oferuje takie wsparcie. Na przykład, podczas kodowania w C, używam wbudowanej funkcji qsort(). Ponieważ nie jestem pewien co do rodzaju i liczby argumentów, które chciałbym wziąć, chciałbym to wiedzieć bez ucieczki przed Vimem. Czy to możliwe?

sherelock
źródło
2
Nie jestem pewien, czy to dokładnie to, czego chcesz, ale jeśli podasz odpowiednią wartość opcji 'keywordprg'(nazwa programu, który może obsługiwać dokumentację dla wybranego języka), to uderzając Kw słowo kluczowe (które może być nazwą funkcja), powinieneś uzyskać potrzebne informacje. Na przykład, jeśli zainstalujesz cppman( github.com/aitjcize/cppman ) i dodasz autocmd do vimrc, na przykład autocmd FileType cpp setlocal keywordprg=cppman, to cppmanpowinien obsłużyć dokumentację w buforze c ++. Jednak nie przetestowane.
saginaw
2
@saginaw Chociaż cppmanjest to doskonała sugestia, jeśli masz zainstalowane strony C i C ++ ( manpages-posix-devi libstdc++-X.Y-docpakiety w systemach opartych na Debianie), zwykłe stare manpowinny działać.
muru

Odpowiedzi:

8

Jeśli możesz skonfigurować YouCompleteMe , obsługuje C, C ++, JavaScript, Go i kilka innych języków. Oto w akcji:

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Jest trochę denerwujący w instalacji , a po zainstalowaniu należy go skonfigurować dla C i C ++ , tworząc plik .ycm_extra_conf.py. Podniosłem jedną z tego repo i uzyskałem ten efekt.

muru
źródło
4
„Instalacja jest trochę denerwująca”… To mało powiedziane. Mimo to jest bardzo dobra. ^ _ ~
Sardathrion - Przywróć Monikę
4
Czy jest jakiś sposób na wymuszenie, aby okno podręczne uzupełnień pozostało otwarte podczas pisania argumentów funkcji? Na przykład, gdy tylko wpiszesz pierwszą literę pierwszego argumentu qsort(a, okno wyskakujące znika, co utrudnia zapamiętanie kolejnych argumentów.
thiagowfx
1
Ale pokazuje tylko prototyp funkcji. Jak sprawić, by wyświetlał komentarze doxygen (tak jak Eclipse robi z javadocs)? Mam na myśli parametry, dane wyjściowe, notatki,
referencje
1
@ Zeta.Investigator Jedną z rzeczy YcmCompleter GoTo, których często używam w Pythonie, jest to , że zwykle wysyła cię tam, gdzie funkcja / klasa została zdefiniowana w kodzie. To jest linia tuż nad linkiem, który zawiera wszystko, o co prosiłeś. Nie jestem pewien, czy wbudowane komentarze są w tym samym miejscu w C / Java / C ++.
user1717828,
8

W przypadku C naciśnięcie Ksłowa kluczowego spowoduje bezpośrednie wyświetlenie wbudowanej strony podręcznika. Na przykład umieść kursor na printfsłowie kluczowym:

printf("Hello, %s!", foo);

Teraz naciśnij K(wielkie litery K), a strona podręcznika dla printfpowinna pojawić się w VIM:

NAME
   printf - format and print data

SYNOPSIS
   printf FORMAT [ARGUMENT]...
   printf OPTION

DESCRIPTION
   Print ARGUMENT(s) according to FORMAT, or execute according to OPTION:

   --help display this help and exit

   --version
          output version information and exit

   FORMAT controls the output as in C printf.  Interpreted sequences are:

   \"     double quote
   \\     backslash

   ... It continues for quite a few scrollable pages

Wydaje się, że działa to od razu po rozpakowaniu wszystkich dystrybucji wywodzących się z Debiana, na których wypróbowałem, nie jest wymagana żadna konkretna konfiguracja.

dotancohen
źródło
1
To jest strona printf(1)polecenia, a nie printf(3)funkcja. W każdym razie strony podręcznika funkcji C pochodzą z manpages-dev, które zwykle są instalowane domyślnie, ale nie zawsze, a funkcje POSIX są manpages-posix-dev- zwykle nie są instalowane domyślnie, podobnie jak dokumentacja C ++ ( libstdc++-X.Y-doc).
muru
5

Jeśli potrzebujesz odpowiedniej dokumentacji , wtyczka w komentarzu saginaw wydaje się zaspokajać twoje potrzeby w C ++. Nie znam ogólnego, ale prawdopodobnie możesz znaleźć alternatywy dla innych języków na vim.org.


Gdyby…

  • twój kod jest już zaindeksowany za pomocą ctags,
  • twój indeks zawiera również standardową bibliotekę,
  • a wszystko czego potrzebujesz to podpowiedź ,

możesz użyć <C-w>}do otwarcia definicji słowa kluczowego pod kursorem w oknie podglądu. Oczywiście YMMV.

Zobacz :help preview-window, :help tagsa :help ctags.


Możesz także skorzystać z wbudowanej funkcji Vima „włącz-szukaj”: naciśnij, [iaby wydrukować „podpis” słowa pod kursorem w wierszu poleceń:

[ja

Zobaczyć :help include-search.

romainl
źródło
1
[ijest dziwne. Działa dla stdlib.hi qsort, ale nie cstdlibi std::qsortlub tylko qsort.
muru
Dla tych, którzy nie znają nomenklatury, jaką jestem / byłem, <C-w>oznacza, CTRL-Wktóra jest nomenklatura używana w :helpplikach. Następnie możesz użyć :pcdo zamknięcia okna podglądu.
danielson317
1

Typ pliku C / C ++ Vima jest wyposażony w przyzwoitą funkcję omnicomplet, która obsługuje funkcję „podglądu”. Dodaj więc „podgląd” do opcji completeeopt i zobacz podpis funkcji po zakończeniu trybu wstawiania.

W trybie normalnym można CTRL + W} ręcznie otworzyć deklarację funkcji w oknie podglądu.

Ben
źródło
1

Jak wspomniano, naciśnięcie Ktego słowa kluczowego polega na przeszukaniu strony podręcznika man. Aby uzyskać strony podręcznika C ++, możesz spróbować https://github.com/aitjcize/cppman (dostaje „strony podręcznika” z cplusplus.com i cppreference.com).

kyticka
źródło
0

Zainstaluj YouCompleteMe. Po umieszczeniu kursora nad identyfikatorem wprowadź YcmCompleter GetDocpolecenie, aby wyświetlić dokument w małym oknie podglądu na dole. Działa w wielu językach, takich jak Python i c / c ++.

Youcompleteme wyświetla także okno podglądu podczas funkcji autouzupełniania. Możesz dostosować zachowanie podglądu dokumentu za pomocą g:ycm_autoclose_preview_window_after_completionzmiennej.

CyclicUniverse
źródło