C的Vim功能提示

时间:2012-07-02 20:34:18

标签: vim autocomplete syntax-highlighting code-completion code-hinting

我正在努力实现一些简单的东西,通常称为“功能提示”。例如,基于scintilla的编辑就有它:

enter image description here

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

  • 您必须重建ctags以使其保持最新
  • 您无法在 (之后输入C-X C-O ,您将获得“找不到模式”
  • 您无法在正常模式下键入C-X C-O,光标将跳转
  • 您在顶部看到了令人讨厌的预览窗口

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

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

2 个答案:

答案 0 :(得分:8)

ctags自动完成是一团糟。我建议您尝试使用基于编译器的插件,例如clang-completegcc-sense(尚未尝试过此插件)。优点是:

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

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

你不需要处理ctags(尽管它们仍然很有用)

  

你不能输入C-X C-O(你只会得到“找不到模式”

你会期待什么?

  

您无法在正常模式下键入C-X C-O,光标将跳转

如果您认为这是一个经常出错的错误(例如nnoremap <C-x><C-o> a<C-x><C-o>

,您可以随时重新映射该序列
  

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

您可以通过从preview选项中删除completeopt来停用此功能。见:help completeopt

我正在使用以下设置:

here

和一些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

享受!

答案 1 :(得分:0)

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

此解决方案已经过头了很多,但它适用于所有情况。