大多数编辑器都有一个功能,例如当您通过将插入符号放在某个函数上来按下某些键时,它会弹出该函数的文档以及该函数采用的参数的数量和类型。

我想知道Vim是否提供这样的支持。例如,在C语言中进行编码时,我使用内置函数qsort()。由于我不确定所使用的参数的类型和数量,因此我想在不逃脱Vim的情况下知道它。可能吗?

评论

不确定这是否正是您想要的,但是如果您为'keywordprg'选项(可以处理所需语言的文档的程序名称)提供正确的值,然后在关键字上按K(可以是函数的名称),则应该获取所需的信息。例如,如果您安装cppman(github.com/aitjcize/cppman)并在vimrc中添加一个autocmd,例如autocmd FileType cpp setlocal keywordprg = cppman,则cppman应该在c ++缓冲区内处理文档。尚未测试。

@saginaw虽然cppman是一个很好的建议,但如果您已安装C和C ++手册页(基于Debian的系统上的manpages-posix-dev和libstdc ++-X.Y-doc软件包),那么普通的老人应该可以使用。

#1 楼

对于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发行版中,这似乎都是开箱即用的,不需要特定的配置。

评论


那是printf(1)命令的手册,而不是printf(3)函数的手册。无论如何,C函数手册页来自于manpages-dev,通常默认情况下安装,但并非总是如此,而POSIX函数位于manpages-posix-dev中-通常默认情况下未安装,C ++文档也没有(libstdc ++-XY -doc)。

–大师
16年1月24日在9:24



有关如何获取此功能以打开所需的手册页的详细信息,请参见@PiCTo的出色新答案。

–丰富
20年7月16日在13:53

#2 楼

如果可以设置YouCompleteMe,则它支持C,C ++,JavaScript,Go和其他一些语言。实际操作如下:




安装有点烦人,安装完成后,您需要通过创建一个C和C ++对其进行配置.ycm_extra_conf.py。我从此仓库中取出了一个,并得到了这种效果。

评论


“安装有点烦人,”……这是一种轻描淡写。尽管如此,它还是很好。 ^ _〜

–Sardathrion-反对SE滥用
16年1月28日在9:27

有什么方法可以在键入函数参数时强制完成补全弹出窗口保持打开状态?例如,一旦键入第一个参数qsort(a)的第一个字母,弹出窗口就会消失,从而难以记住下一个参数。

–thiagowfx
16年6月28日在21:02



但这只是显示了该函数的原型。如何使其显示其脱氧注释(就像Eclipse使用javadocs一样)?我的意思是参数,输出,注释,参考...

– Zeta.Investigator
18年4月13日在8:33



@ Zeta.Investigator我在Python中大量使用的一件事是YcmCompleter GoTo,它通常将您带到代码中定义函数/类的位置。这是文档字符串上方的那一行,其中列出了您要的所有内容。我不确定内联注释是否在C / Java / C ++中位于同一位置。

–user1717828
19年3月19日在17:58

#3 楼

如果您需要适当的文档,saginaw注释中的插件似乎可以满足您的C ++需求。我不了解通用语言,但是您可能可以在vim.org上找到其他语言的替代语言。


如果...


您的代码已经使用ctags进行了索引,
您的索引还包括标准库,
您只需要一个提示,

您可以使用<C-w>}打开关键字的定义在预览窗口中的光标下方。当然是YMMV。

请参见:help preview-window:help tags:help ctags


您还可以使用Vim内置的“包含搜索”功能:按[i在命令行中在光标下打印单词的“签名”:



请参阅:help include-search

评论


[我很奇怪。它适用于stdlib.h和qsort,但不适用于cstdlib和std :: qsort或仅qsort。

–大师
16年1月23日在20:25

对于我不熟悉的术语,表示CTRL-W,这是:help文件中使用的术语。然后,您可以使用:pc关闭预览窗口。

– danielson317
19年11月21日在16:49



#4 楼

仅使用香草Vim并补充基于tags的解决方案,K在光标(正常模式下)或当前选择项(可视模式下)下的单词上调用'keywordprg'(默认为man)并显示输出。按照另一个答案的建议,它可以用来参考标准函数和变量的文档(某些IDE可能会模糊标准库和非标准库的文档之间的界限,您肯定不会从K / man获得后者)。
但是,如该答案所遗漏的那样,按K上的printf将会输出printf(1)(“命令printf”)的文档,而不是printf(3)(C标准库中的“函数printf”),您可能会去。请参见手册页中的数字是什么意思?有关此区别的更多详细信息。实际上,它是man [-s] 1 printf(默认为man printf)的输出,而不是man [-s] 3 printf
如其文档(:help kp)中所述,K需要计数:
'keywordprg' 'kp'   string  (default "man" or "man -s")

    Program to use for the |K| command.
    [...]
    When "man", "man -s" or an Ex command is used, Vim will automatically
    translate a count for the "K" command and pass it as the first
    argument.  For "man -s" the "-s" is removed when there is no count.

因此,您可以从printf(3)获取3K的文档。
由于每次使用K都可能是期望的行为,因此我看到2个选项:

'keywordprg'修改为man [-s] 3
K调用3K的模式下,将
set keywordprg+=\ 3
重新映射为K
nnoremap K 3K
vnoremap K 3K



,由于此行为仅在C代码中有用,将以上解决方案中的选择添加到'kp'中的ftplugin(例如,after-directory)中。还请注意,根据@muru的评论,包含手册页的软件包可能必须事先安装。
最后,如@kyticka所述,对于C ++(尽管在C语言中也有帮助),您可以使用类似的方法通过将~/.vim/after/ftplugin/c.vim替换为man作为cppman,例如在'kp'中:
set keywordprg=cppman

或者,可以使用~/.vim/after/ftplugin/cpp.vim作为离线页面来缓存cplusplus.com中的条目,并且可以将cppman设置为读取这些页面,从而允许您使用默认值来访问来自man的C ++标准库的文档,并通过扩展名进行访问。 ,来自默认的man

#5 楼

Vim的C / C ++文件类型带有不错的多功能完成功能,该功能支持“预览”功能。因此,在您的completeopt选项中添加“ preview”,并在完成插入模式完成时看到函数签名。

#6 楼

如前所述,通过搜索手册页可以在关键字上按K。要获取C ++手册页,您可以尝试https://github.com/aitjcize/cppman(它从cplusplus.com和cppreference.com获取“手册页”)。

#7 楼

安装YouCompleteMe。将光标放在标识符上时,输入YcmCompleter GetDoc命令以在底部的一个小的预览窗口中获取该文档。它适用于多种语言,例如python和c / c ++。

Youcompleteme在自动完成功能期间还会显示预览窗口。您可以使用g:ycm_autoclose_preview_window_after_completion变量来自定义文档预览的行为。