C的Vim功能提示

use*_*069 11 vim autocomplete syntax-highlighting code-completion code-hinting

我正在尝试实现一些简单的东西,通常称为"功能提示".例如,基于scintilla的编辑有:

在此输入图像描述

您键入一个名称,然后获取原型.在vim中存在一些问题:

  • 您必须重建ctags以使其保持最新
  • 不能键入CX CO (,你只得到"模式未找到"
  • 您无法在正常模式下键入CX CO,光标将跳转
  • 你会在顶部看到烦人的预览窗口

我试过几个插件; 他们中的大多数人更加混乱[^ 1].任何人都可以推荐一种简单的方法来获得这一点吗?一个包含函数原型的简单矩形,仅此而已.

[^ 1]这些插件有些愚蠢,这真是令人头脑麻木.一个插件(我不会提及它)实际上包含在.vim文件中的libc函数列表中.

non*_*one 8

ctags自动完成是一团糟.我建议你尝试一个基于编译器的插件,比如clang-completegcc-sense(还没试过这个).优点是:

  • 更准确,因为他们所做的几乎是编译
  • 编译错误通过源代码动态标记

您必须重建ctags以使其保持最新

你不需要处理ctags(它们仍然可以跳转)

你不能输入CX CO(你只会得到"找不到模式"

你会期待什么?

您无法在正常模式下键入CX CO,光标将跳转

你总是可以重新映射那个序列,如果你认为这是一个常见的错误(类似的话nnoremap <C-x><C-o> a<C-x><C-o>)

你会在顶部看到烦人的预览窗口

您可以通过previewcompleteopt选项中删除来禁用此功能.看到:help completeopt

我正在使用以下设置:

这里

和一些vimrc设置:

set pumheight=10             " so the complete menu doesn't get too big
set completeopt=menu,longest " menu, menuone, longest and preview
let g:SuperTabDefaultCompletionType='context'
let g:clang_complete_auto=0  " I can start the autocompletion myself, thanks..
let g:clang_snippets=1       " use a snippet engine for placeholders
let g:clang_snippets_engine='ultisnips'
let g:clang_auto_select=2    " automatically select and insert the first match
Run Code Online (Sandbox Code Playgroud)

请享用!


小智 0

尝试使用eclim(与 Eclipse 集成的插件)。

该解决方案开销很大,但在所有情况下都有效。