Подсказки функции Vim для C

Я пытаюсь достичь чего-то простого, обычно называемого "подсказками функций". Например, в редакторах на основе сцинтилля есть:

enter image description here

Вы вводите имя и получаете прототип. Есть несколько проблем с этим в vim:

  • Вам нужно перестроить ctags, чтобы поддерживать его в актуальном состоянии.
  • Вы не можете ввести C-X C-O после (, вы просто получите "шаблон не найден"
  • Вы не можете вводить C-X C-O в нормальном режиме, курсор будет просто прыгать
  • Вы получаете раздражающее окно предварительного просмотра вверху

Я пробовал несколько плагинов; большинство из них портит еще больше [^ 1]. Может ли кто-нибудь рекомендовать простой способ получить именно это? Простой прямоугольник, содержащий прототип функции и ничего более.

[^ 1] Это действительно ошеломительно, как идиотские некоторые из этих плагинов. Один плагин (я не буду упоминать об этом) фактически содержал в .vim файле список функций из libc.

Ответ 1

ctags для автозаполнения - беспорядок. Я предлагаю вам попробовать плагин на основе компилятора, например clang-complete или gcc-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

  • clang-complete для завершения
  • supertab для заполнения клавишей tab
  • ultisnips для подписчиков подписи функций. (также работает с snipmate)

и некоторые настройки 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

Наслаждайтесь!

Ответ 2

Попробуйте использовать eclim (плагин для интеграции с Eclipse).

Это решение много, но оно работает во всех случаях.