Como posso obter o Vim para mostrar a documentação de uma função C / C ++?

17

A maioria dos editores possui um recurso, como quando você pressiona algumas teclas colocando o cursor sobre uma função; ela exibe a documentação dessa função, juntamente com o número e o tipo de argumentos que a função recebe.

Fiquei me perguntando se o Vim oferece esse suporte. Por exemplo, ao codificar em C, eu uso uma função interna qsort(). Como não tenho certeza sobre o tipo e o número de argumentos necessários, gostaria de conhecê-lo sem escapar do Vim. É possível?

sherelock
fonte
2
Não tenho certeza se é exatamente isso que você deseja, mas se você atribuir o valor correto à opção 'keywordprg'(o nome de um programa que pode lidar com a documentação para o idioma desejado), pressione Kuma palavra-chave (que pode ser o nome de uma função), você deve obter as informações desejadas. Por exemplo, se você instalar cppman( github.com/aitjcize/cppman ) e adicionar um autocmd dentro do seu vimrc como autocmd FileType cpp setlocal keywordprg=cppman, por exemplo , cppmandeverá lidar com a documentação dentro de um buffer c ++. Não testado embora.
23616 saginaw
2
@saginaw Embora cppmanseja uma excelente sugestão, se você tiver as páginas de manual C e C ++ ( manpages-posix-deve libstdc++-X.Y-docpacotes em sistemas baseados em Debian) instaladas, o antigo mandeve funcionar.
muru

Respostas:

8

Se você pode configurar o YouCompleteMe , ele suporta C, C ++, JavaScript, Go e alguns outros idiomas. Aqui está em ação:

insira a descrição da imagem aqui insira a descrição da imagem aqui

É um pouco chato de instalar , e uma vez instalado, você precisa configurá-lo para C e C ++ criando um .ycm_extra_conf.py. Tirei um deste repositório e obtive esse efeito.

muru
fonte
4
"é um pouco chato de instalar", ... Isso é um eufemismo. Ainda assim, é muito bom. ^ _ ~
Sardathrion - Reinstala Monica
4
Existe alguma maneira de forçar o pop-up de conclusões a permanecer aberto enquanto os argumentos da função são digitados? Por exemplo, assim que você digita a primeira letra do primeiro argumento qsort(a, a janela pop-up desaparece, dificultando a lembrança dos próximos argumentos.
thiagowfx
1
Mas apenas mostra o protótipo da função. Como fazê-lo mostrar seus comentários doxygen (como o Eclipse faz com javadocs)? Eu quero dizer parâmetros, saída, notas, refs ...
Zeta.Investigator 13/04
1
@ Zeta.Investigator Uma coisa que uso muito em Python é YcmCompleter GoTo, que normalmente envia você para onde a função / classe foi definida no código. Essa é a linha logo acima da sequência de caracteres, que lista tudo o que você pediu. Não tenho certeza se os comentários embutidos estão no mesmo local em C / Java / C ++.
user1717828
8

Para C, pressionar Ka palavra-chave abrirá a página de manual interna diretamente. Por exemplo, coloque o cursor na printfpalavra-chave:

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

Agora pressione K(K maiúsculo) e a página de manual printfdeve aparecer no 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

Isso parece funcionar imediatamente em todas as distros derivadas do Debian em que eu tentei, nenhuma configuração específica necessária.

dotancohen
fonte
1
Essa é a página de manual do printf(1)comando, não printf(3)a função. Em qualquer caso, as páginas de manual da função C são de manpages-dev, que geralmente são instaladas por padrão, mas nem sempre, e as funções POSIX estão manpages-posix-dev- normalmente não são instaladas por padrão, nem a documentação do C ++ ( libstdc++-X.Y-doc).
Muru
5

Se você deseja uma documentação adequada , o plug-in no comentário de saginaw parece cobrir suas necessidades de C ++. Não conheço um genérico, mas você provavelmente pode encontrar alternativas para outros idiomas no vim.org.


E se…

  • seu código já está indexado com ctags,
  • seu índice também inclui a biblioteca padrão,
  • e tudo que você quer é uma dica ,

você pode usar <C-w>}para abrir a definição da palavra-chave sob o cursor em uma janela de visualização. YMMV, é claro.

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


Você também pode usar a funcionalidade interna "incluir pesquisa" do Vim: pressione [ipara imprimir a "assinatura" da palavra sob o cursor na linha de comando:

[Eu

Veja :help include-search.

romainl
fonte
1
[ié estranho. Funciona para stdlib.he qsort, mas não cstdlibe std::qsortou apenas qsort.
muru 23/01
Para aqueles que não estão familiarizados com a nomenclatura como eu sou / era, <C-w>significa CTRL-WQual é a nomenclatura usada nos :helparquivos. Você pode usar :pcpara fechar a janela de visualização.
precisa saber é o seguinte
1

O tipo de arquivo C / C ++ do Vim vem com uma função de omnicompleção decente, que suporta a funcionalidade de "visualização". Portanto, adicione "preview" à sua opção completeopt e veja a assinatura da função ao inserir a conclusão do modo.

No modo normal, você pode CTRL + W} para abrir manualmente a declaração da função na janela de visualização.

Ben
fonte
1

Como mencionado, pressionar Ka palavra-chave funciona pesquisando uma página de manual. Para obter páginas de manual em C ++, você pode tentar https://github.com/aitjcize/cppman (ele obtém "páginas de manual" em cplusplus.com e cppreference.com).

Kyticka
fonte
0

Instale o YouCompleteMe. Ao colocar o cursor sobre um identificador, digite o YcmCompleter GetDoccomando para obter o documento em uma pequena janela de visualização na parte inferior. Ele funciona em várias linguagens como python e c / c ++.

O complemento também exibe a janela de visualização durante o recurso de preenchimento automático. Você pode personalizar o comportamento da visualização do documento com a g:ycm_autoclose_preview_window_after_completionvariável

CyclicUniverse
fonte