Как я могу заставить Vim показать документацию по функции C / C ++?


17

В большинстве редакторов есть функция, например, когда вы нажимаете некоторые клавиши, помещая курсор над функцией, она выдает документацию по этой функции вместе с количеством и типом аргументов, которые принимает эта функция.

Мне было интересно, предлагает ли Vim такую ​​поддержку. Например, при кодировании на C я использую встроенную функцию qsort(). Поскольку я не уверен в типе и количестве аргументов, которые он принимает, я хотел бы знать это, не выходя из Vim. Является ли это возможным?


2
Не уверен, что это именно то, что вы хотите, но если вы дадите правильное значение опции 'keywordprg'(название программы, которая может обрабатывать документацию для языка, который вы хотите), то нажав Kключевое слово (которое может быть именем функция), вы должны получить информацию, которую вы хотите. Например, если вы устанавливаете cppman( github.com/aitjcize/cppman ) и добавляете autocmd в ваш vimrc, например autocmd FileType cpp setlocal keywordprg=cppman, то cppmanдолжны обрабатывать документацию в буфере c ++. Не проверено, хотя.
saginaw

2
@saginaw Хотя cppmanэто отличное предложение, если у вас установлены справочные страницы на C и C ++ ( manpages-posix-devи libstdc++-X.Y-docпакеты в системах на основе Debian), manдолжен работать обычный старый .
Муру

Ответы:


8

Если вы можете настроить YouCompleteMe , он поддерживает C, C ++, JavaScript, Go и некоторые другие языки. Вот оно в действии:

введите описание изображения здесь введите описание изображения здесь

Это немного раздражает в установке , и после установки вам нужно настроить его для C и C ++ , создав .ycm_extra_conf.py. Я снял один из этого репо , и получил этот эффект.


4
"Это немного раздражает в установке" ... Это преуменьшение. Тем не менее, это очень хорошо. ^ _ ~
Сардатрион - Восстановить Монику

4
Есть ли способ заставить всплывающее окно завершений оставаться открытым, пока набираются аргументы функции? Например, как только вы вводите первую букву первого аргумента qsort(a, всплывающее окно исчезает, что затрудняет запоминание следующих аргументов.
thiagowfx

1
Но это просто показывает прототип функции. Как сделать так, чтобы он показывал свои комментарии о кислороде (как Eclipse делает с Javadocs)? Я имею в виду параметры, выходные данные, заметки, ссылки ...
Zeta.Investigator

1
@ Zeta.Investigator В Python я часто использую одну вещь YcmCompleter GoTo, которая обычно отправляет вас туда, где была определена функция / класс в коде. Это строка чуть выше строки документации, которая перечисляет все, что вы просили. Я не уверен, находится ли встроенное комментирование в том же месте в C / Java / C ++.
user1717828

8

Для C нажатие Kна ключевое слово откроет встроенную страницу руководства напрямую. Например, поместите курсор на printfключевое слово:

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

Теперь нажмите K(верхний регистр K) и страница справки printfдолжна появиться в 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

Похоже, что это работает из коробки во всех дистрибутивах Debian, на которых я пробовал, никакой специальной конфигурации не требуется.


1
Это страница printf(1)руководства команды, а не printf(3)функции. В любом случае, справочные страницы функций C получены от manpages-dev, который обычно устанавливается по умолчанию, но не всегда, а функции POSIX включены manpages-posix-dev- обычно не устанавливаются по умолчанию, равно как и документация C ++ ( libstdc++-X.Y-doc).
Муру

5

Если вам нужна надлежащая документация , плагин в комментарии saginaw, кажется, покрывает ваши потребности в C ++. Я не знаю общего, но вы можете найти альтернативы для других языков на vim.org.


Если…

  • ваш код уже проиндексирован ctags,
  • Ваш индекс также включает в себя стандартную библиотеку,
  • и все, что вы хотите, это подсказка ,

Вы можете использовать, <C-w>}чтобы открыть определение ключевого слова под вашим курсором в окне предварительного просмотра. YMMV, конечно.

Видите :help preview-window, :help tagsи :help ctags.


Вы также можете использовать встроенную в Vim функцию «include-search»: нажмите, [iчтобы напечатать «подпись» слова под курсором в командной строке:

[я

См :help include-search.


1
[iстранно. Это работает для stdlib.hи qsort, но не cstdlibи std::qsortили просто qsort.
Муру

Для тех, кто не знаком с номенклатурой, как я / был <C-w>означает, CTRL-Wкакая номенклатура используется в :helpфайлах. Затем вы можете использовать, :pcчтобы закрыть окно предварительного просмотра.
danielson317

1

Тип файла Vim C / C ++ поставляется с приличной функцией omnicompletion, которая поддерживает функцию «предварительного просмотра». Поэтому добавьте «preview» в ваш параметр completeopt и увидите сигнатуру функции при завершении режима вставки.

В обычном режиме вы можете нажать CTRL + W}, чтобы открыть объявление функции в окне предварительного просмотра вручную.


1

Как уже упоминалось, нажатие Kна ключевое слово работает путем поиска страницы руководства. Для получения справочных страниц C ++ вы можете попробовать https://github.com/aitjcize/cppman (он получает «справочные страницы» от cplusplus.com и cppreference.com).


0

Установите YouCompleteMe. Когда вы поместите курсор на идентификатор, введите YcmCompleter GetDocкоманду, чтобы получить документ в маленьком окне предварительного просмотра внизу. Он работает во многих языках, таких как Python и C / C ++.

Youcompleteme также отображает окно предварительного просмотра во время его функции автозаполнения. Вы можете настроить поведение предварительного просмотра документа с помощью g:ycm_autoclose_preview_window_after_completionпеременной.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.