Come posso ottenere Vim per mostrare la documentazione di una funzione C / C ++?


17

La maggior parte degli editor ha una funzione come quando si premono alcuni tasti posizionando il cursore su una funzione, fa apparire la documentazione di quella funzione insieme al numero e al tipo di argomenti che la funzione accetta.

Mi chiedevo se Vim offre tale supporto. Ad esempio, durante la codifica in C, utilizzo una funzione integrata qsort(). Dal momento che non sono sicuro del tipo e del numero di argomenti necessari, vorrei conoscerlo senza sfuggire a Vim. È possibile?


2
Non sono sicuro che sia esattamente quello che vuoi, ma se dai il giusto valore all'opzione 'keywordprg'(il nome di un programma in grado di gestire la documentazione per la lingua che desideri), quindi premi Kuna parola chiave (che può essere il nome di una funzione), dovresti ottenere le informazioni che desideri. Ad esempio, se installi cppman( github.com/aitjcize/cppman ) e aggiungi un autocmd all'interno del tuo vimrc come autocmd FileType cpp setlocal keywordprg=cppman, allora cppmandovresti gestire la documentazione all'interno di un buffer c ++. Non testato però.
Saginaw

2
@saginaw Mentre cppmanè un suggerimento eccellente, se hai le manpage C e C ++ ( manpages-posix-deve libstdc++-X.Y-docpacchetti su sistemi basati su Debian), il vecchio mandovrebbe funzionare.
Muru,

Risposte:


8

Se puoi configurare YouCompleteMe , supporta C, C ++, JavaScript, Go e alcune altre lingue. Eccolo in azione:

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

È un po 'fastidioso da installare , e una volta installato è necessario configurarlo per C e C ++ creando un .ycm_extra_conf.py. Ne ho preso uno da questo repository e ho ottenuto questo effetto.


4
"È un po 'fastidioso da installare" ... È un eufemismo. Comunque è molto buono. ^ _ ~
Sardathrion - Ripristina Monica il

4
C'è un modo per forzare il pop-up dei completamenti a rimanere aperto mentre vengono digitati gli argomenti della funzione? Ad esempio, non appena si digita la prima lettera del primo argomento qsort(a, la finestra a comparsa scompare, rendendo difficile ricordare gli argomenti successivi.
thiagowfx,

1
Ma mostra solo il prototipo della funzione. Come farlo mostrare i suoi commenti doxygen (come fa Eclipse con javadocs)? Intendo parametri, output, note,
refs

1
@ Zeta.Investigator Una cosa che uso molto in Python è YcmCompleter GoToche di solito ti manda dove la funzione / classe è stata definita nel codice. Questa è la linea appena sopra il docstring, che elenca tutto ciò che hai chiesto. Non sono sicuro che i commenti in linea si trovino nello stesso posto in C / Java / C ++.
user1717828

8

Per C, premendo Ksulla parola chiave si aprirà direttamente la manpage incorporata. Ad esempio, posiziona il cursore sulla printfparola chiave:

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

Ora premi K(maiuscola K) e la manpage per printfdovrebbe apparire in 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

Questo sembra funzionare immediatamente in tutte le distro derivate da Debian su cui l'ho provato, nessuna configurazione specifica richiesta.


1
Questa è la manpage del printf(1)comando, non printf(3)la funzione. In ogni caso, le manpage della funzione C provengono da manpages-dev, che di solito è installato di default, ma non sempre, e le funzioni POSIX sono dentro manpages-posix-dev- di solito non sono installate di default, né è la documentazione di C ++ ( libstdc++-X.Y-doc).
Muru,

5

Se vuoi una documentazione adeguata , il plugin nel commento di saginaw sembra coprire le tue esigenze in C ++. Non ne conosco uno generico, ma probabilmente puoi trovare alternative per altre lingue su vim.org.


Se…

  • il tuo codice è già indicizzato con tag,
  • il tuo indice include anche la libreria standard,
  • e tutto ciò che vuoi è un suggerimento ,

puoi usare <C-w>}per aprire la definizione della parola chiave sotto il cursore in una finestra di anteprima. YMMV, ovviamente.

Vedi :help preview-window, :help tagse :help ctags.


Puoi anche usare la funzionalità "include-search" integrata di Vim: premi [iper stampare la "firma" della parola sotto il cursore nella riga di comando:

[io

Vedere :help include-search.


1
[iè strano. Funziona per stdlib.he qsort, ma non cstdlibe std::qsorto solo qsort.
Muru,

Per coloro che non hanno familiarità con la nomenclatura come io sono / era <C-w>mezzo CTRL-WQual è la nomenclatura utilizzata nei :helpfile. È quindi possibile utilizzare :pcper chiudere la finestra di anteprima.
danielson317,

1

Il tipo di file C / C ++ di Vim è dotato di una discreta funzione di omnicompletion, che supporta la funzionalità di "anteprima". Quindi aggiungi "preview" all'opzione completeopt e vedi la firma di una funzione quando inserisci il completamento della modalità.

In modalità normale, è possibile CTRL + W} per aprire manualmente la dichiarazione della funzione nella finestra di anteprima.


1

Come accennato, premendo Ksulla parola chiave funziona cercando una pagina man. Per ottenere le pagine man di C ++ puoi provare https://github.com/aitjcize/cppman (ottiene "pagine man" da cplusplus.com e cppreference.com).


0

Installa YouCompleteMe. Quando si posiziona il cursore su un identificatore, immettere il YcmCompleter GetDoccomando per visualizzare il documento in una piccola finestra di anteprima nella parte inferiore. Funziona in molti linguaggi come Python e C / C ++.

Youcompleteme visualizza anche la finestra di anteprima durante la sua funzione di completamento automatico. È possibile personalizzare il comportamento dell'anteprima del documento con g:ycm_autoclose_preview_window_after_completionvariabile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.