Vim C++自动完成

Ami*_*hum 8 c++ unix vim

如何在Vim中启用自动完成功能?

我试着这样做,但我不熟悉vimrc文件等,所以它没有用.你能给我一步一步说明如何做到这一点吗?


编辑

我尝试安装OmniCppComplete.按照说明操作,但是当我尝试使用它时,我收到以下错误:

处理函数omni时检测到错误#cpp #complete#Main..24_InitComplete:

第24行:

E10:\应该跟/,?要么 &

Nei*_*ant 5

默认情况下,Vim 将使用 Ctrl-N 或 Ctrl-P 根据文件中的单词完成补全,这对于最近引用的局部变量等很方便,并且适用于任何语言甚至普通文本的代码(对于完成难以拼写的名称很方便)。但是,它不会在语义上或参考您在编写的特定上下文中允许的实际类型来执行此操作。为此,您需要安装 ctags,然后在 /usr/include 中键入:

ctags -f ~/.vim/stdtags -R --c++-kinds=+p --fields=+iaS --extra=+q .
Run Code Online (Sandbox Code Playgroud)

然后将其添加到您的 .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
Run Code Online (Sandbox Code Playgroud)

这也将使 Ctrl-L 重新加载标签,从而从当前目录中选取新的自动完成标签。

  • 这也会从包含的头文件中自动完成吗? (2认同)
  • Ctags 索引您编写的代码并存储有关它的语义信息,然后可以查询这些信息以查找单词完成、定位函数/变量的用法等。“set nocp”使 vim 退出“兼容”模式,这是必需的对于以下命令。“filetype plugin on”使 vim 能够根据文件类型(即 C++)执行操作。“map &lt;CL&gt;...”行设置 Ctrl-L 的键映射来调用 ctags 来更新其索引。“set Tags=...”行定义存储标签信息的位置,这是标准位置。“autocmd”行关闭完成窗口。 (2认同)

Dum*_*der 4

详细说明自动完成 (archive.org)输入前几个字符,然后按 Ctrl->P(向后搜索)或 Ctrl->N(向前搜索),列出所有可用选项或完成它。

我使用 vim7.2(vim7 中引入了自动完成),这些控件工作得很好。

  • 在 vim7 中是的,不确定在旧版本中是否可用。 (2认同)