¿Cómo puedo hacer que Vim muestre la documentación de una función C / C ++?

17

La mayoría de los editores tienen una característica como cuando presionas algunas teclas colocando el cursor sobre una función, aparece la documentación de esa función junto con el número y tipo de argumentos que toma la función.

Me preguntaba si Vim ofrece tal apoyo. Por ejemplo, mientras codifico en C, uso una función incorporada qsort(). Como no estoy seguro sobre el tipo y la cantidad de argumentos necesarios, me gustaría saberlo sin escapar de Vim. ¿Es posible?

sherelock
fuente
2
No estoy seguro de que esto sea exactamente lo que desea, pero si le da el valor correcto a la opción 'keywordprg'(el nombre de un programa que puede manejar la documentación para el idioma que desea), entonces presione Kuna palabra clave (que puede ser el nombre de una función), debe obtener la información que desea. Por ejemplo, si instala cppman( github.com/aitjcize/cppman ) y agrega un autocmd dentro de su vimrc como autocmd FileType cpp setlocal keywordprg=cppman, entonces cppmandebería manejar la documentación dentro de un búfer de c ++. No probado sin embargo.
saginaw
2
@saginaw Si bien cppmanes una excelente sugerencia, si tiene instaladas las páginas de manual de C y C ++ ( manpages-posix-devy los libstdc++-X.Y-docpaquetes en los sistemas basados ​​en Debian), mandebería funcionar.
muru

Respuestas:

8

Si puede configurar YouCompleteMe , es compatible con C, C ++, JavaScript, Go y algunos otros idiomas. Aquí está en acción:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Es un poco molesto de instalar , y una vez que está instalado, necesita configurarlo para C y C ++ creando un .ycm_extra_conf.py. Saqué uno de este repositorio y obtuve este efecto.

muru
fuente
44
"Es un poco molesto instalarlo" ... Eso es un eufemismo. Aún así, es muy bueno. ^ _ ~
Sardathrion - Restablece a Mónica el
44
¿Hay alguna forma de forzar que la ventana emergente de finalización permanezca abierta mientras se escriben los argumentos de la función? Por ejemplo, tan pronto como escribe la primera letra del primer argumento qsort(a, la ventana emergente desaparece, lo que dificulta recordar los siguientes argumentos.
thiagowfx
1
Pero solo muestra el prototipo de la función. ¿Cómo hacer que muestre sus comentarios doxygen (como Eclipse hace con javadocs)? Me refiero a parámetros, salida, notas, referencias ...
Zeta.Investigator
1
@ Zeta.Investigator Una cosa que uso mucho en Python es YcmCompleter GoTo, que generalmente lo envía a donde se definió la función / clase en el código. Esa es la línea justo encima de la cadena de documentación, que enumera todo lo que solicitó. No estoy seguro si los comentarios en línea están en el mismo lugar en C / Java / C ++.
user1717828
8

Para C, al presionar Kla palabra clave se abrirá directamente la página de manual incorporada. Por ejemplo, coloque el cursor sobre la printfpalabra clave:

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

Ahora presione K(mayúscula K) y la página de manual para printfdebería aparecer en 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

Esto parece funcionar de forma inmediata en todas las distribuciones derivadas de Debian en las que lo he probado, no se requiere una configuración específica.

dotancohen
fuente
1
Esa es la página de manual del printf(1)comando, no printf(3)la función. En cualquier caso, las páginas de manual de la función C son de manpages-dev, que generalmente se instala de manera predeterminada, pero no siempre, y las funciones POSIX están dentro manpages-posix-dev, generalmente no se instalan de manera predeterminada, ni tampoco la documentación de C ++ ( libstdc++-X.Y-doc).
Muru
5

Si desea la documentación adecuada , el complemento en el comentario de saginaw parece cubrir sus necesidades de C ++. No conozco uno genérico, pero probablemente pueda encontrar alternativas para otros idiomas en vim.org.


Si…

  • su código ya está indexado con ctags,
  • su índice también incluye la biblioteca estándar,
  • y todo lo que quieres es un indicio ,

puede usar <C-w>}para abrir la definición de la palabra clave debajo del cursor en una ventana de vista previa. YMMV, por supuesto.

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


También puede usar la funcionalidad incorporada "incluir-búsqueda" de Vim: presione [ipara imprimir la "firma" de la palabra debajo del cursor en la línea de comandos:

[yo

Ver :help include-search.

romainl
fuente
1
[ies raro. Funciona para stdlib.hy qsort, pero no cstdliby std::qsorto simplemente qsort.
muru
Para aquellos que no están familiarizados con la nomenclatura como soy / era, <C-w>significa CTRL-Wcuál es la nomenclatura utilizada en los :helparchivos. Luego puede usar :pcpara cerrar la ventana de vista previa.
danielson317
1

El tipo de archivo C / C ++ de Vim viene con una función de omnicompleción decente, que admite la funcionalidad de "vista previa". Por lo tanto, agregue "vista previa" a su opción completeopt y vea una firma de función cuando finalice el modo de inserción.

En modo normal, podría CTRL + W} para abrir la declaración de función en la ventana de vista previa manualmente.

Ben
fuente
1

Como se mencionó, presionar Kla palabra clave funciona buscando en una página de manual. Para obtener páginas de manual de C ++, puede probar https://github.com/aitjcize/cppman (obtiene "páginas de manual" de cplusplus.com y cppreference.com).

Kyticka
fuente
0

Instala YouCompleteMe. Cuando coloca el cursor sobre un identificador, ingrese el YcmCompleter GetDoccomando para obtener el documento en una pequeña ventana de vista previa en la parte inferior. Funciona en muchos lenguajes como python y c / c ++.

Youcompleteme también muestra la ventana de vista previa durante su función de autocompletar. Puede personalizar el comportamiento de la vista previa del documento con g:ycm_autoclose_preview_window_after_completionvariable.

Universo cíclico
fuente