Vim自动补全C++的#include语句

4

我刚安装了自动完成插件omnicomplete,它支持头文件的自动完成吗?

当我键入#include <时,是否可以提供一个头文件列表以便自动完成?

非常感谢!


1
你有c.vim吗?(http://www.vim.org/scripts/script.php?script_id=213) - yasouser
你安装了哪个全能自动补全插件? - ib.
@ib,app-vim/omnicppcomplete-0.41 - daisy
@yasouser,那个脚本是插件必需的吗? - daisy
如果你在问是否omnicomplete.cim必须要c.vim,那么答案是否定的。但是c.vim有很多你通常在c/c++ IDE中找到的功能。 - yasouser
也许这会有所帮助 https://dev59.com/33NA5IYBdhLWcg3wC5JR - fat
1个回答

2
您可以使用vim自带的自动补全功能,该功能在vim7中引入。
只需输入前几个字符,然后按Ctrl->P(向后搜索)Ctrl->N(向前搜索),vim会列出所有可用选项或完成它。
是的,它甚至适用于头文件。
要使其正常工作,您应该安装ctags,并在usr/include中添加:
ctags -f ~/.vim/stdtags -R --c++-kinds=+p --fields=+iaS --extra=+q . 

将以下内容添加到您的.vimrc文件中:

    set nocp
    filetype plugin on
    map <C-L> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR>

    set tags=~/.vim/stdtags,tags,.tags,../tags

    autocmd InsertLeave * if pumvisible() == 0|pclose|endif

你有对应的插件吗?我在Ubuntu下使用Vim 7.3,没有特殊的插件,当我输入“#include <vec”以及按下“ctrl+N”时,并没有自动完成为“vector”。 - J.N.
1
我认为^P ^N只搜索已经存在于文件中的字符串,我使用的是Gentoo中的7.3.219版本。 - daisy
@warl0ck。实际上,<C-n>将搜索所有打开的缓冲区以及一些(例如包含的文件)关键字。您可以通过设置来控制其范围。 - mike3996
@progo,我想我理解了vim的工作原理,如果我键入#include <,没有额外的字符串,它不会为所有头文件完成,但对于其他所有内容都会完成,这一部分我是正确的吗? - daisy
@warl0ck,没问题。它会将所有看到的内容都视为关键字。但它不会限制搜索范围在当前缓冲区内(这时可以使用<C-x><C-n>)。 - mike3996

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接